2012-01-04 46 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

相關問題