ユーザーが無料版から有料版にアップグレードするときに、無料アプリと有料アプリの間でデータを共有する方法
これは、次のようなあらゆる種類の問題を伴う非常に一般的な問題です。
- ユーザーが有料アプリをインストールして実行すると、すべてのユーザー データが無料アプリからコピーされます。
- ユーザーが有料アプリへのアップグレードを完了した後に無料アプリを使用しようとすると、自動的に有料アプリにリダイレクトされます。
- ユーザーが有料アプリを削除した場合、無料アプリは以前と同様に引き続き機能することを許可する必要があります。
最も簡単な解決策は、ユーザー設定ではなく、データベースで共有する必要があるすべてのデータを維持することです。その後、有料アプリを初めて実行するときに、データベース ファイルを文字通り無料アプリから有料アプリにコピーできます。
いずれかのアプリのみ、または両方のアプリが同時にインストールされるという特別なユース ケース条件があるため、これはコンテンツ プロバイダーよりもうまく機能することがわかりました。
このシステムが機能するためには、いくつかの主要なツールを用意する必要があります。
- アプリは、実行時に相互にインストールされているかどうかを検出できる必要があります。
- アプリは、対応するアプリがデータベース ファイルを保存する場所を認識している必要があります。
- 何が起こったかを示すために、いくつかのフラグをデータベース ファイルに保存する必要があります。
他のアプリがインストールされているかどうかを確認する方法:
final String packageName = "com.company.other-app-name";
android.content.pm.PackageManager pm = getPackageManager();
PackageInfo info = pm.getPackageInfo(packageName, 0);
info==null
または aNameNotFoundException
がスローされた場合、アプリはインストールされていません。
データベースファイルをコピーする方法:
データベース ファイルは次のように保存されます。
paidDb = "/data/data/<paid-app-package-name>/databases/<db-name>.db"
freeDb = "/data/data/<free-app-package-name>/databases/<db-name>.db"
コピー関数は、これらのファイルのオブジェクトを開いFileInputStream
て、次のような標準的な方法でコピーする必要があります。FileOutputStream
while ((length = fis.read(buffer))>0) {
fos.write(buffer, 0, length);
}
これにより、有料アプリが無料アプリがインストールされているかどうかを判断できるようにするために必要なすべてのツールが提供され、インストールされている場合はデータベースをコピーしてそこから続行できます。無料アプリは、有料アプリがインストールされているかどうかを確認する必要があります。その場合は、わかりやすい警告で終了するか、次のように有料アプリにリダイレクトします。
android.content.pm.PackageManager pm = getPackageManager();
final Intent intent = pm.getLaunchIntentForPackage(packageName);
startActivity( intent );
finish();
オプションの無料アプリの削除:
有料アプリが無料アプリを検出してデータベースをコピーしたら、オプションで、次のようにユーザーに無料アプリを削除するように依頼できます。
Uri uri = Uri.parse("package:<free-app-package-name>");
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
startActivityForResult(intent, REQUEST_CODE_UNINSTALL_FREE_APP);
注: ユーザーが要求どおりに無料アプリを実際にアンインストールすることを保証することはできません。この値REQUEST_CODE_UNINSTALL_FREE_APP
は、有料アプリのアンインストーラーから戻ったときにonActivityResult()
、ユーザーが削除を完了したかどうかを確認できるようにするために使用されます。次に、アンインストールが行われなかった場合は、通常の「よろしいですか?」と尋ねます。または「再試行しますか?」ダイアログを表示するか、彼にすべての厳格さを取得し(推奨されません)、新しい有料アプリの使用を継続できるようにする前に、アンインストールを強制的に終了させます.
さらなる考慮事項: