Firebase深度链接打开Play商店,即使应用程序已安装

10

我正在开发一款安卓应用。

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

问题是,即使已经安装了应用程序,在点击共享的深度链接时,也会打开应用商店。

我遵循了这个文档。

下面是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] -->

这是我手动创建URL的方法:

        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();
        }

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

可能出了什么问题?


深度链接是如何“分享”的?是这样的,朋友们只收到http://domainname.com/...并点击它,还是他们收到完整的深度链接,从https://myappcode.app.goo.gl/...开始?根据我理解你的问题的方式,只有http://domainname.com/...被分享了,如果你想分享深度链接,那肯定是错误的。 - diidu
我分享了整个 deepLink,而接收方只收到这一部分:http://domainname.com/-KcldzAeJHrPS5tnfxTk?query1=query1&query2=query2&query3=query3。该链接会打开我的应用程序,然后如果我返回并手动打开我的应用程序,则应用程序将接收到链接。 - Hammad Nasir
我不明白如果你完整分享URL,为什么你的朋友们只能接收到部分信息。而且我也不理解点击以"http://domainname.com/"开头的URL是如何打开Play商店的。请您逐步解释问题,包括每个阶段发生了什么,各个步骤中可用数据的所有细节,以澄清问题。 - diidu
尝试在 Firebase 仪表板中添加一个静态链接,看看是否正常工作。 - Youtoo
1个回答

2
至少有三个可能出错的地方:
1. 打开url的方式不对: 我在Android设备上将url写入浏览器窗口时遇到了类似的问题。当将链接添加到电子邮件并单击它时,应用程序会打开。您写了“单击”,因此这可能不是问题。
2. 您的url和应用/清单不匹配: 您没有为协议或主机添加适当的意图处理程序,或者您的url与您添加的内容不匹配。或者在url中给出的apn与您的应用程序包名称不匹配。根据当前状态的问题,主机不匹配。
3. 您未共享深度链接url,而只是普通的url: 如果您希望共享的url打开预安装的应用程序,则您的朋友需要单击(例如,在电子邮件中)完整的深度链接url,然后将链接定向到Play商店(如果未安装应用程序)或打开应用程序(如果正确实现)。普通url仅在浏览器中打开。根据当前问题的状态,这可能是情况。
4. 如果修复以上问题无效: 尝试在您的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

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

     <!-- [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] -->

我更喜欢这种方法,因为与仅使用链接相比,它更加灵活。当然,在使用此方法时,包名称和其他内容也需要正确。Android链接是仅在Android应用程序中打开的URL,文档记录较差,请从此处(示例)进行检查。另外,我的回复另一个问题提供了一些如何使用它的示例。
(编辑于2018年3月19日)似乎Firebase不再完全支持“al =”了。代码可以工作,但它在文档和Firebase控制台生成的网址中缺失。

如果我的应用程序还没有发布,那么“Android链接在这里”是什么意思? - Hammad Nasir
您无需将应用程序发布即可在Firebase控制台上创建它。如果您拥有“myappcode”用于“myappcode”.app.goo.gl,则我认为您已经完成了这个步骤。我在回复中添加了一些关于Android链接(al)的参考资料。 - diidu
@diidu,我看到了类似的问题,就像你解释的第一点关于打开链接的方式:如果我点击链接,它总是会重定向到Play商店(当应用程序不在最近使用列表中),并且在从Play商店打开应用程序后未收到PendingDynamicLink。但是,当我在浏览器中输入时,它会打开应用程序。有什么想法,为什么我会看到这种奇怪的行为。 - SAR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接