代码之家  ›  专栏  ›  技术社区  ›  Pratik Butani Umesh N

Android打开对话框以安装应用程序而不是Playstore

  •  0
  • Pratik Butani Umesh N  · 技术社区  · 6 年前

    从Android Youtube应用程序当我点击广告时,有一个Google Play的对话框,你可以从对话框中安装应用程序。
    使用活动监视器,我找到了以下参数:
    1-com.android.vending网站
    2-com.google.android.finsky.activities.InlineAppDetailsDialog

    我试着设置一个Uri“market://details?id=example.package“,但没有成功。

    这是一个当我点击广告时打开的对话框。

    enter image description here

    0 回复  |  直到 6 年前
        1
  •  14
  •   Nimrod Dayan    8 年前

    根据你的发现和其他安卓开发者的帮助,我得出结论,Play Store应用程序的这一功能是精选谷歌合作伙伴独有的。结论是基于 com.google.android.finsky.activities.InlineAppDetailsDialog ,其中包括 switch 它检查调用包的应用程序ID和签名。只有授权的应用程序才允许显示此对话。

    下面是部分反编译代码:

    switch (string2.hashCode()) {
                case 714499313: {
                    if (!string2.equals("com.facebook.katana")) break;
                    n2 = 0;
                    break;
                }
                case 419128298: {
                    if (!string2.equals("com.facebook.wakizashi")) break;
                    n2 = 1;
                    break;
                }
                case -649684660: {
                    if (!string2.equals("flipboard.app")) break;
                    n2 = 2;
                    break;
                }
                case 1249065348: {
                    if (!string2.equals("com.kakao.talk")) break;
                    n2 = 3;
                    break;
                }
                case 1153658444: {
                    if (!string2.equals("com.linkedin.android")) break;
                    n2 = 4;
                    break;
                }
                case -583737491: {
                    if (!string2.equals("com.pinterest")) break;
                    n2 = 5;
                    break;
                }
                case -928396735: {
                    if (!string2.equals("com.test.overlay")) break;
                    n2 = 6;
                    break;
                }
                case 10619783: {
                    if (!string2.equals("com.twitter.android")) break;
                    n2 = 7;
                    break;
                }
                case 1835489205: {
                    if (!string2.equals("ru.yandex.weatherplugin")) break;
                    n2 = 8;
                    break;
                }
                case 19680841: {
                    if (!string2.equals("ru.yandex.yandexnavi")) break;
                    n2 = 9;
                    break;
                }
                case 19650874: {
                    if (!string2.equals("ru.yandex.yandexmaps")) break;
                    n2 = 10;
                    break;
                }
                case 1663191933: {
                    if (!string2.equals("ru.yandex.yandexbus")) break;
                    n2 = 11;
                    break;
                }
                case 636981927: {
                    if (!string2.equals("ru.yandex.metro")) break;
                    n2 = 12;
                    break;
                }
                case 647779725: {
                    if (!string2.equals("ru.yandex.searchplugin")) break;
                    n2 = 13;
                    break;
                }
                case -143313792: {
                    if (!string2.equals("ru.yandex.test.promolib")) break;
                    n2 = 14;
                    break;
                }
                case -2075712516: {
                    if (!string2.equals("com.google.android.youtube")) break;
                    n2 = 15;
                    break;
                }
                case 1387611572: {
                    if (!string2.equals("com.google.android.youtube.tv")) break;
                    n2 = 16;
                    break;
                }
                case 886484461: {
                    if (!string2.equals("com.google.android.apps.youtube.kids")) break;
                    n2 = 17;
                    break;
                }
                case 1386399663: {
                    if (!string2.equals("com.google.android.apps.youtube.gaming")) break;
                    n2 = 18;
                    break;
                }
                case 1713433253: {
                    if (!string2.equals("com.google.android.apps.youtube.music")) break;
                    n2 = 19;
                    break;
                }
                case 1252744364: {
                    if (!string2.equals("com.google.android.apps.youtube.creator")) break;
                    n2 = 20;
                    break;
                }
                case 304833084: {
                    if (!string2.equals("com.google.android.apps.youtube.vr")) break;
                    n2 = 21;
                    break;
                }
                case 1712832578: {
                    if (!string2.equals("com.google.android.apps.youtube.mango")) break;
                    n2 = 22;
                    break;
                }
    

    尝试从测试应用程序启动此活动时,我会得到以下日志:

    06-09 10:44:30.100 5180-5180/? W/Finsky: [2] com.google.android.finsky.activities.InlineAppDetailsDialog.onCreate(88): Called from untrusted package.
    

    所以看来至少在写这个答案的时候,不可能做你想做的事。我们希望这个功能将来能为第三方开放。