まとまりのないブログ

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

中古のカッコイイ家

鹿児島県鹿児島市吉野町の中古一戸建て・新築一戸建て[5635678701]|賃貸・不動産情報サイト「at home web (アットホームウェブ)」 ファンズワース邸みたいだ。一度でいいからこんな家に …

no image

PILOT DR DRAWING PEN 買ってみた。

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

no image

完全にkeviチェア

中古 Fritz Hansen チェア made in denmark ② 当方素人の為、詳しい内容が分かりかねますので画像にて判断願います。 画像を見た限りでは完全にkeviチェア。2002年製のプ …

no image

googleの検索結果からの訪問者がfavicon.icoのみ取得

アクセスログを見てみると、ページに訪問しないでgoogleの検索結果からfavicon.icoファイルを取得するログのみ記録されているのが最近多くみられるようになった。参照元は検索結果のページとなって …

no image

オークションストアの出品方法

エコアースspremacy3 なるほど。ページの作り方が上手い。長期的にオークションで多数の商品を出品していく場合に,出品物を効果的にアピールするには,このようにページ上部に特に目立たせたい商品画像を …