注意
この情報は、2017/12/26現在のものです。
最新情報はこちらでご確認下さい。
https://firebase.google.com/support/releases
現象
- Dynamic Linkで起動された画面がRecentAppsに残らない
- 起動した画面で直接履歴ボタンを押した場合、OS5は自アプリがいない状態。OS6以降は存在はする
- 起動した画面でホームボタン押下後やスリープ復帰後、履歴ボタンを押すと、自アプリがいない(OS5~全て共通)
- アプリをランチャーアイコンから再起動しても残らないまま
- アプリを設定アプリなどで「強制停止」させた後、再び残るようになる
調べたこと
「アプリ履歴に残さないフラグ」でも付いてんじゃね?
と思って、下記ログを仕込んでみた。
MainActivity.java
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent())
.addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
// Get deep link from result (may be null if no link is found)
Uri deepLink = null;
if (pendingDynamicLinkData != null) {
deepLink = pendingDynamicLinkData.getLink();
}
if (deepLink == null) return;
// Intentフラグを確認するログ
Intent intent = getIntent();
if (0 != (intent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)) {
Log.d("DynamicSample", "intent has Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS");
}
Log.d("DynamicSample", "getDynamicLink:onSuccess");
// Handle the deep link. For example, open the linked
// content, or apply promotional credit to the user's
// account.
// ...
Log.d("DynamicSample", "getDynamicLink:url= " + deepLink.toString());
// ...
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("DynamicSample", "getDynamicLink:onFailure");
e.printStackTrace();
}
});
起動はadbコマンドから。
$ adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d <DYNAMIC_URL>
で、出てきたLogcat.
D/DynamicSample: intent has Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
ビンゴ!
バグなの?仕様なの?
というのは私には分からないので、Firebaseに問い合わせ。
結論。
仕様です。
ということだそうです。
※もしかしたら、adbコマンドで起動しているせいだよ、って言われるかと期待していたのですが、仕様、との回答だったので、adbコマンドで無くても、このフラグを付ける処理がFirebaseのSDK自体に入っているのではと思います。
対処
アプリを強制停止しないかぎり、ずっと残らないままになるのは困るし、ってことで、以下の対応をしました。
Dynamic Linkを受け取って対象画面を起動するとき、別プロセスで起動する
具体的には、Intent.FLAG_ACTIVITY_NEW_DOCUMENT
を付けてやった感じです。Dynamic Linkで起動された画面は、
finishAndRemoveTask()
で終了する
ただ、微妙にOS5と、OS7で挙動が違ったり、一瞬、「最近使ったアプリ」に2つ自アプリが存在したり、いろいろとまだしっくりこない点はありますが、「ずっと残らない」よりはマシだろう、と判断して入れています。