即使安装了应用,Firebase深层链接也会打开游戏商店

Ham*_*sir 8 android intentfilter firebase firebase-dynamic-links

我正在开发一个Android应用程序.

点击按钮后,会生成一个深层链接并与朋友分享.

问题是,点击共享的深层链接后,即使安装了应用程序,Play商店也会打开.

我按照这个文档.

这是intent-filter:

            <!-- [START link_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="example.com" android:scheme="http"/>
                <data android:host="example.com" android:scheme="https"/>
            </intent-filter>
            <!-- [END link_intent_filter] -->
Run Code Online (Sandbox Code Playgroud)

这是我如何创建网址(手动):

        Uri BASE_URI = Uri.parse("https://domainname.com/");
        packageName = getBaseContext().getPackageName();
        APP_URI = BASE_URI.buildUpon().path(requestID.getText().toString().trim())
             .appendQueryParameter("query1", query1.getText().toString())
             .appendQueryParameter("query2", query2.getText().toString())
             .appendQueryParameter("query3", query3.getText().toString()).build();

        try {
           String encodedUri = URLEncoder.encode(APP_URI.toString(), "UTF-8");
           deepLink = Uri.parse("https://myappcode.app.goo.gl/?link="+encodedUri+"&apn="+holder.packageName+"&amv="+16+"&ad="+0);
        } catch (UnsupportedEncodingException e) {
           e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

这是收到的深层链接/网址: http://domainname.com/-KcldzAeJHrPS5tnfxTk?query1=query1&query2=query2&query3=query3

这可能有什么问题?

dii*_*idu 2

至少有三件事可能是错误的:

打开 url 的方式: 在 Android 设备上将 url 写入浏览器窗口时,我看到了类似的问题。将链接添加到电子邮件并单击它时,应用程序被打开。你写了“点击”,所以也许这不是问题。

您的网址和您的应用程序/清单不匹配: 您没有为协议或主机添加正确的意图处理程序以在清单中正确放置,或者您的网址与您添加的内容不匹配。或者 url 中给出的 apn 与您的应用程序包名称不匹配。根据当前状态的问题,主机不匹配。

您没有共享深层链接网址,而只是一个普通的网址: 如果您希望共享的网址打开预装的应用程序,您的朋友将需要单击(在电子邮件或类似内容上)完整的深层链接网址,然后该链接会将链接定向到播放商店(如果未安装应用程序)或打开应用程序(如果正确实施)。正常的url只是在浏览器中打开。根据问题的当前状态,情况可能是这样。

如果修复上述方法不起作用: 尝试将特定的 Android 链接添加到您的网址,如下所示:

https://<myappcode>.app.goo.gl/?link=http://domainname.com&apn=com.doman.app&amv=16&ad=0&al=myscheme://any-string-you-choose
Run Code Online (Sandbox Code Playgroud)

之后你的意图过滤器应该是这样的:

     <!-- [START link_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="any-string-you-choose" android:scheme="myscheme"/>
        </intent-filter>
        <!-- [END link_intent_filter] -->
Run Code Online (Sandbox Code Playgroud)

我更喜欢这种方式,因为与仅使用链接相比,它更加灵活。当然,使用此方法时包名称和其他内容也需要正确。Android 链接是只能在 Android 应用程序中打开的 url,文档有点少,请从此处检查(示例)。我对另一个问题的回复也给出了一些如何使用它的例子。

(编辑 19.3.2018) Firebase 似乎不再完全支持 'al=' 。该代码有效,但文档和 Firebase 控制台生成的 URL 中缺少该代码。