2012-01-04 47 views
2

我是Android开发新手(我知道非常基本的东西),并且很快有机会我将负责将WP7应用移植到Android(幸运的是,我可以使用MonoDroid ...)。在Android应用中可能出现类似试验的行为

现在,该应用程序具有试用功能(see here),WP7意味着我可以检查用户是否购买了它(因此我可以在应用程序内部启用其他功能)或下载免费版本。我不希望试用版过期,我希望我的应用的“免费版”仅限于某些功能。

有没有类似Android的东西?(并且可以在MonoDroid上完成吗?)

我已看过Google授权服务,但我看不出如何帮助我。

+0

对你的第一个评论不存储它在服务器上存储它在本地数据库文件中的设备和基于解锁应用程序功能的情况下,用户重新安装应用程序,然后检查应用程序,如果它已经购买商店的值再次在本地db – ingsaurabh 2012-01-04 12:18:25

回答

1

我会去的两个应用程序的解决方案。一个“真实”应用程序,其中包含所有功能。第二“关键”应用程序,它只检查许可。

第一个应用程序将检查是否安装了密钥应用程序。如果检查结果为肯定,则显示完整内容,启用所有功能。如果关键应用程序缺失,则应用程序的行为与免费版本相似。

检查签署两个应用程序的私钥是否相同也是非常重要的。没有这个检查的人可能会创建自己的密钥应用程序并解锁您的功能。这样做的考虑这个片段中,这是我从这个博客了:http://www.yoki.org/2010/07/31/creating-a-freepaid-app-pair-for-the-android-market/

protected boolean isProInstalled(Context context) { 
    // the packagename of the 'key' app 
    String proPackage = "org.yoki.android.pkgname"; 

    // get the package manager 
    final PackageManager pm = context.getPackageManager(); 
    // get a list of installed packages 
    List<PackageInfo> list = 
     pm.getInstalledPackages(PackageManager.GET_DISABLED_COMPONENTS); 

    // let's iterate through the list 
    Iterator<PackageInfo> i = list.iterator(); 
    while(i.hasNext()) { 
    PackageInfo p = i.next(); 
    // check if proPackage is in the list AND whether that package is signed 
    // with the same signature as THIS package 
    if((p.packageName.equals(proPackage)) && 
     (pm.checkSignatures(context.getPackageName(), p.packageName) == PackageManager.SIGNATURE_MATCH)) 
     return true; 
    } 
    return false; 
} 

这种方法为您提供了灵活一些优势:

  • 独立支付领域。您可以将多组功能分配给不同的应用程序。例如。应用程序密钥1解锁附加游戏等级a1,a2,a3和应用程序密钥2解锁等级b1,b2
  • 时间许可 - 而不是仅检查是否存在密钥应用程序。您可以查询它以检查许可证是否仍然有效。这样你可以获得时间许可证。
1

可能是你最好的办法是使用in-app purchases

+0

因此,我免费发布应用程序,如果他们“升级”的应用程序中,我注意到我的服务器上,他们可以使用高级功能,每次他们想要访问该功能,我检查在线?有没有离线方式? (如果我只是写一个文件,是什么阻止他们手动创建该文件?) – TDaver 2012-01-04 11:10:33

+0

是的,你发布它是免费的,他们升级他们的应用程序。您不需要自己的服务器,因为它将与他们的Google帐户一起存储。 您必须将购买的商品存储在数据库中,这样用户每次使用应用程序时都不必上网。 但是,如果用户重新安装应用程序,购买不会丢失,所以他们不必再次购买。 – Force 2012-01-04 11:24:28

+0

1.存储该数据库的位置? SQLite数据库不会被我的应用程序删除吗? 2。如果我确实有一台服务器(用于购买以外的其他目的),如果某个人购买了我的升级服务,我可以“问”谷歌吗? – TDaver 2012-01-04 11:30:01

相关问题