Firebase 动态链接在安装后首次启动时不会调用动态链接

Mik*_*ike 6 java android firebase firebase-dynamic-links

我已经阅读了很多关于 stackoverflow 的问题,但他们都没有回答这个问题。

我正在尝试设置动态链接,以便如果用户已经安装了应用程序,则链接会将用户深层链接到应用程序,如果没有,则链接到 Play 商店。我希望该链接在 Play 商店安装过程中继续存在,并通过链接发送到启动器活动。当应用程序已安装时,动态链接有效。但是,当应用程序未安装时,它会将用户发送到 Play 商店,但动态链接不会在安装过程中继续存在。我已经读过,当用户通过动态链接发送到 Play 商店时,“打开”按钮应该更改为“继续”,但是当我这样做时,它仍然显示“打开”。这是我在 AndroidManifest.xml 中的活动

    <activity
        android:name="com.xxx.xxx.xxx.xxx"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.SplashScreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

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

            <data
                android:host="yyy.page.link"
                android:scheme="http" />
            <data
                android:host="yyy.page.link"
                android:scheme="https" />
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

活动如下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ia_login);

        checkIfReferral();
    }

    private void checkIfReferral(){
    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;
                    Log.w(TAG, "FBDL we have a dynamic link");
                    if (pendingDynamicLinkData != null) {
                        deepLink = pendingDynamicLinkData.getLink();
                    }else{
                        Log.w(TAG, "FBDL pending dynamic Link Data is null , returning " );
                        return;
                    }
                    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                    Boolean ret1 = (user==null);
                    Boolean ret2 = (deepLink !=null);
                    Boolean ret3 = (deepLink.getBooleanQueryParameter("invitedby", false));
                    referrerUid = deepLink.getQueryParameter("invitedby");                   
                    if (deepLink != null && deepLink.getBooleanQueryParameter("invitedby", false)) {
                        referrerUid = deepLink.getQueryParameter("invitedby");
                        createAnonymousAccountWithReferrerInfo(referrerUid);
                    }
                }
            }).addOnFailureListener(this, new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.w(TAG, "FBDL we couldnt receive dynamic link");
        }
    });

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    if(user !=null) {
        Log.w(TAG, "FBDL if use != null");
        userRecord = FirebaseDatabase.getInstance().getReference()
                .child("users")
                .child(user.getUid());
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经添加了动态链接。它与清单文件中声明的相同。我添加了 SHA 256 从我签署应用程序的发布密钥生成。该应用程序已在 Google Play 商店生产版本中发布。

请让我知道错误是什么。

当动态链接将我带到那里时,为什么我在 Google Play 商店中看不到“继续”?

ism*_*oui 5

您必须向将处理动态链接的活动添加一个自动验证的意图过滤器,将主机设置为您项目的动态链接域(如 Firebase 控制台中所示)。在里面AndroidManifest.xml

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:host="yyy.page.link" android:scheme="http"/>
    <data android:host="yyy.page.link" android:scheme="https"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

请注意,android:host必须设置为您的动态链接域,而不是深层链接的域。

更多信息请点击这里


Oma*_*att 1

我发现您在 Firebase 动态链接的实现中启用了应用链接。应用程序链接需要在清单意图过滤器中添加动态链接域,但动态链接仍然需要为应用程序将收到的深层链接设置意图过滤器。通过在意图过滤器中添加深层链接,不仅可以使 FDL 与应用程序一起使用,而且还可以确保应用程序在使用常规链接时仍然可以工作。

如果此后您仍然遇到问题,可以在此处提交票证https://firebase.google.com/support。您可能需要共享动态链接和您正在使用的 Firebase SDK 版本。