scheme でアプリケーションを起動して引数を受け取る(iOS編)
前にプロジェクトの設定方法を書いたな〜と思って探したら、アプリケーションから写真を指定して拙作「写真印刷」を起動する方法の説明だった…。
というわけで、Xcode 4.3.3でプロジェクトの設定は以下の通り。
1. プロジェクトの「TARGETS」の「Info」タブを表示、右下の「Add」ボタンをクリック
3. 「Untitled」の URL Typeが加わるので、開いて各種情報を入力
- URL Schemes : 起動する為の scheme。今回の例では paraches。
今回はこれだけ設定してあれば OK。
リンクをクリックするとアプリケーションが起動する。
で、アプリが起動すると - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions が呼ばれるので、その中で UIApplicationLaunchOptionsURLKey を使ってブラウザでクリックした URL を受け取れる。
具体的にはこんな感じ。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSURL *clickedURL = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey]; ... }
でも、これだと先の URL そのままで nameや urlの値を取り出すのが面倒…。
そこで見つけたのがこのページ。
あ〜こりゃ楽チン!
カテゴリで NSURL に queryAsDictionaryってメソッド加えてこれ一発で引数が貰える。
こんな感じ。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSURL *clickedURL = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey]; NSDictionary *query = [clickedURL queryAsDictionary]; NSString *nameString = [query objectForKey:@"name"]; NSString *urlString = [query objectForKey:@"url"]; ... }
これで、渡されたデータを使ってアプリ側であれこれすれば OK!
先のリンクをクリックして nameと urlを表示するサンプルも作ってみた。
- MySchemeTest(サンプルコード)