[英]Firebase dynamic link to open specific activity with data
我在我的應用程序中實現 Firebase 動態鏈接時遇到了一些問題。
我的應用程序包含一個書庫,每本書下面都有一個共享按鈕。 當用戶單擊該按鈕時,它會創建一條消息,他可以向其他用戶發送這樣的消息:“嘿,你可能會喜歡這本書,請在此處查看!”
一旦用戶單擊圖像,我希望它在該活動(稱為 BookDetailActivity)中打開應用程序。 如果用戶有該應用程序,我希望它打開 BookDetailActivity,其中包含與該書相關的特定意圖數據(比如 bookid = abcde),如果用戶沒有該應用程序,則讓他下載該應用程序。
為此,我在 BookDetailActivity 下的清單中添加了以下代碼:
<activity android:name=".BookDetailActivity">
<intent-filter android:label="SB">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="https://x.y.link"
android:pathPrefix="/SB"
android:scheme="https" />
</intent-filter>
</activity>
然后,在 BookDetailActivity 中,我添加了以下內容(使用它只是為了檢查應用程序是否在該活動中打開並查看我獲得的鏈接)。
FirebaseDynamicLinks.getInstance()
.getDynamicLink( getIntent() )
.addOnSuccessListener( this, new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
Uri deepLink = null;
if (pendingDynamicLinkData != null) {
deepLink = pendingDynamicLinkData.getLink();
Log.d( "TEST1", deepLink + "" );
}
}
} )
.addOnFailureListener( this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d( "TEST2", "HERE" );
}
} );
現在,發送該邀請消息的按鈕是:
ib_Share.setOnClickListener( v -> {
Intent shareIntent = new Intent();
shareIntent.setAction( Intent.ACTION_SEND );
String suggest = "Hey you might like this book, check it here! - https://x.y.link/SB?bookid=abcde";
shareIntent.putExtra( Intent.EXTRA_TEXT, Html.fromHtml( suggest ) );
shareIntent.setType( "text/html" );
startActivity( shareIntent );
} );
我得到的是我成功地將消息發送給另一個用戶,用戶單擊該鏈接並且應用程序打開但在 MAIN ACTIVITY 而不是 BookDetail 活動。
是否有理由不將用戶帶到正確的活動?
它在我的 Firebase 控制台中的樣子是(域(xylink 只是一個例子):
此外,如果用戶的 BookDetailActivity 代碼中沒有FirebaseDynamicLinks
部分,那么我的應用程序的早期版本將如何設法獲得這些邀請? 它會打開它們來下載應用程序還是什么都不做?
非常感謝
我想,只要單擊動態鏈接,它就會打開您的MainActivity
。 我試圖得出如下解決方案。
在您的MainActivity
中,使用onNewIntent()
方法檢查是否由於動態鏈接而創建了任何新意圖
@Override
protected void onNewIntent ( Intent newIntent ) {
super.onNewIntent ( newIntent );
setIntent ( newIntent );
checkDynamicLinkIntent ();
}
private void checkDynamicLinkIntent () {
if (!Objects.equals ( null, getIntent ().getData () )) {
Uri dynamicLink = Uri.parse ( getIntent ().getData ().toString () );
parameterValue = dynamicLink.getQueryParameter ( parameterName );
//get any data from your URI if needed
Intent intent = new Intent ( MainActivity.this, BookDetailActivity.class );
intent.putExtra ( "bookDetail", parameterValue );
startActivity ( intent );
}
}
希望上面的代碼片段對您有所幫助::)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.