有没有人知道是否有可能将现有的Android应用程序(付费)与约500名付费客户一起转换为免费增值模式而不会导致会员在商店内升级时再次付款? 是/没有回答有证据的
我能想到这样做的唯一方法是在商店中创建一个新的应用程序,暂停现有应用程序的开发并将其转换为各种类型的关键应用程序,其行为类似于新的Freemium应用程序的替代解锁; e.g。
if (existing app is installed || purchase exists in in app billing receipts) {
// Unlock premium value
}
然后,现有用户将被引导到新应用程序进行下载和安装,但是需要安装密钥应用程序(第一个应用程序)以避免付费?
答案 0 :(得分:1)
我认为没有办法做到这一点。
首先,主要的挑战是确定用户是否已经为app付费。如果您知道这一点,您就可以在if
课程中添加一些Application
,这将为已经为应用付费的用户启用高级选项。例如:
public class MySingltone extends Application {
@Override
public void onCreate() {
if(alreadyPaid)
//Turn on premium stuff
}
}
确定。现在,有关确定用户是否已为您的应用付款的方法:
SharedPreferences
或设置,因此您可以检查它是否存在 - >应用程序安装之前 - >用户付了钱。只需在此检查后添加一些标记,因为在第二次启动时,所有用户都将是“旧用户”。因此,每个用户只需检查一次。SharedPreferences
boolean
wasInstalled=true
。所以在每个人都更新他们的应用程序后,你会
能够通过if(isFirstLaunch==true)
确定旧用户。只是
不要忘记再做一次更新,这将删除添加
在使您的应用免费增值之前boolean wasInstalled=true
。if(alreadyPaid)
中检查此列表中是否存在当前设备电子邮件 - >用户购买的应用。 (您需要为清单添加权限以获取用户的电子邮件)答案 1 :(得分:0)
只要您将应用的状态从任何耗材,订阅或一般任何应用内商品的购买状态中抽象出来,就有办法实现这一点。 让我们来看一个例子。
假设我的应用程序显示水果图片,免费客户可以看到梨和香蕉,而免费增值可以另外看到草莓和柠檬。由于您必须采用不同的方式将用户识别为高级用户(已经付费的现有用户+通过应用内商品购买的新用户,因此您需要一个与此无关的系统/状态)。
<强> 1。标记优质状态
最简单的想法是在磁盘上保存一个标志isPro / proState(SharedPreferences,SQLiteDatabase,other),但这样可以让拥有root设备的用户轻松访问您的高级功能。解决方案在这里是多方面的,这取决于您,但如果您已经拥有用户所在的任何中心位置或服务器,那么坚持用户的专业状态并不是更好的地方。但是,如果您不使用SSL,则可能需要在顶部进行一些散列以在服务器和客户端之间进行通信。 最终,如果这对你来说并不重要,那就不要太费心了。首先,你不会得到很多假的专业人士,第二,你会很高兴他们花时间试图“破解”你的高级账户,并宣传你的草莓和柠檬有多酷。
<强> 2。将现有用户转换为高级状态
如果我没有弄错,您的现有用户已经为您的应用付费,我想这意味着您希望立即将其设置为高级用户。这是关于跟踪用户当前版本的全部内容,有一些方法可以做到这一点:
(从大多数到最不理想的列出)
如果您已经在服务器上保留了用户当前版本的记录,或者在本地保留了用户,那么就完成了。只需检查上一个和当前版本并更新用户的高级状态。注意:如果您还没有这样做,那么可能是思考它的好时机。持久用户的当前版本带来了很多好处(分析,新功能突出,迁移等)并消除了很多麻烦(支持,您面临的问题等)。
如果不这样做,但是您在SQLite中使用持久性,则可以使用更新数据库模型的版本并使用onUpgrade method来了解给定用户是来自旧版本还是如果它是一个新用户,虽然那个对我来说有点黑客。
作为最后一个项目符号,一般用户在使用您的应用程序时会留下痕迹,如果您有任何解决方法(检查现有数据库,检查SharedPreferences上的预设密钥,cookie等)您可以知道用户是否来自旧版本。
希望它有所帮助。