2010年4月21日水曜日

自分のアプリをリンクで起動させる方法

iPhoneではサファリ(おそらくその他のブラウザからでも)から電話、SMS、Youtubeなどに対するリンクを自動的に判別し、 個々のアプリを開いてくれるという機能がありますが、せっかくのこの機能自分のアプリでも使いたい!と思って調べてみました。

結果以下手順で、サファリからリンクを入力して起動することが出来ました。

まず、info.plistに以下を追記。ただし、これはXCodeからいじるとkeyの名前が若干違って見えるので注意です。

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLName</key>
    <string>com.gluegent.showAlert</string>
    <key>CFBundleURLSchemes</key>
    <array>
        <string>launchtest</string>
    </array>
  </dict>
</array>

ApplicationDelegateに以下のメソッドを追記。

-(BOOL) application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    // どこからでも呼ばれる可能性があるので
    // スキーマ名、パスなどきちんと確認する必要がある。
    if ([[url scheme] isEqualToString:@"launchtest"]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"LaunchTest"
                              message:@"Hey, Success!!"
                              delegate:nil
                              cancelButtonTitle:nil
                              otherButtonTitles:@"Yappie!!", nil];
        [alert show];
        [alert release];
        return YES;
    }
    return NO;
}

最後にアプリをシミュレータで起動したあとで、サファリからURL入力欄にlaunchtest:com.gluegent.showAlertと入力するとアラートが表示されます。この情報は意外とたどり着けなかったんですが、普通に公式のTodoアプリのチュートリアルの中でも解説されていました。(リンクを失念。。。)

ただし、このリンクによる起動は注意しないと重大なセキュリテリィホールを作ってしまう危険性もあります。 詳しくはApple公式のScureCodingGuideを参考にしてみてください。

0 件のコメント:

コメントを投稿