我的问题类似于this recent question for iOS。
Firebase动态链接在应用程序已存在的设备上按预期工作,但是当我从Play商店安装应用程序(目前处于测试版渠道)时,我无法获得推介。
具体而言,当从PlayStore测试版渠道安装应用时,AppInviteReferral.hasReferral(getIntent())
会返回false
。
根据链接的答案,动态链接大部分时间都在工作,但可能存在未记录的边缘情况会导致其失败。我将突出显示我的案例的具体内容,因此您可以帮助我找到我的设置中缺少的内容。
10.2.6
将我的Firebase库更新为10.2.4
。更改日志中的Firebase邀请库没有任何更改。 如果重要,这是我包含库的顺序
compile 'com.google.firebase:firebase-core:10.2.6'
compile 'com.google.firebase:firebase-messaging:10.2.6'
compile 'com.google.firebase:firebase-auth:10.2.6'
compile 'com.google.firebase:firebase-database:10.2.6'
compile 'com.google.firebase:firebase-invites:10.2.6'
我的SplashScreenActivity.java
既是启动器活动,也是接受和处理深层链接的活动。这是AndroidManifest中的活动声明
<activity
android:name=".ui.setup.SplashScreenActivity"
android:label="@string/app_name"
android:theme="@style/SplashTheme">
<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:scheme="https"
android:host="deeplinks.myCompanyDomain.com"
android:pathPrefix="/mobile"/>
</intent-filter>
</activity>
SplashScreenActivity.java
不setContentView(int id)
。它只是使用一个主题来显示启动画面,而应用程序的其余资源“加载”。我不知道这是否重要,但我把它放在那里。
在应用程序启动之前,我会检查以确保该应用程序具有所需的权限。 continueIntoApp()
方法(我想不出一个更好的名称)会在用户发现具有所需权限时,或者在用户授予应用程序所需的全部四个权限后将其带入应用程序。
continueIntoApp()
是实现Firebase Dynamic Links Docs上找到的所有代码的地方。我首先构建并连接GoogleApiClient
。
GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
LogUtils.e("Deeplink connection failed");
LogUtils.e(connectionResult.getErrorMessage());
LogUtils.e(String.valueOf(connectionResult.getErrorCode()));
}
})
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
LogUtils.d("Connected!");
}
@Override
public void onConnectionSuspended(int i) {
LogUtils.e("Connection suspended!");
}
})
.addApi(AppInvite.API)
.build();
googleApiClient.connect();
另外,动态链接文档假设开发人员已经知道如何设置GoogleApiClient
。我没有。经过几个令人沮丧的日子之后,我意外地发现#connect()
方法实际上让GoogleApiClient
做了它应该做的事情。
在此之后,我会检查AppInviteReferral
是否有推介。
//boolean autoLaunchDeepLink = true;
if(AppInviteReferral.hasReferral(getIntent())){
LogUtils.d("Referral found!");
AppInvite.AppInviteApi.getInvitation(googleApiClient, SplashScreenActivity.this, true)
.setResultCallback(new ResultCallback<AppInviteInvitationResult>() {
@Override
public void onResult(@NonNull AppInviteInvitationResult appInviteInvitationResult) {
LogUtils.d("Processing appInviteInvitationResult...");
if(appInviteInvitationResult.getStatus().isSuccess()){
Intent intent = appInviteInvitationResult.getInvitationIntent();
String deepLink = AppInviteReferral.getDeepLink(intent);
LogUtils.d("Deeplink is " + deepLink);
AppConfig appConfig = new AppConfig(SplashScreenActivity.this);
appConfig.put(ModelKeys.TEMP_JOIN_BRANCH_DEEPLINK, deepLink);
startActivity(new Intent(SplashScreenActivity.this, MainActivity.class));
//parseDeeplink(deepLink);
}else {
LogUtils.d("No deeplink found!");
startActivity(new Intent(SplashScreenActivity.this, MainActivity.class));
}
}
});
}else {
LogUtils.d("No referral found!");
startActivity(new Intent(SplashScreenActivity.this, MainActivity.class));
}
您会注意到我已注释掉autoLaunchDeepLink
,默认情况下会将true
传递给AppInvite.AppInviteApi.getInvitation()
。我仍然不确定何时应将此值设置为true
或false
。在动态链接(autoLaunchDeepLink
为false
)全新安装后,我也不知道如何“启动动态链接”。
就动态链接实现而言。我的问题如上所述:当我已经安装了应用程序时,AppInviteReferral.hasReferral(getIntent())
返回true
,代码正常运行。当用户关注PlayStore的动态链接并下载测试版时,AppInviteReferral.hasReferral(getIntent())
会返回false
,并且不会跟踪深层链接。
为什么会这样?我错过了什么?
答案 0 :(得分:2)
我认为你没有遗漏任何东西 - 看起来Play商店并没有为Beta频道安装发送INSTALL_REFERRER广播,而且它的推荐者也被用作机制在安装后传递deeplink。
如果您正在使用产品应用,它应该可以正常工作,但有点好奇,测试版安装不支持。
答案 1 :(得分:0)
有同样的问题。我们的问题是我们在AndroidManifest.xml 中有两个几乎相似的意图过滤器,这导致Google Play失去了我们想要的意图。它没有显示“继续”按钮,而是将我们重定向到播放中的卸载/打开页面。
建议与之合作 https://firebase.google.com/docs/dynamic-links/android/receive