カスタム URL スキームを探しています。アプリがインストールされている場合、これは機能しますが。
iOS の場合、(project)/build/iphone フォルダー内の Info.plist ファイルを確認し、CFBundleURLSchemes キーを探します。配列要素の下にリストされる値は、カスタム URL に割り当てられた名前です。必要に応じて変更できますが、知っているだけで十分な場合があります。デフォルトは基本的に小文字のプロジェクト名だと思います。
この質問が必要な人のために、次の例では、アプリケーションに渡すことができるパラメーターを使用しています。
その名前を取得したら、それを URL で使用し、:// の後に任意の名前を追加します。
mybundleurlscheme://foobar?attribute=value&another_attribute=value2
アプリで Ti.App.getArguments() を使用して、プログラムに渡されたものを確認します。ここでの注意点は、起動アクティビティと一時停止/再開アクティビティの違いを検出することです。
最後にこれを試してみましたが、一時停止/再開は Ti.App.getArguments() に同じ値を残したままになり、新しい起動と再開アクティビティを正しく検出することが難しくなります。
ここにいくつかのポインタがあります:
後で比較するために Ti.App.getArgumets() のコピーを保存します 「再開」イベント (「再開」イベントではありません) のアプリ リスナーを追加し、Ti.App.getArguments() を確認します。この値は、「再開」イベント中 (アプリが再開の準備中) にはまだ利用できませんが、「再開」イベント中 (アプリが再開されたとき) にあります。
「再開」イベントが最初に保存した値と同じ場合、ユーザーが一時停止/再開したか、同じカスタム URL が 2 回目に起動されました。私のシナリオでは、同じYMMVの両方を扱うことで得ることができました. これは、私がこれを実験したプロジェクトのコード スニペットです。これはいくつかの SDK バージョンからのものであるため、現在はより良い方法がある可能性があります。
// Save initial launch command line arguments
Ti.App.launchURL = '';
Ti.App.pauseURL = '';
var cmd = Ti.App.getArguments();
if ( (getTypeOf(cmd) == 'object') && cmd.hasOwnProperty('url') ) {
Ti.App.launchURL = cmd.url;
Ti.API.info( 'Launched with url = ' + Ti.App.launchURL );
}
// Save launch URL at the time last paused
Ti.App.addEventListener( 'pause', function(e) {
Ti.App.pauseURL = Ti.App.launchURL;
});
// After app is fully resumed, recheck if launch arguments
// have changed and ignore duplicate schemes.
Ti.App.addEventListener( 'resumed', function(e) {
Ti.App.launchURL = '';
cmd = Ti.App.getArguments();
if ( (getTypeOf(cmd) == 'object') && cmd.hasOwnProperty('url') ) {
if ( cmd.url != Ti.App.pauseURL ) {
Ti.App.launchURL = cmd.url;
Ti.API.info( 'Resumed with url = ' + Ti.App.launchURL );
}
}
});
Android の場合: SDK 3.0 では、カスタム AndroidManifest.xml を作成する必要はありませんが、単に tiapp.xml を開いてノードを見つけ、これがそこに追加されていることを確認してください。
<activity
android:name=".MobileappActivity"
android:label="MobileApp"
android:theme="@style/Theme.Titanium"
android:configChanges="keyboardHidden|orientation"
>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.LAUNCHER" />
<data android:scheme="Mobileapp" />
</intent-filter>
</activity>