3

アプリが Amazon Android アプリストアまたは Google Play 経由でインストールされたかどうかを実行時に判断するための推奨されるベスト プラクティスは何ですか? アプリを入手できるアプリストアごとに個別の APK を生成することは避けたいと考えています。

私の推奨するアプローチは、PackageManger.getInstallerPackageName を使用することです。

Android API ドキュメントによると、これはまさに私が探しているものです: パッケージをインストールしたアプリケーションのパッケージ名を取得します。これは、パッケージがどの市場から来たかを識別します。

残念ながら、Amazon アプリストア (KF を含む) 経由でインストールされたアプリは、ユーザーが手動で APK をインストールした場合にのみ予想される null を返すようです。

他に方法があれば誰か教えてください。

4

1 に答える 1

4

null を返す問題は別として、getInstallerPackageName()改ざんされて不正確な情報が返される可能性があります。

私はこれを長い間調べてきましたが、私が思いついた最善の解決策は、その情報を含む定数ファイルを用意することでした:

public class Constants {

    public static final int GOOGLE_PLAY = 0;
    public static final int AMAZON = 1;
    public static final int BUILT_FOR = GOOGLE_PLAY;
}

AMAZONこのファイルの代わりに使用GOOGLE_PLAYし、アプリ ストアごとに一度 apk をビルドします。

コードの他の場所で、次を使用してこれを確認できます。

if(Constants.BUILT_FOR == Constants.GOOGLE_PLAY) {
    //Google Play build
}

if(Constants.BUILT_FOR == Constants.AMAZON) {
    //Amazon Build
}
于 2013-01-19T11:43:13.070 に答える