有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Firebase动态链接以打开包含数据的特定活动

我在应用程序中实现Firebase动态链接时遇到一些问题

我的应用程序包含一个图书库,每本书下都有一个共享按钮。当用户单击该按钮时,它会创建一条消息,他可以向其他用户发送这样的消息:“嘿,你可能喜欢这本书,请在这里查看!”

一旦用户点击图像,我希望它在那个活动(称为BookDetailActivity)中打开应用程序。如果用户有该应用程序,我希望它打开BookDetailActivity,其中包含与该书相关的特定意图数据(比如bookid=abcde),如果用户没有该应用程序,则发送他下载该应用程序

为此,我在清单中BookDetailActivity下添加了以下代码:

<activity 安卓:name=".BookDetailActivity">
    <intent-filter 安卓:label="SB">
        <action 安卓:name="安卓.intent.action.VIEW" />

        <category 安卓:name="安卓.intent.category.DEFAULT" />
        <category 安卓:name="安卓.intent.category.BROWSABLE" />

        <data
            安卓:host="https://x.y.link"
            安卓:pathPrefix="/SB"
            安卓: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 );
} );

我得到的是,我成功地将消息发送给另一个用户,用户单击该链接,应用程序将在主活动而不是BookDetail活动中打开

有没有理由不让用户参加正确的活动

它在我的Firebase控制台中的外观是(域(x.y.link只是一个示例):

enter image description here

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

多谢各位


共 (1) 个答案

  1. # 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 );
        }
    }
    

    希望上面的代码片段对您有所帮助!:)