天天看點

Android 蒲公英APP更新

之前用蒲公英更新的時候遇到過一些坑,導緻花了不少時間,現記錄下來,便于自己和他人有更容易的認識和運用

蒲公英資料位址:https://www.pgyer.com/doc/view/new_sdk_android_guide

我使用的是Android Studio aar配置

一、配置

(1)project 的build.gradle下添加 

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://raw.githubusercontent.com/Pgyer/mvn_repo_pgyer/master" }
    }
}      

(2)model 的build.gradle下添加

implementation 'com.pgyersdk:sdk:3.0.5'      

(3)AndroidManifest.xml清單檔案中添權重限和aar配置

權限:

<!-- 必選-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 擷取網絡狀态 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 網絡通信-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />  <!-- 擷取裝置資訊 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 擷取MAC位址-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 讀寫sdcard,storage等等 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 允許程式錄制音頻 -->
<uses-permission android:name="android.permission.GET_TASKS"/>

<!-- 可選-->
<uses-permission android:name="android.permission.READ_LOGS"
    tools:ignore="ProtectedPermissions" /> <!-- 擷取logcat日志 -->      

aar配置添加在application中,和activity同級,APPID需要上傳APP到蒲公英上,系統自動配置設定。是以需要先打包上傳APP,你才有APPID:

<meta-data
    android:name="PGYER_APPID"
    android:value="你的APPID" >
</meta-data>      

二、使用

(1)申請權限

使用APP更新需要有WRITE_EXTERNAL_STORAGE權限,6.0以上需要動态申請,不然會一直提示更新失敗

具體參考我另一篇:https://blog.csdn.net/qq_26446715/article/details/95482706

(2)實作版本檢測和更新

/** 新版本 **/
new PgyUpdateManager.Builder()
        .setForced(true)                //設定是否強制提示更新,非自定義回調更新接口此方法有用
        .setUserCanRetry(false)         //失敗後是否提示重新下載下傳,非自定義下載下傳 apk 回調此方法有用
        .setDeleteHistroyApk(false)     // 檢查更新前是否删除本地曆史 Apk, 預設為true
        .setUpdateManagerListener(new UpdateManagerListener() {
            @Override
            public void onNoUpdateAvailable() {
                //沒有更新是回調此方法
                Log.d("pgyer", "there is no new version");
            }
            @Override
            public void onUpdateAvailable(AppBean appBean) {
                //有更新回調此方法
                Log.d("pgyer", "there is new version can update"
                        + "new versionCode is " + appBean.getVersionCode());
                //調用以下方法,DownloadFileListener 才有效;
                //如果完全使用自己的下載下傳方法,不需要設定DownloadFileListener
                PgyUpdateManager.downLoadApk(appBean.getDownloadURL());
            }

            @Override
            public void checkUpdateFailed(Exception e) {
                //更新檢測失敗回調
                //更新拒絕(應用被下架,過期,不在安裝有效期,下載下傳次數用盡)以及無網絡情況會調用此接口
                Log.e("pgyer", "check update failed ", e);
            }
        })
        //注意 :
        //下載下傳方法調用 PgyUpdateManager.downLoadApk(appBean.getDownloadURL()); 此回調才有效
        //此方法是友善使用者自己實作下載下傳進度和狀态的 UI 提供的回調
        //想要使用蒲公英的預設下載下傳進度的UI則不設定此方法
        .setDownloadFileListener(new DownloadFileListener() {
            @Override
            public void downloadFailed() {
                //下載下傳失敗
                Log.e("pgyer", "download apk failed");
            }

            @Override
            public void downloadSuccessful(Uri uri) {
                Log.e("pgyer", "download apk success");
                // 使用蒲公英提供的安裝方法提示使用者 安裝apk
                PgyUpdateManager.installApk(uri);
            }

            @Override
            public void onProgressUpdate(Integer... integers) {
                //下載下傳的進度
                Log.e("pgyer", "update download apk progress" + integers[0]);
            }})
        .register();      

the end!