gpt4 book ai didi

Android 使用 sharedUserId 将免费应用升级为付费应用

转载 作者:行者123 更新时间:2023-11-29 14:16:27 28 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

我的解决方案是使用简单的 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;
}

}

付费应用:主要 Activity

    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();
}
}

关于Android 使用 sharedUserId 将免费应用升级为付费应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2951418/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com