2010-06-01 175 views
2

我目前在市場上有付費應用。現在我想爲用戶提供一個免費的應用程序來首先嚐試。我還希望能夠確保免費應用程序的用戶創建的數據在升級到付費應用程序後可以看到。Android使用sharedUserId將免費應用升級到付費應用

通過Android文檔,似乎在Manifest中使用sharedUserId會起作用。

我發現的問題是,如果我將sharedUserId放在付費應用程序版本2的清單中,那麼它的舊版本(版本1)將不起作用,因爲數據不再可用於新應用程序sharedUserId。請注意,在版本1中,我沒有實現sharedUserId。

所以現在我想知道是否有另一個解決方法,我可以實現以便: a)付費應用程序的舊版本(沒有sharedUserId)仍然可以使用新版本(使用sharedUserId)。 b)從免費版本到付費版本的升級路徑將包括保持可見的數據。

有人嗎?似乎有人必須遇到類似的情況並找到解決辦法?

回答

-1

我的解決方案是在免費應用程序中使用簡單的Content Provider公開數據,與完整應用程序共享密碼以避免安全漏洞。

免費應用程序:AndroidManifest.xml中

<provider android:name="MY_PACKAGE.PrefProvider" android:authorities="MY_PACKAGE.prefprovider" /> 

免費APP:PrefProvider.java

public class PrefProvider extends ContentProvider { 

    public Cursor query(Uri uri, String[] projection, String selection, 
      String[] selectionArgs, String sortOrder) { 
     if (! selection.equals(MY_SECRET)) { 
      return null; //Wrong shared secret 
     } 
     MatrixCursor prefs = new MatrixCursor(new String[] {"field1", "field2", "field3"});   
     MatrixCursor.RowBuilder rb = prefs.newRow(); 
     rb.add(settings.getString("field1", "")); 
     rb.add(settings.getString("field2", "")); 
     rb.add(settings.getString("field3", ""));  
     return prefs; 
    } 

} 

付費應用:主要活動

if (isFirstTime) { 
     // Is the first time that the full version is being launched 
     Cursor cursor = act.getContentResolver().query(Uri.parse("content://MY_PACKAGE.prefprovider"), null, providerKey, null, null); 
     if (cursor != null && cursor.moveToFirst() != false) { // non empty cursor, the free app is installed 
      field1 = cursor.getString(0); 
      field2 = cursor.getString(1); 
      field3 = cursor.getString(2); 
      cursor.close(); 
     } 
    } 
+0

李您包括的nk給出了404.請直接將相關信息添加到您的答案中。 – 2013-01-11 17:40:36

相關問題