2010-06-01 181 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

相关问题