2010/10/08

カスタムURLスキームと名前付きペーストボードを利用したATOK Pad for iPhoneとの連携

カスタムURLスキームと名前付きペーストボードを使うことで、自分のアプリケーションからATOK Pad for iPhone (以下、ATOK Pad) を利用することができるようになります。これまで何回かにわたってカスタムURLスキームを利用する方法や、独自カスタムURLスキームを指定する方法などについて述べましたが、今回はこれらのまとめとして、ATOK Padとの連携について説明します。

この記事ではカスタムURLスキームのためのInfo.plistへのエントリ作成は既に済んでいるものとします (以前の記事「 iOSで独自カスタムURLスキームを設定する方法について」も参照してください)。また、Interface Builderの利用法については理解しているものとします。なお、ATOK Padには開発者向け情報向けページがあり、サンプルプログラムも用意されているので試してみるとよいでしょう。

ATOK Padとの連携の概要

基本的な処理の流れは次のようになります。

  1. 名前付きペーストボード「com.atok.ATOK Pad」にTextViewのテキストを入れておきます
  2. ATOK Padを起動するために、カスタムURLスキームを利用したURL「atokpad://」を指定してopenURL:します
    このとき、ATOK Padで編集後にこのアプリケーションに戻れるようにこちらのカスタムURLスキーム「mySampleApp:」を含めておきます
  3. (ユーザがATOK Padで編集)
    編集後には、ATOK Padが名前付きペーストボード「com.atok.ATOK Pad」に編集内容を入れて、「mySampleApp:」をopenURL:してきます
  4. メソッドapplication:handleOpenURL:が呼び出されるので、ここで名前付きペーストボード「com.atok.ATOK Pad」の内容をTextViewに戻します

そこで、CustomURLSchemeSampleViewControllerでボタンが押されたときに 1. と 2. の処理を行い、CustomURLSchemeSampleAppDelegateで 4. の処理を行うようにします。

ウィジェットとアクションの追加

まず、CustomURLSchemeSampleViewController.hに以下のコードを追加します。CustomURLSchemeSampleViewController.mで@synthesisを追加するのを忘れずに。

  @interface CustomURLSchemeSampleViewController : UIViewController {
+      UIButton* button;
+      UITextView* textView;
  }
+ @property (nonatomic,retain) IBOutlet UIButton* button;
+ @property (nonatomic,retain) IBOutlet UITextView* textView;
+ -(IBAction)launchAtokpad;
  @end

続いて、Interface Builderを起動してCustomURLSchemeSampleViewController.xibに対して次のようにUIButtonとUITextViewを配置します。

そして、次のように関連付けます。

最後に、ボタンに対するアクションとして、CustomURLSchemeSampleViewController.mに次のメソッドを追加します。基本的には「atokpad://」だけで起動することができますが、それだけだとATOK Pad側で元のアプリケーションがわからず、戻ってくることができません。そのため、「?src=」以下にこのアプリケーションを起動するためのURLを指定します。また、ATOK Pad側で入力文字数の上限値 (ATOK Pad右上の数値) を指定する場合には「?maxlength=127」のように指定します。

-(IBAction)launchAtokpad {
    NSURL* url = [NSURL URLWithString:@"atokpad://com.atok.ATOK%20Pad?src=mySampleApp:"];
    //NSURL* url = [NSURL URLWithString:@"atokpad://?src=mySampleApp:"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        UIPasteboard* pb = [UIPasteboard pasteboardWithName:@"com.atok.ATOK Pad" create:YES];
        pb.persistent = YES;
        [pb setString:textView.text];
        [[UIApplication sharedApplication] openURL:url];
    }
}

例えば、「atokpad://com.atok.ATOK%20Pad?src=mySampleApp://?foobar&maxlength=199」と指定した場合にはATOK Padの入力上限が199文字になり、編集後に「mySampleApp://?foobar」がオープンされます。なお、実際にはコメントアウトのように「com.atok.ATOK%20Pad」を省略しても大丈夫でした。

カスタムURLスキームからの起動処理

まず、CustomURLSchemeSampleAppDelegate.hに次のコードを追加します。CustomURLSchemeSampleAppDelegate.mで@synthesisを追加するのを忘れずに。

+ @class CustomURLSchemeSampleViewController;
  @interface CustomURLSchemeSampleAppDelegate : NSObject  {
      UIWindow *window;
+     CustomURLSchemeSampleViewController *viewController;
  }
  @property (nonatomic, retain) IBOutlet UIWindow *window;
+ @property (nonatomic, retain) IBOutlet CustomURLSchemeSampleViewController *viewController;
  @end

そして、ペーストボードの内容を取得するために、次のメソッドをCustomURLSchemeSampleAppDelegate.mに追加します。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL*)url {
    if ([url.scheme isEqualToString:@"mySampleApp"]) {
        UIPasteboard* pb = [UIPasteboard pasteboardWithName:@"com.atok.ATOK Pad" create:NO];
        viewController.textView.text = pb.string;
        [UIPasteboard removePasteboardWithName:@"com.atok.ATOK Pad"];
        return YES;
    }
    return NO;
}

これで、実機上でテキストをやりとりすることができるようになりました。

まとめ

カスタムURLスキームと名前付きペーストボードを使って、自分のアプリケーションからATOK Padを利用する方法について述べました。いろいろアプリケーションをいじっていて気がついたのですが、ATOK Pad側で編集開始時のカーソルの位置を指定できないため、長めの文章の末尾を修正したいときは自力でスクロールしなければなりませんでした。

なお、「ATOK」および「ATOK Pad」は、株式会社ジャストシステムの登録商標または商標です。

関連項目

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。