腾讯Bugly 自定义更新Dialog

来源:互联网 发布:算法竞赛入门经典多看 编辑:程序博客网 时间:2024/06/03 12:57

           在开发项目的过程中,为了解决App的崩溃问题以及快速解决线上版本出现严重Bug的需求,我们在项目中接入了腾讯的Bugly,在更新提示时我们可以选择自定义的样式,我们项目里自定义的样式如下图所示:


下面介绍一下主要的集成过程,步骤以及主要事项:

1.准备工作:

       首先要去腾讯的Bugly,注册bugly账号以及添加产品,主要过程是https://bugly.qq.com 这个网址直接用qq登录,然后点击右上角-我的产品,如果没有添加过产品的话,点击"用户名",选择"我的App"点击注册新App,填写完应用基本信息完成注册,即可得到Bugly AppID。

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.9compile '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)60sSDK不重复向后台请求策略);         *///        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;        /**         * 设置更新弹窗默认展示的bannerdefaultBannerId为项目中的图片资源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

  希望对大家有帮助,谢谢!





原创粉丝点击