Web コンテンツ内にネイティブ iOS アプリを埋め込めるサービス『app.io』の使い方

app.io は、『ブラウザ内でネイティブ iOS アプリを動かせるようにする』サービスです。

![01_top_r1_c1.png](https://qiita-image-store.s3.amazonaws.com/0/3180/25524189-4e1a-8d5a-00a1-7f68ba2172af.png)

イメージとしては **iOSシミュレータをそのままWebコンテンツに埋め込める** と考えるとわかりやすいかもしれません。タップ等のインタラクションが効いて、もちろん通信もします。アプリのランディングページや、ブログの紹介記事に埋め込んだりすると良さそうです。


で、「導入にはさぞ複雑な手順が。。」と思いきや、実際にアプリを動作させるまでの手順はめちゃくちゃ簡単です。 **ファイルを1つアップするだけ。** 以下で具体的に説明します。


##使い方

####1. アプリをビルド

いつもの普通のビルドです。Xcode でターゲットとして **「シミュレータ」を選択** し、ビルドします。

####2. .appファイルをアップロード

"Upload Your App" から、

![02_howto1_.png](https://qiita-image-store.s3.amazonaws.com/0/3180/3996a454-3b34-2f63-e024-c5efc7770247.png)

下記パスにある .app ファイルを **zip で固めて** アップロードします。

````
~/Library/Developer/Xcode/DerivedData/{アプリ名}/Build/Products/Debug-iphonesimulator/
````

以上！


##Webコンテンツに埋め込む
左側のメニューにある "Embed" を選択すると、iFrame を使った埋め込みコードが生成されます。


![03_embed.png](https://qiita-image-store.s3.amazonaws.com/0/3180/2011e5ce-e95f-f56f-8092-e1204a8e2194.png)


アプリの向きも選択できます。


ちなみにこんなコード。

````
<iframe src="https://app.io/XXXX?orientation=portrait&device=iphone5" height="607px" width="291px" frameborder="0" allowtransparency="true" scrolling="no"></iframe>
````


##しくみ（憶測）
実際に試してみて、

- アップするファイル（パッケージ）は .app だけ
- ブラウザに表示される初期画面はアプリ固有のものではなく、タップするとロードが始まり、アプリが起動する
- 画質が低い

といった挙動を鑑みるに、 **.app を app.io のサーバ側にあるiOSシミュレータ上で動作させ、画面の情報を一定フレームレートでブラウザ側に送る** というしくみになっていると思われます。


##弱点

使ってみて気付いた中で最大の弱点は、

**『設定』アプリにアクセスできない**

という点です。ホームボタンを押すとアプリが終了するだけで、ホーム画面等にはアクセスできません。


そんなわけで、Social.framework, Accounts.framework を使用して Facebook や Twitter と連携するアプリ等、『設定』での設定が前提となるアプリには不向きです。


##無料でできること
無料ユーザーは、登録アプリは1つだけ、5000Play／月、シェアと埋め込みが可能です。

![04_price_.png](https://qiita-image-store.s3.amazonaws.com/0/3180/aa7e8e95-0da7-f4c4-3325-6cf17cf16a2c.png)

ちゃんと売りたいアプリのデモとして考えると、1ヶ月に5000回しかplayしてもらえないのは少ないような、でもPVじゃなくて動画の再生回数とかの水準で考えると（※）まずはこれぐらいでも良さそうな、微妙なラインですが、とにかく試すだけなら無料で十分かと思います。

（※）埋め込んだページを表示しただけではアプリの起動は開始されないので、PV = play回数ではない

##Xcode プラグイン
app.io は Xcode のプラグインも提供しています。


![05_plugin_.png](https://qiita-image-store.s3.amazonaws.com/0/3180/00810713-5170-b6e9-3b22-e8045d62a08c.png)


.app をアップするだけ、という使い方があまりにも簡単だったのでプラグインの方は試してないのですが、 上記画像から、Xcode に app.io にアップロードするメニューが加わる、というもののようです。


 **サービスを使いやすくするための補助ツールとしてオフィシャルに Xcode プラグインを提供する** というのはあまり他サービスで見たことがなかったのでおもしろいと思いました。


##アプリにパラメータを渡す

生成したアプリのURLにパラメータを渡すことで、 **ローカライズ** 、 **位置情報の指定**  、  **NSUserDefaults に値を渡す** 、といったことも可能です。

http://docs.app.io/parameters/

###ローカライズ

> The <code>language</code> parameter lets you specify a ISO-639-1 language code for your app, if it has been localized. Defaults to <code>en</code>. For more information on language codes and what they correspond to, please see this <a href="http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes">Wikipedia entry</a>.

> <p><strong>Options</strong>: <code>en</code>, <code>fr</code>, <code>de</code>, <code>ja</code>, <code>nl</code>, <code>it</code>, <code>es</code>, <code>pt</code>, <code>pt-PT</code>, <code>da</code>, <code>fi</code>, <code>nb</code>, <code>sv</code>, <code>ko</code>, <code>zh-Hans</code>, <code>zh-Hant</code>, <code>ru</code>, <code>pl</code>, <code>tr</code>, <code>uk</code>, <code>ar</code>, <code>hr</code>, <code>cs</code>, <code>el</code>, <code>he</code>, <code>ro</code>, <code>sk</code>, <code>th</code>, <code>id</code>, <code>ms</code>, <code>en-GB,</code> <code>ca</code>, <code>hu</code>, <code>vi</code></p>

> <p><strong>Example Usage</strong>: <code>https://app.io/example?language=ja</code></p>
</quote>

###位置情報の指定

> <p>The <code>location</code> parameter lets you specify the latitude and longitude provided to the app for geolocation purposes. Specify latitude and longitude in decimal format as a comma-separated string. Defaults to <code>37.7859,-122.406509</code>.</p>

> <p><strong>Example Usage</strong>: <code>https://app.io/example?location=37.82,144.9832</code></p>


###NSUserDefaults に値を渡す

> <p>The <code>params</code> parameter lets you specify a JSON dictionary of key/value information to be provided to the app in the form of user defaults. These values will be loaded into <code>NSUserDefaults</code> on app launch and will be available for use by calling <code>[[NSUserDefaults standardUserDefaults] objectForKey:key]</code> in your app. This is particularly useful for tracking App.io sessions with analytics libraries, or automatically logging in users and loading content. For more information on <code>NSUserDefaults</code>, see the <a href="http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSUserDefaults_Class/Reference/Reference.html">documentation</a>.</p>

> <p><strong>Important</strong>: This parameter must be specified as a URI-encoded JSON string. This is commonly done using the JavaScript <code>encodeURIComponent</code> function. This <a href="http://jsfiddle.net/C9ASj/2/">JSFiddle</a> can help you format your JSON correctly.</p>

> <p><strong>Options</strong>: A URI-encoded JSON dictionary.</p>

> <p><strong>Example Usage</strong>: <code>https://app.io/example?params=%7B&quot;foo&quot;%3A&quot;bar&quot;%7D</code></p>