Android обновляет бесплатное приложение до платного с помощью sharedUserId - PullRequest
2 голосов
/ 01 июня 2010

У меня есть платное приложение на рынке в настоящее время. Теперь я хочу предоставить бесплатное приложение для пользователей, чтобы попробовать в первую очередь. Я также хочу убедиться, что данные, созданные пользователями бесплатного приложения, будут видны после их обновления до платного приложения.

Изучив документы по Android, похоже, что использование sharedUserId в Manifest будет работать.

Проблема, которую я обнаружил, заключается в том, что если я добавлю sharedUserId в Манифест платного приложения версии 2, то его более старая версия (версия 1) не будет работать, поскольку данные больше не видны новому приложению с sharedUserId , Обратите внимание, что в версии 1 я не реализовал sharedUserId.

Так что теперь мне интересно, есть ли другой обходной путь, который я могу реализовать, чтобы: a) старая версия (без sharedUserId) платного приложения будет по-прежнему работать с новой версией (с sharedUserId).

b) путь обновления с бесплатной версии до платной будет включать данные, оставшиеся видимыми.

Кто-нибудь? Похоже, что кто-то сталкивался с подобной ситуацией и нашел решение?

1 Ответ

0 голосов
/ 22 ноября 2010

Мое решение состоит в том, чтобы предоставить данные с помощью простого 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();
        }
    }
...