Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在卸载应用程序后使用SharedReference永久存储值_Android_In App Purchase_Sharedpreferences - Fatal编程技术网

Android 如何在卸载应用程序后使用SharedReference永久存储值

Android 如何在卸载应用程序后使用SharedReference永久存储值,android,in-app-purchase,sharedpreferences,Android,In App Purchase,Sharedpreferences,我正在Android上开发应用程序内PrurCase。购买物品后,我在Android中使用共享首选项Api将布尔值设置为true。效果很好。一旦我卸载并重新安装我的应用程序,布尔值将变为false。这是我的代码: boolean buyUfo = false; private static final String BUYUFO ="buyUfo"; protected void onCreate(Bundle savedInstanceState) { super.onCreate

我正在Android上开发应用程序内PrurCase。购买物品后,我在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;
                        }
                     }

我希望此值对于购买物品的人始终为真。请帮助这是不可能的。如果您尝试以这种方式实现它,用户将通过手动编辑SharedReferences滥用您的系统


用户可以随时清除手机内存。你不应该相信这一点。相反,请将值保存在后端,如果用户重新安装应用程序,请检查它是否是同一用户。

您必须将此值存储为除SharedReferences之外的其他值,SharedReferences是特定于应用程序的,并且在卸载和重新安装应用程序时会将其删除。
您可以将该值存储在服务器上,当用户再次安装应用程序时,您可以检索该值并根据其值对其进行操作

将购买信息保存在
SharedReference
上不是正确的方法。您应该查询服务器以检查用户是否购买了该项目

见安卓。我建议将敏感数据保存在服务器中(谷歌也建议这样做)。在设备中,您可以将数据保存在共享首选项(卸载时删除根设备中的不安全)或内部存储(卸载时删除)或外部存储和sqlite数据库中。无论您选择什么,如果您的数据是敏感的,则始终对其进行加密


注意在多个安装之间持续存在的设备中,没有可靠的方法保存数据。如果将其保存在外部存储器中,则用户总是会删除它。

您可以将其存储在SD卡上,并为其创建一个文件。但这也可以从外部删除

关于:
我希望该值对于购买该商品的人始终为真?
使用应用内购买,在购买物品后,您实际上不需要存储物品是否已购买。API将为您完成这项工作,通过它,您可以获取特定id项的状态

要检索用户拥有的产品列表,请使用您的应用程序 向Google Play发送getPurchases调用。您的应用程序可以 通过发送ConsumerPurchase呼叫的消费请求。在请求中 参数,则必须指定应用内产品的唯一purchaseToken 购买时从Google Play获得的字符串。 GooglePlay返回一个状态码,指示消费是否正常 录制成功

阅读更多内容:



共享首选项在应用程序卸载时删除,但在更新期间保留。您应该将其保存在服务器中。如何在服务器中保存此特定布尔值?只需将其作为字符串true或false发送即可。然后查询服务器的状态。服务器如何为特定用户返回此值。你能写出解决方案的代码吗?你可以根据用户名,如果您没有为您的用户实现任何类型的登录,并且使用google play或google+用户名进行购买,实际上这是我第一次在应用程序中实现应用内购买。我遵循一个教程,它建议我这样做(使用SharedReference)…你知道其他方法吗?事实上,这是我第一次在应用程序中实现应用内购买。我遵循一个教程,它建议我这样做(使用SharedReference)…你知道其他方法吗?现在不知道,如果我发现什么,将恢复。我记得的最后一件事是,每次应用程序启动时,除了涉及应用程序内购买的屏幕外,您还可以检查项目是在您的splash或基类上异步购买的,并在那里设置SharedRef-为true还是false。然后,您可以利用该值在任何地方触发应用程序中的其余操作