以下是我的问题: -
我需要一个上面的解决方案,因为我正在考虑我的应用中的一个场景,即:
Please note that I don't want to use any web service to store the account id & device id of the user at my side.
答案 0 :(得分:5)
对于选项2,您可以在SD卡上创建文件。当用户卸载/安装时,这将保留在那里。但用户始终可以删除您的特殊文件。除非您在自己身边做某事,否则您无法确定用户之前是否已经使用过您的应用。
要完全确定,请将其存储在网上: 您需要一个非常简单的数据库,其中包含安装了您的应用程序的device_id列表。 更多的网页填充了这个数据库。 在您的应用程序中,您下载/打开该网页,该网页将填充数据库。
App> WebClient(或其他)打开http://www.example.com/registerDevice.php?device_id=。 php网站填充数据库。
如果当前设备已安装此应用程序以便工作/不工作,您的应用程序将需要检查数据库。您可以通过相同的PHP执行此操作并检查响应。例如,您可以返回'ok'或'not ok'或其他内容。
答案 1 :(得分:3)
最简单的方法是在用户第一次运行应用时获取用户的帐户,并将该详细信息发送给您。 如何做到这一点已在此处详细记录:How to get the Android device's primary e-mail address
您必须添加另一行代码,以便在应用程序首次启动时检查数据库。
编辑:对于非网络解决方案,只需在应用的开头添加一个计时器:
schedule(TimerTask task, Date when)
任务应该是在您希望提供的时间段之后添加一个令牌,并使用用户的帐户详细信息进行身份验证(请参阅获取帐户详细信息的第一个解决方案)
最后,如上所述,在手机内存中为该特定文件添加一个回溯功能,以查看用户之前是否使用过该应用。
基于手机内存的任何类型的身份验证的问题是人们可以轻松删除令牌(如果他们可以找到),并再次重复使用该应用程序。
答案 2 :(得分:0)
尝试此设备特定的实现:
PackageManager packageManager = getContext().getPackageManager();
List<ApplicationInfo> applications = packageManager.getInstalledApplications(
PackageManger.GET_UNINSTALLED_PACKAGES);
// retrieves some information about all applications (even uninstalled ones)
// which have data directories
当然,如果用户更换设备,此方法将无效。但您不需要使用任何Web服务。
答案 3 :(得分:0)
您可以通过在第三方服务器上保留散列设备ID和用户google ID的数据库来使用此功能。 另请参阅http://android-developers.blogspot.de/2011/03/identifying-app-installations.html