まとまりのないブログ

something which something is something

交差運転日記

iOSのメールの添付ファイルを開くときに選択したアプリの動作について

投稿日:

iPhoneアプリ開発で、メールに添付されたファイルを自分が作ったアプリで開きたい場合、についての悩み。

[iPhone/iPad] メールの添付ファイルをアプリケーションで開けるようにする | Sun Limited Mt.

ファイルを受け取る
メールの添付ファイルからアプリケーションを指定すると application:didFinishLaunchingWithOptions: の launchOptions にファイルの URL (file://…というスキーマ) で渡されます。

AppDelegateのdidFinishLaunchingWithOptionsを使うと、添付ファイルがoptionの引数として受け取ることができる。が、このデリゲートはアプリが初めて起動するときに呼ばれるため、バックグラウンドで起動中などであった場合には当然呼ばれない。つまり完全にアプリを終了しなければならないということになる。

iOSのライフサイクル – iOS Docs

各メソッドは、下記のタイミングで呼び出されます。
application:didFinishLaunchingWithOptions
はじめての起動時に呼び出される
application:applicationWillResignActive
アプリが非Activeになる直前に呼び出される
application:applicationDidEnterBackground
アプリが非Activeになりバックグランド実行になった際に呼び出される
application:applicationWillEnterForeground
2回目以降の起動時に呼び出される(Backgroundにアプリがある場合)
application:applicationDidBecomeActive
アプリがActiveになった際に呼び出される
application:applicationWillTerminate
システムからのアプリ終了の際に呼び出される

アプリが2回目の起動の場合
application:applicationWillEnterForeground > application:applicationDidBecomeActive

applicationDidBecomeActiveでオプションurlがとれればいいのだけれども、そういうデリゲートは見つからなかった。

catch launchOptions in applicationDidBecomeActive

英語の掲示板でも同様の話題を見つけた。
application:openURL:sourceApplication:annotation: これで何か出来るんだろうか。

試しに下記メソッドをAppDelegate.mに記入してみた。

-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{

NSLog(@”method is called”);

return YES;
}

で、アプリを起動して、一旦ホーム画面に戻って、メールを起動して、添付ファイルからアプリを起動してみると、上記デリゲートが呼ばれた。(詳しい理由についてはわかっていない)
でさらにテストしてみると、上記メソッドのパラメータの openURL:(NSURL *)url の部分が didFinishLaunchingWithOptions で受け取れるオプションと同じことになっている様子。(これもまた詳しい理由はわかっていない)

この辺りに重要なことが書いてあるような気がする。
UIApplicationDelegate Protocol Reference

Discussion
Your implementation of this method should open the specified URL and update its user interface accordingly. If your app had to be launched to open the URL, the app calls the application:willFinishLaunchingWithOptions: and application:didFinishLaunchingWithOptions: methods first, followed by this method. The return values of those methods can be used to prevent this method from being called. (If the app is already running, only this method is called.)

さらに詳しい説明はほかのサイトで調査してみてください。誰かの何かの参考になれば幸いです。

-交差運転日記

執筆者:


comment

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

イーバンク銀行とジャパンネット銀行の口座数と預金残高の推移

イーバンク銀行とジャパンネット銀行の口座数と預金残高の推移が公開されているということを初めて知った。イーバンク銀行は律儀に毎月更新をしている模様。ジャパンネット銀行は毎年3月末の結果を公開している模様 …

no image

livedoorのブログサービス「nowa」がサービス終了

livedoorのブログサービス「nowa」がサービス終了した模様。

no image

PILOT DR DRAWING PEN 買ってみた。

なかなかいい。安いし。安心のパイロット印だし。試しに自画像を描いてみた。

no image

本についたタバコの臭いを取る方法

扇風機を用意 適度な高さの椅子を扇風機の前に設置 タバコの臭いが気になる本を,扇風機の風がページに当たるように軽く開いて立てて置く 1日~3日間,中~強の強さで扇風機の風を当て続ける これでタバコの臭 …

no image

近所のスリーエフの手作り弁当がやたら美味い件

近所のスリーエフで買った弁当がやたら美味い。コンビニ弁当だからと油断していた。正直ホカ弁より美味い。っていうか今まで食べたことがある弁当の中で一番かもしれない。誇張じゃなくて。(そういえば他にも美味い …