web-dev-qa-db-ja.com

Google Playまたはサイドロードからアプリケーションがインストールされていることを知る方法は?

Google Playまたは他の市場からアプリケーションがインストールされていることを検出する必要がありますが、この情報を取得するにはどうすればよいですか?

52
ttom

PackageManagerクラスは、指定したパッケージをインストールしたもののパッケージ名を通知する getInstallerPackageName メソッドを提供します。サイドロードアプリには値が含まれません。

[〜#〜] edit [〜#〜]:注意してください@mttmllns ' 以下の回答 Amazonアプリストアに関して。

50
MattC

そしてFYI 明らかに Amazonストアの最新バージョンは最終的に PackageManager.getInstallerPackageName()"com.Amazon.venezia"また、Google Playの"com.Android.vending"

24
mttmllns

このコードを使用して、ビルドがストアからダウンロードされたか、サイドロードされたかを確認します。

public static boolean isStoreVersion(Context context) {
    boolean result = false;

    try {
        String installer = context.getPackageManager()
                                    .getInstallerPackageName(context.getPackageName());
        result = !TextUtils.isEmpty(installer);
    } catch (Throwable e) {          
    }

    return result;
}

コトリン:

  fun isStoreVersion(context: Context) =
    try {
      context.packageManager
        .getInstallerPackageName(context.packageName)
        .isEmpty()
    } catch (e: Throwable) {
      false
    }
18
Philipp E.

サイドロードアプリの特定と制限を検討している場合。 Googleは、問題を特定するためのソリューションを考案しました。

以下のようにフォローできます

プロジェクトのbuild.gradle

buildscript {
 dependencies {
  classpath 'com.Android.tools.build:bundletool:0.9.0'
 }
}

Appモジュールのbuild.gradle

implementation 'com.google.Android.play:core:1.6.1'

Applicationを拡張するクラス:

public void onCreate() {
if (MissingSplitsManagerFactory.create(this).disableAppIfMissingRequiredSplits()) {
    // Skip app initialization.
    return;
}
super.onCreate();
.....

}

この統合により、Googleは、不足している分割apkがあるかどうかを自動的に識別し、「Installation failed」というポップアップを表示し、PlayストアのダウンロードにもリダイレクトしますユーザーがGoogle Playストア経由でアプリを適切にインストールできる画面。

詳細は link をご覧ください。

お役に立てれば。

2
Naveen T P