トップ «前の日記(2012-06-30) 最新 次の日記(2012-07-02)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|

2012-07-01 [iOS][Web]ネイティブWebアプリケーション(その4)

やはり、Cocoa勉強会は参加すると得る物がある。先日のCocoa勉強会で教えてもらった事だ。

UIWebViewのstringByEvaluatingJavaScriptFromString:を使った方法だと、HTMLコンテンツ側からは、UIWebViewDelegateのデリゲート・メソッドが呼ばれるタイミングでしかイベントを発生させる事ができない。そこで、任意のタイミングでイベントを発生させる方法に挑戦する。ヒントは、以前紹介したFacebook SDKで得られた情報だ。

イベント通知用のURLスキームを追加する。

AddURLType

サンプルでは、webapp-demoとした。

URLSchemes

このURLスキームを受けるデリゲート・メソッドを追加する。

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    DBGMSG(@"%s, url(%@)", __func__, url);
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"demo"
                                                    message:@"WebApp"
                                                   delegate:self
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil, nil];
    [alert show];
    return YES;
}

それでは、HTMLコンテンツに、このURLスキームを呼ぶコードを追加してみよう。

<a href="webapp://demo/debug?abc=123">call WebApp</a><br />

選択してみる。

select

アラートが表示された。

alert
2012-07-02 09:26:59.438 WebApp[2366:f803] -[AppDelegate application:openURL:sourceApplication:annotation:], url(webapp-demo://WebApp.demo/debug?abc=123)

最初、URLスキームとしてWebAppを登録していたが、おそらく、なにかとぶつかったのか上手くいかなかった。使用するURLスキームの選択は重要なようだ。

_ ソースコード

GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/ios/WebApp - GitHub

トップ «前の日記(2012-06-30) 最新 次の日記(2012-07-02)» 編集