支持应用程序内的亚马逊和Android市场(Google Play)链接

use*_*209 25 android amazon-appstore

因此我的一个应用程序今天被拒绝从亚马逊应用程序商店.原因是因为在我的应用程序中,我链接到Android市场上的应用程序的付费版本.令人失望,但无论如何,我想每个人都希望他们的削减......

所以现在我不得不修改应用程序以将Android市场链接更改为亚马逊应用商店链接.这并不是什么大不了的事情,除非现在如果我这样做,当我想将更新的版本上传回Android市场时,我仍然存在差异.毕竟,如果他们从Android市场购买应用程序,将某人链接到亚马逊应用程序商店会相当愚蠢.

现在我们都知道,这是一个支持/管理同一个应用程序的多个版本的痛苦.因此,我的问题变成了如何同时链接到两者?有没有办法告诉应用程序从哪里下载,所以我可以将两个链接编码到应用程序中,从而将用户自动指向其中一个?其次,是否反对亚马逊TOS给用户一个选择(比如我弹出一个对话框并询问用户从哪里下载)?

谢谢大家.

编辑:直接从亚马逊客户服务"Re:链接到两个市场"(我希望审批流程与这些人一样快):

目前,我们需要任何链接指向仅针对市场链接的Amazon Appstore.允许链接到您的网站,而不是其他市场.

当从应用程序中指向其他应用程序(包括向上销售)时,必须从Amazon Appstore完成购买.

mtt*_*lns 12

好消息!显然,亚马逊商店的最新版本终于将PackageManager.getInstallerPackageName()"com.amazon.venezia"与谷歌Play的对比"com.android.vending".这将是确定您的应用程序是侧载,从Amazon安装还是从Google安装的最简单方法.


Ree*_*eed 8

这是你可以做的:

  1. 完成申请的准备和签署.
  2. 将其安装在您的测试设备上
  3. 使用 PackageManager.getPackageInfo

这该怎么做:

public static boolean isMarket(Context context){
    boolean isMarketSig = false;
    int currentSig = 1;
    try {
        Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
        for (Signature sig : sigs)
        {
            currentSig = sig.hashCode();


    Log.i("MyApp", "Signature hashcode : " + sig.hashCode());
// This Log is for first time testing so you can find out what the int value of your signature is.
            }
            } catch (Exception e){
                e.printStackTrace();


}
//-1545485543 was the int I got from the log line above, so I compare the current signature hashCode value with that value to determine if it's market or not.
        if (currentSig==-1545485543){
            isMarketSig = true;
    } else {
        isMarketSig = false;
    }

    return isMarketSig;
}
public static void openStore(Context context){
    if (isMarket(context)){
        Intent goToMarket = new Intent(Intent.ACTION_VIEW,Uri.parse("market://d" +
        "etails?id=com.jakar.myapp"));
        goToMarket.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(goToMarket);  
    } else {
        Intent goToAppstore = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.amazon.com/gp/mas/dl/andro" +
        "id?p=com.jakar.myapp"));
        goToAppstore.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(goToAppstore);
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,从测试设备上安装的应用程序获得的hashCode()将与市场上的相同.来自应用程序商店的哈希代码将有所不同,因为根据https://developer.amazon.com/help/faq.html,应用程序商店使用特定于您的开发者帐户的签名对应用程序进行签名,以便返回不同的你实际用它签名的价值.

注意:它可以成功打开市场,但我尚未在App Store上部署此方法,所以我还没有完全测试它.我相信它会起作用,但不能保证,所以如果你使用我建议但失败了,请不要让我负责.


Sag*_*are 6

你可以做以下事情:

  1. 检查设备是否基于其制造商.例如:https://developer.amazon.com/sdk/fire/specifications.html

  2. 要撰写评论并打开Amazon App Store,请使用以下意图

    amzn://apps/android?p=package_name
    
    Run Code Online (Sandbox Code Playgroud)

    其中p=Link,以特定包名的详细页面.

参考:亚马逊开发者链接.

https://developer.amazon.com/sdk/in-app-purchasing/sample-code/deeplink.html


Car*_*das 5

正如你所说,你可以使用一个布尔值,然后被迫两次构建你的应用程序,所以我认为这不是最好的方法.

最好的方法是检查是否安装了Android市场并采取相应的行动:这里.

另一种更复杂的方法是使用PackageManager.getInstallerPackageName查询应用程序安装程序的名称.这需要额外的工作,因为即使您在安装了Android市场的Android设备上也可以通过并行市场安装应用程序,并且您还必须检查它是否作为调试/开发安装(在这种情况下安装程序包名称为null).


Pro*_*man 0

我也曾为此苦苦挣扎,但我决定,我在亚马逊上看到的免费应用程序立即取得了成功,这保证了我在进行新构建时有时间创建第二组 .apk。我现在使用 Amazon 布尔标志,并创建一个通用版本,然后为 Amazon 市场创建一个递增 1 的版本。AFAIK,没有其他市场需要内部链接。

我最终打算用一种巧妙的方式编写一个市场选择器,以自动找出要做什么,但有很多变量 - 不仅仅是一个应用程序的市场地址,还有不同的市场如何识别公司名称以查找所有应用程序。一些市场应用程序劫持了主要的 Android 市场协议(例如 Appslib 和 SlideMe,如果我没记错的话),但不以相同的方式存储公司名称。然后,您需要决定追加销售链接的去向 - 同一市场还是共同市场(我只向我使用的大多数市场提交了我的免费应用程序)。

我正在等待我的付费应用程序获得批准,但我很确定,考虑到我的免费应用程序获得了多少下载量,在亚马逊市场上提供它是值得的。

  • 在追求更多市场(Nook、BlackBerry 等)之后,更加明显的是,单独构建是唯一有效的解决方案。动态检查已安装的市场是非常有问题的,并且会导致多个商店(例如Google Play和Amazon Appstore)的用户得到不正确的结果。此外,对于更复杂的应用程序来说,除了涉及链接之外,还存在更多问题。 (4认同)