2

現在、有料アプリを市場に出しています。ここで、ユーザーが最初に試せる無料アプリを提供したいと思います。また、有料アプリにアップグレードすると、無料アプリのユーザーが作成したデータが確実に表示されるようにしたいと考えています。

Android のドキュメントを調べたところ、マニフェストで sharedUserId を使用するとうまくいくようです。

私が発見した問題は、バージョン 2 の有料アプリのマニフェストに sharedUserId を配置すると、データが sharedUserId を持つ新しいアプリに表示されなくなるため、古いバージョン (バージョン 1) が機能しないことです。バージョン 1 では、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 に答える