まとまりのないブログ

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

メモ:歩兵

・列方向に1マスのみ進める。後退はできない。 ・進行方向に味方駒がいる場合は進めない ・1段目には打てない ・1段目まで進むとと金に成るしかない ・敵陣に進むとと金に成れる ・敵玉を打って詰ますことは …

no image

部屋にアップライトピアノがある生活

転居するために転居先のガラクタを処分中。そのガラクタの中で一つ、どうにも処分に踏み切れないものがある。カワイの電気ピアノ・ピアリーナ。調律をここ数十年おこなっていないので音がおかしくなっているし鍵盤も …

no image

金朋地獄

めちゃめちゃワロタ

no image

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

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

no image

kensington expert mouse 7.0 mac os X でmouseworksが起動できない件

環境 mac os X 10.4 cpu:core 2 duo 製品に付属してあるインストールCDの中にあるmouseworksは、intel CPU を使ったmacでは使用できない模様。下記サイトよ …