騰訊Bugly 自定義更新Dialog
在開發專案的過程中,為了解決App的崩潰問題以及快速解決線上版本出現嚴重Bug的需求,我們在專案中接入了騰訊的Bugly,在更新提示時我們可以選擇自定義的樣式,我們專案裡自定義的樣式如下圖所示:
下面介紹一下主要的整合過程,步驟以及主要事項:
1.準備工作:
首先要去騰訊的Bugly,註冊bugly賬號以及新增產品,主要過程是在https://bugly.qq.com 這個網址直接用qq登入,然後點選右上角-我的產品,如果沒有新增過產品的話,點選"使用者名稱",選擇"我的App"
2.接入指南:
在Module的buid.gradle檔案中新增依賴和屬性配置:
android { defaultConfig { ndk { //設定支援的SO庫架構 abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a' } } } dependencies { //註釋掉原有bugly的倉庫 // compile 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新版本號,也可以指定明確的版本號,例如1.2.9 compile 'com.tencent.bugly:crashreport_upgrade:latest.release' // 其中latest.release指代最新版本號,也可以指定明確的版本號,例如1.0.0 }
注意:
內測SDK已經整合crash上報功能,已經整合Bugly的使用者需要註釋掉原來Bugly的jcenter庫;
自動整合時會自動包含Bugly SO庫,建議在Module的build.gradle檔案中使用NDK的“abiFilter”配置,設定支援的SO庫架構。
如果在新增“abiFilter”之後Android Studio出現以下提示:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.
則在專案根目錄的gradle.properties檔案中新增:
android.useDeprecatedNdk=true
3.引數配置
接入Bugly後,在AndroidManifest.xml中新新增如下許可權:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<!--儲存資源到SD卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
請避免混淆內測SDK,在Proguard混淆檔案中增加一行配置:
-keep public class com.tencent.bugly.**{*;}
4.SDK初始化
獲取APP ID並將以下程式碼複製到專案Application類onCreate()中,Bugly會自動檢測環境並啟用預設配置:
Bugly.init(getApplicationContext(), "註冊時申請的APPID", false);
5.自定義更新對話方塊(主要採用自定義activity的形式)
在Application中新增以下資訊:
private void initUpgradeDialog() { /** * 自定義初始化開關 */ Beta.autoInit = true; /** * true表示初始化時自動檢查升級; false表示不會自動檢查升級,需要手動呼叫Beta.checkUpgrade()方法; */ Beta.autoCheckUpgrade = true; /** * 設定升級檢查週期為60s(預設檢查週期為0s),60s內SDK不重複向後臺請求策略); */ // Beta.upgradeCheckPeriod = 60 * 1000; /** * 設定啟動延時為1s(預設延時3s),APP啟動1s後初始化SDK,避免影響APP啟動速度; */ Beta.initDelay = 1 * 1000; /** * 設定通知欄大圖示,largeIconId為專案中的圖片資源; */ Beta.largeIconId = R.mipmap.app_icon; /** * 設定狀態列小圖示,smallIconId為專案中的圖片資源Id; */ Beta.smallIconId = R.mipmap.app_icon; /** * 設定更新彈窗預設展示的banner,defaultBannerId為專案中的圖片資源Id; * 當後臺配置的banner拉取失敗時顯示此banner,預設不設定則展示“loading“; */ Beta.defaultBannerId = R.mipmap.app_icon; /** * 設定sd卡的Download為更新資源儲存目錄; * 後續更新資源會儲存在此目錄,需要在manifest中新增WRITE_EXTERNAL_STORAGE許可權; */ Beta.storageDir = Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); /** * 已經確認過的彈窗在APP下次啟動自動檢查更新時會再次顯示; */ Beta.showInterruptedStrategy = true; /** * 只允許在MainActivity上顯示更新彈窗,其他activity上不顯示彈窗; 不設定會預設所有activity都可以顯示彈窗; */ Beta.canShowUpgradeActs.add(MainActivity.class); /** * 設定Wifi下自動下載 */ Beta.autoDownloadOnWifi = true; /*在application中初始化時設定監聽,監聽策略的收取*/ Beta.upgradeListener = new UpgradeListener() { @Override public void onUpgrade(int ret, UpgradeInfo strategy, boolean isManual, boolean isSilence) { if (strategy != null) { Log.e("bugly", "需要更新,存在更新策略"); new Handler().postDelayed(new Runnable() { public void run() { Intent i = new Intent(); i.setClass(getApplicationContext(), UpgradeActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); } }, 3000); } else { Log.e("bugly", "不需要更新,沒有更新策略"); } } }; /* 設定更新狀態回撥介面 */ Beta.upgradeStateListener = new UpgradeStateListener() { @Override public void onUpgradeSuccess(boolean isManual) { Toast.makeText(getApplicationContext(),"UPGRADE_SUCCESS",Toast.LENGTH_SHORT).show(); } @Override public void onUpgradeFailed(boolean isManual) { Toast.makeText(getApplicationContext(),"UPGRADE_FAILED",Toast.LENGTH_SHORT).show(); } @Override public void onUpgrading(boolean isManual) { Toast.makeText(getApplicationContext(),"UPGRADE_CHECKING",Toast.LENGTH_SHORT).show(); } @Override public void onUpgradeNoVersion(boolean isManual) { Toast.makeText(getApplicationContext(),"UPGRADE_NO_VERSION",Toast.LENGTH_SHORT).show(); } }; }
注意:
1. UpgradeActivity就是自定義的activity,自己想要的一下佈局樣式可以定義
2. 重點!!!!!!步驟5一定要在步驟4之前執行,Bugly的後臺策略一定要開啟,更新的對話方塊也要改成自定義UI
3.介紹的可能不是特別詳細,大家可以參考:
https://bugly.qq.com/docs/user-guide/advance-features-android-beta/?v=20170912151050#2activity
希望對大家有幫助,謝謝!