AIRアプリでカスタムURIスキームを設定する方法

カスタムURIスキームとは?

URIスキームとは、URI(URL)の先頭の"http"や"ftp"、"mailto"などのこと。
"http"ならWebへのアクセス、"ftp"なFTPでのファイル送受信、"mailto"ならメール送信を行うことを示しています。
iOSAndroidではURIスキームをアプリごと独自に定義することができ、これを使用することで

  • ブラウザからのアプリを起動
  • アプリからの連携

が行うことができます。

たとえば、iPhoneTwitterの公式アプリをインストールされている状態で

twitter://mentions

とブラウザのアドレスバーに入力すると、Twitterのアプリが起動し「みんなの反応」が開きます。

AIRでの設定方法

AIRで作っているアプリに、カスタムURIスキームを設定する場合、アプリケーション記述ファイルに記述することで設定ができます。
AndroidiOSそれぞれ別々に定義を記述する必要があります。

Androidの場合

<android>
  <manifestAdditions>
    <![CDATA[
      <manifest>
        <application>
          <activity>
            <intent-filter>
              <action android:name="android.intent.action.MAIN"/>
              <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
              <action android:name="android.intent.action.VIEW"/>
              <category android:name="android.intent.category.BROWSABLE"/>
              <category android:name="android.intent.category.DEFAULT"/>
              <data android:scheme="test-app"/>
            </intent-filter>
          </activity>
        </application>
      </manifest>
    ]]>
  </manifestAdditions>
</android>


iOSの場合

<iPhone>
      <InfoAdditions><![CDATA[
            <key>CFBundleURLTypes</key> 
            <array> 
                  <dict> 
                        <key>CFBundleURLSchemes</key> 
                        <array> 
                              <string>test-app</string> 
                        </array> 
                        <key>CFBundleURLName</key> 
                        <string>jp.co.piisu.test-app</string> 
                  </dict> 
            </array>
      ]]></InfoAdditions>
</iPhone>

以上で、

<a href="test-app://arg1=funya&arg2=kurage">アプリを起動</a>

のようなリンクをふんだ場合に、アプリが起動されるようになります。

パラメータ読み込み

NativeApplicationオブジェクトのinvokeイベントを通じて読み込むことができます。

var native_app:NativeApplication = NativeApplication.nativeApplication;
native_app.addEventListener(InvokeEvent.INVOKE, function(evt:InvokeEvent):void {
	//通常起動の場合もinvokeイベントが発生し、この場合argumentsのlengthは0なのでチェックを行う
	if(evt.arguments.length > 0) {
		trace(evt.arguments[0].toString());    // "test-app://arg1=funya&arg2=kurage" と出力
	}
});

注意

  • 他のアプリが同じ名前のスキームを登録していると、既存アプリが優先されてしまう
  • StageWebViewではカスタムURIスキームを使用してURLを開くことができない
  • AndroidのブラウザにカスタムURIスキームを直入力しても、アプリを起動できない