当我在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页面地址& al =我的自定义方案共享& apn =我的Android应用程序的包名称
解决方法
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应用程序中的链接可正常进入Google Play,并在安装应用程序后正确处理深层链接.
>如果安装了应用程序,点击Facebook应用程序中的链接也会转到Google Play,点击打开按钮后,深层链接不会转移到应用程序,因为如果安装有Google Play,则不会将引荐来源信息传递给应用程序没有被执行过.
如果我们使用Facebook Messenger app分享此链接:
>该链接共享为https://l.facebook.com/l.php?u=https%3A%2F%2Fwinged-guild-133523.appspot.com%2Fshare%3Fquery%3Dquery&h=fAQEAiTGn&s=1
>如果安装了应用程序,单击Facebook Messenger应用程序中的链接将转到深层链接目标(我们的网站)而不是Google Play.
>如果已安装该应用程序,则单击Facebook Messenger应用程序中的链接可正确打开该应用程序.
所以我在这里看到三个问题:
> Facebook应用程序未正确检测到应用程序已安装.
> Facebook Messenger应用程序共享一个长动态链接而不是短链接.
> Facebook Messenger应用程序可以检测到应用程序已安装,但如果未安装该应用程序,则会转到链接而不是Google Play.
有谁知道如何解决这些问题?
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>