2

我目前在市场上有一个付费应用程序。现在我想提供一个免费的应用程序供用户首先试用。我还希望能够确保免费应用用户创建的数据在升级到付费应用后可见。

浏览了 Android 文档后,似乎在 Manifest 中使用 sharedUserId 是可行的。

我发现的问题是,如果我将 sharedUserId 放在版本 2 的付费应用程序的清单中,那么它的旧版本(版本 1)将无法工作,因为数据对于具有 sharedUserId 的新应用程序不再可见。请注意,在版本 1 中,我没有实现 sharedUserId。

所以现在我想知道我是否可以实施另一种解决方法,以便:a) 付费应用程序的旧版本(没有 sharedUserId)仍然可以与新版本(使用 sharedUserId)一起使用。

b) 从免费版本到付费版本的升级路径将包括保持可见的数据。

任何人?似乎有人遇到过类似的情况并找到了解决方案?

4

1 回答 1

-1

我的解决方案是使用免费应用程序中的简单内容提供程序公开数据,与完整应用程序共享密码以避免安全漏洞。

免费应用程序:AndroidManifest.xml

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

免费应用程序: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();
        }
    }
于 2010-11-22T17:52:19.823 回答