【问题标题】:Android upgrading free app to paid app using sharedUserIdAndroid 使用 sharedUserId 将免费应用升级为付费应用
【发布时间】:2010-06-01 16:12:26
【问题描述】:

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

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

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

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

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

有人吗?看来一定有人遇到过类似的情况并找到了解决办法?

【问题讨论】:

    标签: android android-manifest


    【解决方案1】:

    我的解决方案是在免费应用中使用简单的Content Provider 公开数据,与完整应用共享密码以避免安全漏洞。

    免费应用: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();
            }
        }
    

    【讨论】:

    • 您包含的链接给出了404。请直接将相关信息添加到您的答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2013-10-30
    • 1970-01-01
    相关资源
    最近更新 更多