1

在我的应用程序中,我存储敏感的用户数据(如银行详细信息),用户可以使用单独的密码锁定每个详细信息。我希望用户在安装后第一次运行应用程序时设置一个主密码,这样他就可以通过输入这个主密码来恢复数据,以防他忘记密码。

因此,安装后第一次运行应用程序时,会弹出要求他设置主密码的弹窗,用户需要设置密码才能继续。

但是,当应用程序将在手机重启或关闭应用程序后启动时,他不应该得到弹出窗口。

安装后首次运行应用程序时,弹出窗口应仅出现一次。

假设setMasterPassword()是创建对话框的函数,我在第一次运行时在哪里调用这个函数?

android有什么参数可以判断app是新安装的吗?

或者我应该只使用偏好变量来检查这个?{类似于将 PreferenceVariable 中的计数器初始化为 0,然后在 onCreate() 中检查此值,当且仅当计数器为 0 时调用 setMasterPassword(),然后将计数器递增 1,这样它就不会被再次调用。}

最好的方法是什么?

提前致谢!

4

4 回答 4

2

我也试图弄清楚是否有“全新安装”布尔值,但似乎没有这样的东西,所以你应该选择一个共享的偏好,就像人们在这里所做的那样。

PS:顺便说一句,这是那个问题的重复。

PS2:请记住,如果用户删除了您应用程序的所有存储信息,该检查也将被删除,因此您可以再次输入。

如何提高您的信息安全:

  1. 将用户信息与一些控制字节(随机数、特定字符串等)一起存储,并使用用户密码对其进行加密。
  2. 每当您需要用户信息时,获取该文件,尝试使用用户密码解密其内容(每次都询问)
  3. 检查控制字节(asubstr()可能就足够了)。如果它们相同,则获取信息。如果不是,请再次提示。

这样,您将获得一些好处:

  • 您不会将用户的密码存储在任何地方。SharedPreferences 不会存储这个,只是“firstTime”变量。
  • 如果用户转储了应用程序的信息,再次输入密码不会减少您的信息。
  • 从资源管理器打开该文件只会显示一堆数字、符号和可能不可读的字节,这些字节大多会破坏编辑器。
于 2012-08-08T18:06:18.510 回答
2

在某处找到此代码,它对我非常有用。所以,我想它也可能对你有帮助。

看一看。

使用SharedPreference存储 firstrun 值,并根据该值检查您的启动活动。如果设置了值,则无需显示对话框。否则,显示对话框并将 firstrun 标志保存在 SharedPreference 中。

在您的 MainActivity 中:

public void onCreate(){
    boolean firstrun = getSharedPreference("PREFERENCE", MODE_PRIVATE).getBoolean("firstrun", true);
    if (firstrun){
   [[ ...Display the dialog ]]
    // Save the state
    getSharedPreference("PREFERENCE", MODE_PRIVATE)
        .edit()
        .putBoolean("firstrun", false)
        .commit();
    }
}
于 2012-08-10T17:42:59.103 回答
1

因此单通认证的缺点。如果恶意用户设法获取/更改密码,则您设置的任何机制都不会阻止他们。如果信息真的那么敏感,您可能需要启用第二个身份验证机制(安全问题、电子邮件确认等)

于 2012-08-08T18:39:27.053 回答
0

最好的方法可能是在安装时设置接收器。

<receiver android:name =".CLASSNAME">
     <intent-filter>
                 <action android:name="com.android.vending.INSTALL_REFERRER"/>

      </intent-filter>
      </receiver> 

(如果您不熟悉这些,您将需要创建一个名为“CLASSNAME”的 BroadcastReciever 扩展类来接收广播。)

此外,除非它在市场上出现,否则安装引荐来源网址将不起作用,因此您可以按照此堆栈溢出答案来模拟虚假安装;如何测试android推荐跟踪?

祝你好运。

于 2012-08-08T18:11:44.860 回答