iOS版マネタイズAPI連携機能のしくみ


こんにちは。開発部の坊主です。

今回はTOLOTが提供しているiOS版マネタイズAPI連携機能のしくみを軽く紹介したいと思います。
マネタイズAPIとはざっくり説明すると開発者の方が作成したアプリと、TOLOTアプリを連携し、注文まで行った場合に報酬を支払うという仕組みの事です。

<マネタイズAPIについての詳細はこちら>
https://developers.tolot.com/monetizeapi

今回紹介する部分はアプリ間のデータの連携はどうやってやるのかという部分になります。
マネタイズAPIには興味はあるけれど実装が複雑そうと思っている方の背中を少しでも押せれば幸いです。

まず一般的にiOSでアプリ間のデータをやりとりするには下記のような手段が考えられます。
  • URLScheme+UIPasteboard
  • UIActivityViewController
  • UIDocumentInteractionController

TOLOTアプリではこの中でURLScheme+UIPasteboardでの連携を受け付けています。
余談ですが、URLScheme+UIPasteboardを選択したのにも理由があります。
UIActivityViewControllerやUIDocumentInteractionControllerは提供されているUIが格好いいのですが、UIActivityViewControllerはiOS6以上でしか使えないため、iOSのバージョンを幅広くサポートするTOLOTアプリにはマッチしません。
UIDocumentInteractionControllerは古いiOSでも使えるのですが、しくみ上TOLOTアプリ以外のアプリも連携対象として表示されてしまう場合もあったりと考慮する事も多いです。
以上を踏まえて、提供する側としてはシンプルな方が良いという思いもありTOLOTアプリではURLScheme+UIPasteboardを採用しています。

URLScheme+UIPasteboardでの連携は提供されているUI等はありませんが昔からある連携方法で手軽に利用でき、基本的に1:1の関係でデータの受け渡しが行えます。

早速連携のしくみを試してみましょう

手順としてはおおまかに2ステップあり
  1. TOLOTアプリに必要なデータを用意する(UIPasteboardを利用)
  2. TOLOTアプリを呼ぶ(URLSchemeを利用)

となります。

ステップ1

TOLOTアプリで作成するフォトブックには画像のページや文字のページがあるので、UIPasteboardを利用し使いたい画像や文字のデータを渡します。
UIPasteboardは例えば「Safariで見ているページの一文をコピーし、メモにペーストする」のような時に使われています。
TOLOTアプリへのデータの渡し方もそれとほとんど同じですが、ペーストの部分は特に意識する事はなく、渡すデータをコピーをしてTOLOTアプリを呼び出せばそのデータを受け取ってくれます。
UIPasteboardの使い方は非常に単純で

    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    NSString *data = @"TOLOTアプリへ渡す文字";
    [pasteboard setValue:data forPasteboardType:@"public.text"];

これだけで「TOLOTアプリへ渡す文字」をiPhone端末がコピーした事になっています。
ただ、上記の例はあくまでUIPasteboardの一般的な使い方で、TOLOTアプリへ渡すデータは決められたフォーマットでdataの部分等を作成する必要があります。
フォーマットとか面倒臭いよと思われるかもしれませんが、開発者登録をして頂いた方にはサンプルコード等も提供していますので、そちらを利用して貰えればと思います。

ステップ2

データは準備出来ましたので後はTOLOTアプリを呼び出してみましょう。
iOSアプリは各々URLSchemeと呼ばれる名前みたいなものを設定する事で呼び出しに応じる事ができます。

実際のしくみとしては非常に単純なので試してみます。(※iOS7の場合)
iOSのSafariを起動してアドレスバーにsms://と入力して開くと


この様にSMSが起動しました。


先ほどの流れだとSafariがSMSの名前(sms)を開く命令を出し、SMSがそれに応じた形になります。
簡単に言うけどコードで書いたら色々ややこしいんでしょ?と思うかもしれませんが
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://"]];
だけでOKです。
これは「sms」というURLSchemeをもっているSMSをopenURLを使って呼び出しています。

SMSは標準アプリなので必ずインストールされていますがそうでない場合もあると思います。
インストールされていない場合は呼び出しても無反応なので、インストールされているかどうかを確認して呼び出すには
    NSString *url = @"sms://";
    NSURL *appUrl = [NSURL URLWithString:url];
    if ([[UIApplication sharedApplication] canOpenURL:appUrl]) {
        [[UIApplication sharedApplication] openURL:appUrl];
    }
こんな感じにします。これだけで自分のアプリから他のアプリを呼び出す事が出来るようになりました。
今回の場合はSMSが起動しましたが、TOLOTアプリの呼び出しも同様のやりかたで呼び出せます。

これで全てのステップは終了です。
説明も交えながらになりましたが少ないコード量で連携のしくみ自体を作れる事がお伝え出来たかと思います。
マネタイズAPIの制度の詳細や連携のサンプルコード等はデベロッパーサイトにありますので、興味を持った方は是非ご覧下さい。
<デベロッパーサイトはこちら>

大変ありがたい事にマネタイズAPIを使ってTOLOTアプリとの連携をして頂いているアプリもどんどん増えています
iOSの他にもAndroidやAirでもこのマネタイズAPIは利用出来ますので自分に合った環境で楽しんでみてください!
Update:2014/01/28

TOLOTをご存知ですか?

スマホやパソコンでオリジナルのフォトブックを作れるアプリです。。