web-dev-qa-db-ja.com

Android Playストアで新しいバージョンのアプリが利用可能になったときにアプリを強制的に更新する

私はプレイストアにアプリを持っていました。 Playストアで新しいアップデートが利用可能になったときに、ユーザーがアプリを使用しようとすると、アプリをアップデートするためのポップアップが表示されるはずです。また、アプリを更新しない場合は、アプリを閉じる必要があります。例:引き続き使用するために、ユーザーにアプリの更新を強制したい。

9
Neerav Shah

私の知る限り、Google PlayはこのためのAPIを提供していないため、手動で確認する必要があります。

ただし、ユーザーに最新リリースでの更新を強制する方法を説明できます。

  1. 1つの方法は、ユーザーにプッシュ通知を送信することです。通知を受信すると、ユーザーをプレイストアにリダイレクトします。

  2. 2番目の方法は長くなりますが、これは適切な確実な方法です。アプリの最新バージョンを保存するサーバー上でWebサービスを作成します。アプリが実行されるたびに、

    • MainActivityで、Webサービスにリクエストを投稿し、アプリのバージョンが最新かどうかを確認します
    • 最新バージョンでない場合は、Webサービスの応答で、ユーザーをプレイストアにリダイレクトできます。
6
Jeffy Lazar

更新を直接強制する必要はありません。更新をプッシュアウトすると、Playストアは実際にユーザー向けにアプリケーションを自動的に更新します。権限を変更しない限り、ユーザーは何もする必要はありません。

Playストアにそれ自体を任せることを絶対にお勧めします...しかし、私は1つのアプリで同様のことをしました。

このようなものは、Playストアの更新日とバージョンを教えてくれるはずです:

SimpleDateFormat formatter = Dates.getSimpleDateFormat(ctx, "dd MMMM yyyy");
String playUrl = "https://play.google.com/store/apps/details?id=" + appPackageName;
RestClient restClient = /* Some kind of rest client */

try {
    String playData = restClient.getAsString(playUrl);
    String versionRaw = findPattern(playData, "<([^>]?)*softwareVersion([^>]?)*>([^<]?)*<([^>]?)*>");
    String updateRaw = findPattern(playData, "<([^>]?)*datePublished([^>]?)*>([^<]?)*<([^>]?)*>");
    Date updated = formatter.parse(updateRaw.replaceAll("<[^>]*>", "").trim());
    String version = versionRaw.replaceAll("<[^>]*>", "").trim();

    _currentStatus = new PlayStatus(version, updated, new Date());
} catch (Exception e) {
    _currentStatus = new PlayStatus(PlayStatus.UNKNOWN_VERSION, new Date(0), new Date(0));
}

私のPlayStatusクラスには次のようなメソッドがありました。

    public boolean hasUpdate() {
        int localVersion = 0;
        int playVersion = 0;

        if (! versionString.equals(UNKNOWN_VERSION)) {
            localVersion = Integer.parseInt(BuildConfig.VERSION_NAME.replace(".",""));
            playVersion = Integer.parseInt(versionString.replace(".",""));
        }

        return (playVersion > localVersion);
    }

明らかにアプリを直接更新することはできませんが、バージョンが古くなっていると判断した場合は、Playストアに移動するインテントをユーザーに提示できます。

public static void updateApp(final Activity act) {
    final String appPackageName = BuildConfig.APPLICATION_ID;
    AlertDialog.Builder builder = new AlertDialog.Builder(act);
    builder
            .setTitle(act.getString(R.string.dialog_title_update_app))
            .setMessage(act.getString(R.string.dialog_google_credentials_message))
            .setNegativeButton(act.getString(R.string.dialog_default_cancel), null)
            .setPositiveButton(act.getString(R.string.dialog_got_it), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    try {
                        act.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
                    } catch (ActivityNotFoundException anfe) {
                        act.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName;)));
                    }
                }
            });
    AlertDialog dialog = builder.create();
    dialog.show();
}

これはAPI21に対してコンパイルされたと思うので、22にはいくつかの小さな調整があるかもしれません。

4
Crias

GooglePlayストアでアプリの新しいバージョンが公開されたことを知るのに役立つクラスを作成しました。

このクラスを使用すると、次のような非常に単純なものを実装できます。

new CheckNewAppVersion(yourContext).setOnTaskCompleteListener(new CheckNewAppVersion.ITaskComplete() {
    @Override
    public void onTaskComplete(CheckNewAppVersion.Result result) {

        //Checks if there is a new version available on Google PlayStore.
        result.hasNewVersion();

        //Get the new published version code of the app.
        result.getNewVersionCode();

        //Get the app current version code.
        result.getOldVersionCode();

        //Opens the Google Play Store on your app page to do the update.
        result.openUpdateLink();
    }
}).execute();

ここからクラスをダウンロード そしてプロジェクトで使用できます。基本的には、 Jsoup libを使用して、GooglePlayストアページにリクエストを送信して実際のバージョンを公開します。

1
Vansuita Jr.

次のようにプログラムでマニフェストからバージョン番号とバージョンコードを取得します。

String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;

または

int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;

共有設定でアプリにそれらを追加します。ユーザーがアプリを開くたびに、現在のバージョンコードと前のバージョンコードを確認します。一致する場合は、ユーザーにアプリを使用させます。ただし、一致しない場合は、ポップアップを表示して質問します。アプリを更新するユーザー。

0
kgandroid