Firebase动态链接未在特定情况下启动我的应用

时间:2016-12-19 07:35:09

标签: android firebase firebase-dynamic-links

我已经建立了一个动态链接,供用户在我的应用中分享一些内容。

当我在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

3 个答案:

答案 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应用中的链接即可正常进入Google Play,安装该应用后,可以正确处理深层链接。
  • 如果安装了应用程序,点击Facebook应用程序中的链接也会转到Google Play,点击打开按钮后,深层链接不会转移到应用程序,因为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>

答案 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问题供您参考。