アプリに Facebook のディープ リンク機能を実装しようとしていますが、次のシナリオに遭遇しました。
次のように宣言された MainActivity というアクティビティがあります。
<activity
android:name="com.mypackage.android.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
このアクティビティ + パッケージ名は、Facebook 開発者 Web サイトのアプリの設定でも宣言されています。
Facebook のアプリでリンクがクリックされると、アクティビティの onCreate メソッドを介してこのイベントを処理することになっています。次のコードは、イベントを処理します。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Uri target = getIntent().getData();
if (target != null){
// got here via Facebook deep link
// once I'm done parsing the URI and deciding
// which part of my app I should point the client to
// I fire an intent for a new activity and
// call finish() the current activity (MainActivity)
}else{
// activity was created in a normal fashion
}
}
次のシナリオを除いて、すべてが計画どおりに進みます。
- ユーザーがアプリを起動しました
- MainActivity が作成されました
- セカンダリ アクティビティが作成されました
- MainActivity 終了
- アプリはデバイスのホーム ボタンを介してバックグラウンドに移行します
- Facebookのアプリでディープリンクがクリックされる
この場合、アプリは再びフォアグラウンドに移動しますが、MainActivity の onCreate / onNewIntent は呼び出されず、代わりに SecondaryActivity の onResume() が呼び出されて最後の状態に復元されます。
注: Android 4.2.1 を搭載した Samsung Nexus でこの問題をテストしたところ、この結果になりましたが、Android 2.3.5 を搭載した Galaxy S1 でテストしたところ、当初の期待どおりに動作しました。
どんな助けでも大歓迎です、ありがとう。