まとまりのないブログ

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

オブジェクト指向プログラミング

object の意味 – 英和辞典 Weblio辞書 1 (知覚できる)物,物体. 用例 ⇒→UFO. 2 〔動作・感情などの〕対象 〔of,for〕. 用例 an object of p …

no image

ソフトバンクのプリペイド携帯をチャージ

360日の有効期限がそろそろ切れるため3000円分をチャージ。 「残高は8942円です。残高の使用期限は・・・」 あれ?残高はチャージしたばかりだから3000円のはずが,なぜ9000円近く残っているの …

no image

ゴールド免許を取る

5年間無事故で無違反ならば、更新後に交付される免許証の帯の色がゴールドになる。ゴールド免許を簡単に取る方法は、車の運転を極力控えるようにうすることで、自動的に無事故で無違反になりゴールド免許になる。ど …

no image

ゆうちょダイレクトを開設した!

・・・・・ログインするのがめんどくさい(´A`) ログインするのに毎回2画面に遷移しないといけないからidとパスワードがブラウザに記憶できない。お客様番号は手打ち入力だけど暗証番号にはソフトウェアキー …

no image

フレッツ光ネクスト

工事完了して無事開通。といっても30分~1時間ほどであっさり終わったという印象。初期設定を終えてネット接続ができることを確認してみたが,ADSLとはだいぶ違うということに気付いた。二つのIDとパスワー …