Android 开发者负载

Android 开发者负载,android,in-app-purchase,Android,In App Purchase,当用户想要继续进行应用内购买时,我不确定如何设置开发者有效负载字段。情况如下: 非消耗品(例如:解锁高级功能) 没有可用的服务器后端(我只能进行本地检查) 没有可用的用户登录/密码 关于第三点,我更倾向于不要要求用户输入其电子邮件或任何其他类型的信息。您需要生成一个随机字符串,任何随机字符串都可以。例如,一个选项是使用设备id: String deviceId = Settings.Secure.getString(context.getContentResolver(),

当用户想要继续进行应用内购买时,我不确定如何设置开发者有效负载字段。情况如下:

  • 非消耗品(例如:解锁高级功能)
  • 没有可用的服务器后端(我只能进行本地检查)
  • 没有可用的用户登录/密码

  • 关于第三点,我更倾向于不要要求用户输入其电子邮件或任何其他类型的信息。

    您需要生成一个随机字符串,任何随机字符串都可以。例如,一个选项是使用设备id:

    String deviceId = Settings.Secure.getString(context.getContentResolver(),
                                                Settings.Secure.ANDROID_ID))
    
    然后将其作为IInapplingService上getBuyIntent的最后一个参数提供给iab API:

    public android.os.Bundle getBuyIntent(int apiVersion, java.lang.String packageName, java.lang.String sku, java.lang.String type, java.lang.String developerPayload) throws android.os.RemoteException;
    
    然后在onActivityResult()中重新阅读:

    purchaseData是从应用内计费API返回的数据,结构为json:

    JSONObject o = new JSONObject(purchaseData);
    String developerPayload = o.optString("developerPayload");
    

    您需要验证onActivityResult中返回的developerPayload是否是您在getBuyIntent中提供的。如果您使用的是任意字符串,您可以在通话之间将其存储在应用程序共享首选项中。

    Mmm,但是如果用户卸载应用程序并重新安装,或者同一用户有另一部手机要运行应用程序,则随机字符串或设备id将无法工作。请注意,我所说的是非消耗性物品。如果您像我上面所说的那样使用deviceId,那么在同一设备上取消安装和重新安装会得到处理,因为deviceId保持不变。如果您希望允许用户在不同的设备上安装应用程序,则必须考虑用户信息并将其存储在服务器上—您说过您不想这样做。@MarcoMasci:您生成的developerPayload仅对该事务有效。您可以为第二次购买生成另一个字符串作为developerPayload。如果同一用户(gmail Id)有另一部手机,您可以使用getSkuDetails()获取从该gmail Id购买的所有物品。在用户获得新设备的情况下,使用Secure.ANDROID_ID是不合适的。原问题有效,尚未回答。在这种情况下,我没有找到比使用常量更好的解决方案。然而,从安全的角度来看,使用常量是无用的。
    JSONObject o = new JSONObject(purchaseData);
    String developerPayload = o.optString("developerPayload");