我已经建立了一个动态链接,供用户在我的应用中分享一些内容。
当我在Android设备上使用href
标记点击HTML网页中的链接时链接正常工作。
这意味着,如果未安装该应用,请转到Play商店,否则打开该应用即可收到深层链接地址。
但是当链接在Facebook信使或电子邮件等其他地方完全相同时,我点击该链接,然后它就无法使用。
即使我的应用已安装,它也会始终重定向到Play商店。
问题是什么?
我的代码在这里。
.java用于接收深层链接
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(AppInvite.API)
.build();
boolean autoLaunchDeepLink = false;
AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
.setResultCallback(
new ResultCallback<AppInviteInvitationResult>() {
@Override
public void onResult(@NonNull AppInviteInvitationResult result) {
if (result.getStatus().isSuccess()) {
// Extract deep link from Intent
Intent intent = result.getInvitationIntent();
String deepLink = AppInviteReferral.getDeepLink(intent);
Log.e("sf", "### deep link : " + deepLink );
} else {
Log.d("asdf", "getInvitation: no deep link found.");
}
}
});
AndroidManifest.xml中活动的意图部分
<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="mycode.app.goo.gl/"
android:scheme="https"
android:pathPattern=".*" />
</intent-filter>
动态链接
https://mycode.app.goo.gl/?link= web page address
&amp; al = my custom scheme for sharing
&amp; apn = my android app's package name
答案 0 :(得分:7)
我们已根据此文档https://firebase.google.com/docs/dynamic-links/实施了Firebase动态链接,除Facebook和Facebook Messenger应用外,它们在所有情况下均正常运行。
首先,我们为我们的应用生成动态链接:
Builder builder = new Builder()
.scheme("https")
.authority("winged-guild-133523.appspot.com")
.appendPath("share")
.appendQueryParameter("query", query);
然后我们生成长动态链接:
Builder builder = new Builder()
.scheme("https")
.authority("zkkf4.app.goo.gl")
.appendPath("")
.appendQueryParameter("link", deepLink)
.appendQueryParameter("apn", "com.mydomain.myapp");
然后我们使用https://firebasedynamiclinks.googleapis.com/v1/shortLinks上的短链接交换长动态链接,并使用意图分享:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, text);
startActivity(Intent.createChooser(intent, null));
如果我们使用Facebook应用分享此链接:
如果我们使用Facebook Messenger应用分享此链接:
所以我在这里看到三个问题:
有谁知道如何解决这些问题?
PS:虽然这是无关紧要的,因为应用中的深层链接处理工作正常,这是我们的明显意图过滤器:
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http"/>
<data android:scheme="https"/>
<data android:host="winged-guild-133523.appspot.com"/>
<data android:host="www.winged-guild-133523.appspot.com"/>
<data android:pathPattern="/share.*"/>
</intent-filter>
答案 1 :(得分:0)
//Remove this lines
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>
and android:pathPattern=".*" /> //not required remove it also
and use android:scheme="http"
答案 2 :(得分:0)
同一问题。 iOS和Facebook应用内浏览器。
根据this,从19/19/19开始,这仍然是一个未解决的问题。
但是,删除“ efr = 1”参数(换句话说,您必须显示预览页)才能使其正常工作。这就是解决问题的开发人员所说的,但是当然这不是理想的解决方案。
正如该链接中的一位用户所解释的,您可以检查该用户是否正在使用具有以下Javascript行的Facebook应用程序内浏览器:
...-编辑-删除了这一行代码---
我删除了上述内容,因为当不在Facebook应用中时,它实际上崩溃了。我建议使用以下代码,这些代码已在Chrome,Safari,Firefox Android iOS上进行了测试。
function isFacebookApp() {
var ua = navigator.userAgent || navigator.vendor || window.opera;
return (ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1);
}
这是评分最高的答案here。
.....
对我个人而言,这有些奏效,因为用户首先访问了我提供动态链接的网站。因此,我的网站处理逻辑,如果用户使用Facebook浏览器和iOS,则仅传递“ efr = 1”。同样,这也不是理想的,因此希望他们能够解决这个长期存在的问题。
可能有点像该链接上开发的那样,“ afaik目前无法通过通用链接从Facebook,Messenger或微信应用程序中打开应用程序,而无需使用预览页...”
Here是另一个Github问题供您参考。