我正在开发Android中的In-App Prurchase。购买一个项目后,我使用Android中的共享首选项Api将布尔值设置为true。它工作正常。一旦我卸载并重新安装我的应用程序,它就会使布尔值为false。这是我的代码:
boolean buyUfo = false;
private static final String BUYUFO ="buyUfo";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
sharedPreference = this.getSharedPreferences(SHARED_PREFERENCE_ID, MODE_PRIVATE);
buyUfo = sharedPreference.getBoolean(BUYUFO, false);
}
//After In-App Purchase, when finish listener is called.
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener1 = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d("ufo", "Purchase finished: " + result + ", purchase: " + purchase);
if (result.isFailure()) {
if (result.getResponse() == IabHelper.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED) {
Editor editor = sharedPreference.edit();
editor.putBoolean(BUYUFO, true);
editor.commit();
return;
}
}
我希望这个价值永远适用于那些购买商品的人吗?..请帮忙
答案 0 :(得分:1)
见Storage options android。我建议您在服务器中保存敏感数据(也是谷歌推荐的)。在设备中,您可以将数据保存在共享首选项中(在卸载时删除根设备中不安全)或内部存储(卸载时删除)或外部存储和sqlite数据库。无论您选择何种数据都是敏感数据,都要对其进行加密。
注意没有可靠的方法来保存多个安装之间持续存在的设备中的数据。如果将其保存在外部存储器中,则总是容易被用户删除。
答案 1 :(得分:1)
您可以将它存储在sdCard上,制作相同的文件。但也可以在外部删除。
关注您:关注:
我希望这个值始终适用于那些购买商品的人吗?
通过应用内购买,购买商品后,您确实无需存储是否已购买。 API会为您完成,您可以通过它获取特定ID的项目状态。
检索用户所拥有的产品列表,即您的应用程序 向Google Play发送getPurchases电话。你的申请可以成为 通过发送consumePurchase调用消费请求。在请求中 参数,您必须指定应用内商品的唯一purchaseToken 购买时从Google Play获得的字符串。 Google Play会返回一个状态代码,指示消费情况 录得成功。
答案 2 :(得分:0)
那是不可能的。如果您尝试以这种方式实现,用户将通过手动编辑SharedPreferences来滥用您的系统。
用户可以随时清除手机记忆库。你不应该依赖它。相反,在后端保存价值,如果用户重新安装应用程序,请检查它是否是同一个用户。
答案 3 :(得分:0)
您必须存储除sharedprefrence之外的此值,sharedprefrences是特定于应用程序的,并且在您卸载并重新安装应用程序时会删除它们。 您可以做的是将此值存储在服务器上,当用户再次安装应用程序时,您可以检索该值并根据其值进行操作
答案 4 :(得分:0)
在sharedPreference
上保存购买信息不正确。您应该查询服务器以检查用户是否已购买该项目。