簡體   English   中英

java 中是否支持應用內更新 android 示例

[英]is there a support in-app updates android example in java

我嘗試了在 github 上找到的這些庫,但沒有主題真的有效如何測試更新是否真的有效?

我發現這篇文章解決了這個問題,以明確我將編寫class代碼並記住有兩種方法可以實現應用內更新:立即和靈活。

1 實施 'com.google.android.play:core:1.10.3'

2.1 如果您將使用靈活的方法,請將 class 名稱替換為您的示例“MainActivity”

在此處輸入圖像描述

public class Flexible extends AppCompatActivity {
private AppUpdateManager appUpdateManager;
private InstallStateUpdatedListener installStateUpdatedListener;
private static final int FLEXIBLE_APP_UPDATE_REQ_CODE = 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_update_f);
    appUpdateManager = AppUpdateManagerFactory.create(getApplicationContext());
    installStateUpdatedListener = state -> {
        if (state.installStatus() == InstallStatus.DOWNLOADED) {
            popupSnackBarForCompleteUpdate();
        } else if (state.installStatus() == InstallStatus.INSTALLED) {
            removeInstallStateUpdateListener();
        } else {
            Toast.makeText(getApplicationContext(), "InstallStateUpdatedListener: state: " + state.installStatus(), Toast.LENGTH_LONG).show();
        }
    };
    appUpdateManager.registerListener(installStateUpdatedListener);
    checkUpdate();
}

private void checkUpdate() {

    Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

    appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
            startUpdateFlow(appUpdateInfo);
        } else if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
            popupSnackBarForCompleteUpdate();
        }
    });
}

private void startUpdateFlow(AppUpdateInfo appUpdateInfo) {
    try {
        appUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.FLEXIBLE, this, Flexible.FLEXIBLE_APP_UPDATE_REQ_CODE);
    } catch (IntentSender.SendIntentException e) {
        e.printStackTrace();
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == FLEXIBLE_APP_UPDATE_REQ_CODE) {
        if (resultCode == RESULT_CANCELED) {
            Toast.makeText(getApplicationContext(), "Update canceled by user! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_OK) {
            Toast.makeText(getApplicationContext(),"Update success! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "Update Failed! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
            checkUpdate();
        }
    }
}

private void popupSnackBarForCompleteUpdate() {
    Snackbar.make(findViewById(android.R.id.content).getRootView(), "New app is ready!", Snackbar.LENGTH_INDEFINITE)

            .setAction("Install", view -> {
                if (appUpdateManager != null) {
                    appUpdateManager.completeUpdate();
                }
            })
            .setActionTextColor(getResources().getColor(R.color.purple_500))
            .show();
}

private void removeInstallStateUpdateListener() {
    if (appUpdateManager != null) {
        appUpdateManager.unregisterListener(installStateUpdatedListener);
    }
}

@Override
protected void onStop() {
    super.onStop();
    removeInstallStateUpdateListener();
}}

2.1 如果您將使用即時方法,請將 class 名稱替換為您的示例“MainActivity”

在此處輸入圖像描述

public class Immediate extends AppCompatActivity {

private AppUpdateManager appUpdateManager;
private static final int IMMEDIATE_APP_UPDATE_REQ_CODE = 124;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_update_f);
    appUpdateManager = AppUpdateManagerFactory.create(getApplicationContext());
    checkUpdate();
}

private void checkUpdate() {

    Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

    appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
            startUpdateFlow(appUpdateInfo);
        } else if  (appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS){
            startUpdateFlow(appUpdateInfo);
        }
    });
}

private void startUpdateFlow(AppUpdateInfo appUpdateInfo) {
    try {
        appUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.IMMEDIATE, this, Immediate.IMMEDIATE_APP_UPDATE_REQ_CODE);
    } catch (IntentSender.SendIntentException e) {
        e.printStackTrace();
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == IMMEDIATE_APP_UPDATE_REQ_CODE) {
        if (resultCode == RESULT_CANCELED) {
            Toast.makeText(getApplicationContext(), "Update canceled by user! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_OK) {
            Toast.makeText(getApplicationContext(), "Update success! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "Update Failed! Result Code: " + resultCode, Toast.LENGTH_LONG).show();
            checkUpdate();
        }
    }
}}

3 如何測試? 請按照所有步驟

3.1 生成簽名的應用包/APK。 請注意,APK 簽名密鑰和 applicationId 應與已發布的應用程序相同。

3.2 與測試人員共享生成的 APK。 為此,select 在 Google 控制台中發布的應用程序,導航到Internal App Sharing ,然后將生成的 APK 上傳到那里。 查看如何使用Google Internal App Sharing

3.3 復制上傳的共享鏈接並與測試人員共享。 在這種情況下,測試人員應該有一個 Android 手機。

3.4 在手機瀏覽器上打開共享鏈接。 您將被重定向到 Play 商店。

3.5 下載應用程序並等待安裝完成。

3.6 完成后,生成另一個簽名的 app bundle/APK。 這次將 app.gradle 文件中的 versionCode 和 versionName 更改為更高版本

3.7 生成 app bundle/APK 后,前往 App Internal Sharing 並上傳。

3.8 再次,復制此上傳生成的可共享鏈接,並用測試人員打開。 當鏈接在 Google Play 商店啟動時,您會看到一個更新按鈕,不要點擊更新。

3.9 關閉 Google Play 商店並打開我們之前安裝的應用程序。 這將啟動一個更新 UI,提示您更新應用程序。 UI 可能會根據您的更新類型(靈活或即時)而有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM