9

私のアプリケーションには、無料版とプロ版の 2 つのバージョンがあり、アプリ データのコンテンツ プロバイダーは 2 つの間で共有する必要があります。

以下の点に留意して設計する必要があります。

可能な解決策:

  • 2 つのコンテンツ プロバイダーを作成します。1 つは無料版で作成され、もう 1 つはプロ バージョンで作成されます。
  • プロ版初回起動時、無料版にデータがあればプロ版にコピー
  • 無料版またはプロ版でデータが書き込まれるたびに、別のバージョンのコンテンツ プロバイダーが存在するかどうかを確認し、存在する場合は両方のコンテンツ プロバイダーに書き込む必要があります。
  • android:protectionLevel 属性を「signature」に設定して、両方のバージョンが両方のコンテンツ プロバイダにアクセスできるようにします。

これが理にかなっており、共有コンテンツ プロバイダに関するベスト プラクティスに従っているかどうかをお知らせください。これを行う他の方法を共有してください。

4

3 に答える 3

4

だからここに私がやったことは次のとおりです:

  • バージョンごとに2つの別々のコンテンツプロバイダーを作成し(それぞれが別々の権限を持つ)、それらを一意に宣言しました
  • 「android:exported」「true」に設定して、アプリ間でコンテンツプロバイダーデータを共有できるようにします
  • データへのアクセスを制限するために、各コンテンツプロバイダーに(読み取り+書き込みアクセス権を持つ)カスタムアクセス許可を定義しました
  • 権限の定義ごとに、「android:protectionLevel」属性を「signature」に定義して、アプリケーションが暗黙的かつ安全に相互に通信できるようにしました。
  • どのバージョンでも、uses-permission android:name = "MY_CUSTOM_PERMISSION要素を使用して、他のバージョンのコンテンツプロバイダーにアクセスするように明示的に要求します。

結果:

  • 両方のバージョンが安全かつ暗黙的に相互にコンテンツプロバイダーにアクセスできるようになりました
  • 有料版が起動すると、無料版から有料版にすべてのデータをサイレントにコピーして、シームレスな使用に備えます
于 2013-03-07T12:11:15.420 に答える
4

私は市場に 3 つのアプリを持っており、それぞれに無料版と有料版があります。特定のアプリについて、無料プロジェクトと有料プロジェクトの両方から参照される Android 共有ライブラリ プロジェクトに 100% コードがあります。これらの無料および有料の Android プロジェクトは単なるダミー プロジェクトであり、その AndroidManifest.xml にのみ役立ちます。

一部の機能を有効/無効にしたい場合は、パッケージ名に基づいて共有ライブラリに関連するチェックをいつでも追加できます。

コード (共有ライブラリ内) では、無料または有料を区別し、呼び出し元のパッケージに基づいて機能を有効/無効にすることができます。

if ("com.example.paid".equals(context.getPackageName()) {
    //enable pro version features
}

似たようなことはできませんか?これにより、メンテナンスのオーバーヘッドを大幅に節約できます。

于 2013-03-07T06:39:15.827 に答える
1

ちょうど私の考え。

無料版と有料版の両方をデバイスにインストールする必要は本当にあるのでしょうか? そうでない場合は、ユーザーが最初に有料版を起動したときに、無料から有料へのコピー機能を提供するだけです。その後、ユーザーは無料版を削除して、有料版のみを使用できます。

アプローチはいいです。しかし、私はそれには1つの問題があります。

コンテンツ プロバイダーが時間の経過とともに変化するとどうなりますか? いくつかのフィールドを追加して、コンテンツ プロバイダーを強化することにしたとします。その後、ユーザーは両方のバージョンをアップグレードして、データが正しく書き込まれるようにする必要があります。

両方のコンテンツ プロバイダーは今後も変わりませんか? 有料版の方がより多くの機能を備えていると判断した場合、より多くのデータが取得されます。

于 2013-03-07T00:30:31.193 に答える