如何识别特定的apk版本,即使用户在Google Play中更新apk

我需要识别具有特定的apk版本的用户。 这个版本有一些function比较正常的apk(如一些function是在开始PRO)。

build for GooglePlay------> ----> next version of apk build for some Customers--> 

我想把一些数据保存到数据库,所以即使我更新了apk,无论用户使用什么版本,都会有数据。

当用户没有运行应用程序,但立即更新到下一个版本时,会发生问题。 用户没有初始化sqlite,所以没有数据存储。

有没有什么办法保持数据,并重用它,即使用户更新的基础apk到较新的版本?

Solutions Collecting From Web of "如何识别特定的apk版本,即使用户在Google Play中更新apk"

你不能,至less没有根或任何其他“补丁”的解决scheme。

有几个解决scheme不能很好地工作,需要做一些准备。

解决scheme1:

创build第二个应用程序,必须预先安装,并有一个PACKAGE_ADDED接收器。 Onec它收到您的应用程序的安装它将运行它至less一个。

解决scheme2:

创build一个BOOT_COMPLETED接收器,但这意味着设备需要重新启动才能激活。 即使有了这个解决scheme,它可能会也可能不会工作 由于Android 3.1谷歌添加了一个安全策略,要求(最多的设备),该应用程序已经启动至less一次进入激活状态(一些制造商没有这个安全策略)。

解决scheme3 :(只有工作解决scheme)

为您的“客户 – 应用程序”创build一个不同的包。 Onec应用程序从Playstore安装并启动,它将validation是否安装了具有customers-namespace的应用程序。 如果是的话,那么它会开始做你的Customers-Sqlite-Stuff,然后卸载应用程序。

例:

com.myapp.customer – >已安装com.myapp.playstore – >已安装 – >已启动 – >validation是否安装了com.myapp.customer并激活“customers routine” – > remove com.myapp.customer

编辑:

使用Android Gradle Plugin 3+允许您创build风格,使您可以轻松创build不同的包名/构build。 https://developer.android.com/studio/build/build-variants.html

根据我的理解,你的应用程序完全离线

如果它不在线。 你只能通过询问他们来确定用户是否是专家。

您可以通过input促销代码让用户获得专业function。 从用户获取促销代码,并提供他们的专业function。

如果你的应用程序是在线,并有networking服务。

然后,您可以通过调用您的服务器来简单地检查专业用户,当他们打开应用程序,并提供Profunction。

另一个想法是检查构build号码,并提供专业function。

通过调用BuildConfig.VERSION_CODE获取版本号

如果你的客户没有运行应用程序,然后通过商店进行更新,那么你的“专业版”的任何代码都可以执行,所以我会尝试在应用程序是唯一的“完成”安装了权限。

也许尝试添加一个权限只在“亲”的变种,这是不是真的在你的应用程序中是必要的,但你可以稍后检查,如果用户已经接受它通过第一次安装,所以知道它是哪个apk。

您也可以尝试安装Referrer,通常用于标识您的安装源的来源(通常由市场工具使用)。 从Android电子市场安装应用程序后,请查看此获取推荐人

这个解决scheme取决于你是否通过电子邮件访问你的特殊用户。

Android支持深度链接,对于您的PRO用户,您可以将它们指向链接以启用PROfunction。 如果用户打开这个链接,那么你的应用程序将打开。 您可以将解锁存储在SharedPreferences中,以便稍后更新到更新的版本。

或者,您也可以将用户发送到login页面(您发送的链接)。 如果他们成功login,则redirect到深层链接。

在同一方向的另一种select是通过将您的应用程序关联到不常见的文件扩展名(即:.fff)并将.fff文件发送给您的PRO用户。 这将提示他们打开与您的应用程序,这将允许您再次logging他们的专业function激活的文件。

两种解决scheme都可以让您激活不同的function组,例如,如果您有不同的function组(专业,业务,超级…)