腾讯Bugly 自定义更新Dialog

           在开发项目的过程中,为了解决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.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)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

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





猜你喜欢

转载自blog.csdn.net/meng326125/article/details/78506720