2012-01-18 84 views
16

我目前在Android市场上有两个版本的我的应用程序,一个是付费的,一个是免费的。但我希望将应用内付款整合到我的免费应用程序中,并在订阅基础上向客户收费,价格低于付费应用程序的当前价格。如何从付费Android应用程序迁移到使用应用内结算付费的应用程序?

但是,我应该如何处理现有客户?让他们再次支付使用付费功能似乎是不公平的,而他们是我的应用程序的早期采用者。理想情况下,我实现了一些可以让现有用户访问我的免费应用程序中的解锁功能的东西。

有关如何完成此任务的任何想法?一个好的方法的提纲就足够了,我不介意去研究如何真正实现这种方法。

+2

您是否曾经为此找到过解决方案?我正在考虑做同样的事情,需要找到一种方法为现有付费用户提供我打算通过应用内购买解锁的功能。我正在考虑做这样的事情(http://stackoverflow.com/questions/2133986/how-to-know-my-android-application-has-been-upgraded-in-order-to-reset-an-alarm)以检测升级与干净安装,但担心它不会像给现有用户免费提供适当的应用内购买那样安全(如果可能的话)。 – 2012-12-31 03:28:50

+0

我还没有找到解决方案。我正在考虑一个解决方案,用于检查付费应用是否安装在设备上,如果有,请向已更新的免费应用的共享首选项添加条目,并在应用内订阅,以指示用户应具有解锁功能我的应用程序但我还没有花时间研究这种解决方案的优缺点。 – 2013-01-07 11:05:04

+0

@ Jan-Henk找到解决方案了吗?你是怎么做到的?我也愿意实施这一点。分享我的经验。我买了SwiftKey付费版本。然后Swiftkey变成了应用购买的概念。我不知道他们是如何做到的,但他们“知道”我是付费用户,并让我有1个免费主题。 – rxlky 2015-05-18 03:31:24

回答

-1

Android开发网站涵盖了这个相当不错。

http://developer.android.com/guide/market/billing/index.html

+7

您的链接涵盖了如何实现应用内结算,但我的问题的主要焦点是如何将用户从现有的付费应用程序迁移到实施应用程序内结算的免费应用程序。我正在寻找一种解决方案,让这些用户不必再次支付。 – 2012-01-18 23:07:50

+0

Android开发站点根本不包括这个用例。 – donturner 2015-07-15 20:43:31

0

纠正我,如果我的理解不正确。您提到的订阅方式意味着用户详细信息+数据库+附加信息?

如果你的应用程序没有数据库或任何东西来保存用户记录。我会建议发布更新付费应用程序,并启用sharedpreference或通用的ini文件。 使用免费的应用程序来阅读相同的sharedpreferenece文件或您自己的ini文件来读取设置。

去数据库将帮助您在未来进行更多的客户关系活动。

1
  • 递增数据库版本(例如34 - > 35)
  • 在方法SqliteOpenHelper解锁特征为先前用户

实施例:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
    if(oldVersion != 0 and oldVersion <= 34){ 
     appConf.unlockAllFeatures() 
    } 
} 
  • 如果应用程序不使用数据库,在onCreate中执行,但请注意,在第一次调用数据库时调用onCreate
2

你可以保留付费您免费/ IAB版本,但它们基础上都相同的库项目,这样你就必须只有一套源文件的维护。图书馆项目可以解锁目前付费用户可用于付费版本的所有功能(例如通过测试应用程序的软件包名称激活),并且只有在通过IAB付款后才能解锁免费版本的相同功能。

这也可以让您向付费版本的用户收取除付费应用程序之外的附加功能的附加功能,如果您将来添加一些真正意义上的功能并且想要额外收费这些金额。

它还有一个好处,就是你现在的付费用户根本不用做任何事情;对他们来说,似乎没有发生变化。尤其是,他们不必安装免费/ IAB应用程序,或者通过任何特殊的授权程序。

缺点是你将不得不为每个版本构建和上传两个项目。但是,这可能会部分自动化。

+0

只是注意到你的问题是2012年!这里的其他一些答案是从2013年开始的,所以我错过了这一点。希望你已经解决了你的问题;也许这个答案会帮助别人。 – Carl 2013-01-19 13:04:57

4

发布一个单独的免费版本的应用程序;使用付费版本,就好像它是免费版的许可证密钥一样。

PackageManager manager = getPackageManager(); 
if (manager.checkSignatures("old.package.name", "new.package.name") 
    == PackageManager.SIGNATURE_MATCH) { 
    //full version 
} 
+0

这是最简单的解决方案。天才! – hunterp 2013-11-14 22:40:30

+1

这是一个简单的解决方案,但是它不需要用户安装旧付费应用程序,即使他们不再使用它了吗? – 2014-07-30 07:42:08

+0

如果用户安装了付费应用程序,那么您可以运行一次检查,然后将结果存储在持久性存储中,以便后续运行免费应用程序时始终运行完整版本。完成后,您可以向用户显示一个对话框,告诉他们卸载付费版本。 – donturner 2015-07-15 20:38:35

相关问题