【问题标题】:Firebase dynamic link to open specific activity with data使用数据打开特定活动的 Firebase 动态链接
【发布时间】:2021-08-14 14:15:34
【问题描述】:

我在应用中实现 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 控制台中的外观是(域(x.y.link 只是一个示例):

另外,如果用户在 BookDetailActivity 代码中没有 FirebaseDynamicLinks 部分的我的应用程序的早期版本,他们将如何设法获得这些邀请?它会打开他们下载应用程序还是什么都不做?

非常感谢

【问题讨论】:

    标签: java android firebase firebase-dynamic-links


    【解决方案1】:

    我猜,每当点击动态链接时,它都会打开您的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 );
        }
    }
    

    希望上面的代码sn-p对你有帮助! :)

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 2016-10-03
      • 1970-01-01
      • 2020-01-08
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多