深度链接到Google Play应用程序显示Google Play的起始页而不是应用程序页面

3
我复制了这个流行问题的源代码,它是关于如何在手机上的Google Play商店应用中制作“评价此应用程序”链接的:“Rate This App”-link in Google Play store app on the phone
在我的Android Studio(版本3.1.2)和模拟器上,它可以完美地运行。然而,在我的三星Galaxy A5(2017)(Android 8.0)设备上,该链接总是打开Google Play应用程序,但显示起始页面而不是应用程序页面。
我想知道它们为什么会有不同的反应,以及我能做些什么来使它在我的设备上也能正常工作。我想知道是否有一些设置阻止了深度链接?
我的代码:
Uri uri = Uri.parse("market://details?id=" + getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);       
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
    Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
try {
  startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
  startActivity(new Intent(Intent.ACTION_VIEW,
      Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
}

1
请发布您的代码... - Masoom Badi
1
尝试移除所有过多的标志。 - dominicoder
你是从哪里尝试进行深度链接?是来自另一个应用程序还是一些浏览器? - Jitesh Mohite
1
请告诉我,如果在 Play 商店内打开 WhatsApp 页面(startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + "com.whatsapp")));),使用您遇到问题的同一设备。 - Jitesh Mohite
请检查我的答案,让我知道是否漏掉了什么。 - Leo supports Monica Cellio
显示剩余3条评论
3个回答

3

我100%确定问题出在你的手机上,而不是你的代码里。

我的手机没有这个问题,我通过更改与Google Play服务一起提供的SQLite数据库之一来重现了它。下面我将解释如何在我的手机上实现,并说明如何在你的手机上修复此问题。

如何在没有该问题的手机上重现错误

首先,我确保在我的手机开发人员选项中设置了“仅限ADB”或“ADB和应用程序”的根访问权限设置。然后我运行了adb rootadb shell以通过命令行访问设备。

进入后,我运行了su以成为root用户。

然后我进入目录/data/data/com.google.android.gsf/databases,其中有我想要更改的数据库gservices.db。

为了读写数据库,我运行了sqlite3 gservices.db,并且这个数据库有一个名为overrides的表。为了查看这个表的内容,我运行了命令SELECT * FROM overrides;,注意不要忘记最终的分号。

在我的情况下,这个表完全是空的,但我敢打赌,在你的手机上有一些内容,因为为了在你的手机上重现这个bug,我运行了这个命令(再次记住分号):

INSERT INTO overrides VALUES ("finsky.launch_urls_enabled", "false");

为了退出sqlite3,我输入了.exit,然后重新启动了我的手机。

结果

重新启动后,我尝试运行你的代码,哇,它跳转到了Google Play的主页,而不是应用程序页面。我甚至进入了Amaze File Manager的用户设置,从那里您可以为应用程序评分,结果是一样的,跳转到了主页。

如何解决你的bug(推测)

你可以尝试按照上述步骤,使用以下SQLite语句替换INSERT语句:

UPDATE overrides SET value="false" WHERE name="finsky.launch_urls_enabled"


感谢您的调查。我的设备上的问题已经在前几天消失了。现在同样的应用程序在Play商店中显示应用程序页面。因此,这一定是我设备上的某些临时错误配置。这可能是您找到的问题(但我没有测试过)。无论如何,您的答案是我看到的最接近的,我将奖励您赏金。 - John Threepwood
谢谢!我的手机对于我根据你的问题制作的应用和Amazing File Explorer 仍然表现出相同的行为,但昨天我遇到了另一个在同一部手机上可以正常工作的应用。我有时间时会继续寻找,毕竟可能会有一个合适的答案给你。 - Leo supports Monica Cellio

0

显然,getPackageName()没有返回您所需的值。您获取它的上下文取决于代码运行的位置。

不知道上下文是什么,我可以建议改用这个:

getApplicationContext().getPackageName()

我将 getActivity() 更改为 getApplicationContext()。这样大多数情况下都可以正常工作。 - JP de la Torre

-1

试试这个

  Uri uri = Uri.parse("market://details?id=" + context.getPackageName());
    Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    // To count with Play market backstack, After pressing back button, 
    // to taken back to our application, we need to add following flags to intent. 
    goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                    Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
    try {
        startActivity(goToMarket);
    } catch (ActivityNotFoundException e) {
        startActivity(new Intent(Intent.ACTION_VIEW,
                Uri.parse("http://play.google.com/store/apps/details?id=" + context.getPackageName())));
    }

你有没有看到我的问题?:-D 我刚刚尝试了,但是没有成功。 - John Threepwood

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