Skip to content

vell001/BetaSDKDemo

Repository files navigation

BetaSDKDemo

腾讯Bugly内测,升级SDK接入demo

升级功能(Android)使用指南


一、概述

升级功能是专为App的灰度升级而开发的组件,在bugly内测页面配置好App的更新策略,策略指定的老版本App在启动时会自动检测更新并提示升级,为团队的应用分发,灰度内测提供一站式解决方案。

准备工作

如果你之前已经在Bugly腾讯移动开放平台注册了应用,并获取到AppID,可以继续使用它。 如果你尚未注册应用,可以通过QQ登录Bugly网站,点击"用户名",选择"我的App",点击注册新App,填写完应用基本信息完成注册,即可得到Bugly AppID。

二、接入指南

  1. 自动导入(推荐) 如果您使用Gradle编译Apk,我们强烈推荐您使用自动接入方式配置库文件(JCenter仓库))。 在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时,只需变更配置脚本中的版本号即可。

注意:

内测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
  1. 手动导入

如果您不采用上述自动导入方式,也可以手动集成内测SDK。

注意:

已经接入Bugly SDK的用户需要先删除原Bugly SDK的jar包;

android4.1以上的eclipse工程必须把jar包放在libs目录下,否则会出现NoClassDefFoundError错误;

下载内测SDK库文件

  • 下载内测SDK的Android SDK包

  • 如果您的工程有Native代码(C/C++)或者集成了其他第三方SO库,建议下载Bugly的NDK动态库

    Bugly NDK包含多个架构的SO库:

    armeabi

    armeabi­v7a

    arm64­v8a

    x86

    x86_64

    在集成Bugly SO库时,请注意只保留支持的架构SO库。

Eclipse 工程

  • 将内测SDK的库文件复制到工程的libs目录下;
  • Refresh一下工程;
  • 添加工程依赖:鼠标右键点击Bugly的JAR文件,添加到编译路径中

此处输入图片的描述

Android Studio工程

  • 将内测SDK的库文件复制到工程的libs目录下;
  • 点击Sync,同步配置。

此处输入图片的描述

三、参数配置

接入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" />

在AndroidManifest.xml中添加以下Activity

<activity
    android:name="com.tencent.bugly.beta.ui.BetaActivity"
    android:theme="@android:style/Theme.Translucent" />

请避免混淆内测SDK,在Proguard混淆文件中增加一行配置:

-keep public class com.tencent.bugly.**{*;}

四、SDK初始化

获取APP ID并将以下代码复制到项目Application类onCreate()中,Bugly会自动检测环境并启用默认配置:

Bugly.init(getApplicationContext(), "注册时申请的APPID", false);

提示:已经接入Bugly的用户改用上面的初始化方法,不影响原有的crash上报功能;

五、测试验证

  1. 注册App,获取Appid

使用前请先根据Bugly使用文档完善开发者信息与应用注册

  1. 上传升级包

进入内测页面选择注册的APP,点击发布新版本,上传要升级的APP的版本(上传APP的versioncode必须不低于外发版本的versiocode,否则用户检测不到更新

此处输入图片的描述

  1. 配置升级策略

发布完成后点击升级配置

此处输入图片的描述

点击新建升级策略

此处输入图片的描述

使用默认策略配置,点击创建策略

此处输入图片的描述

策略创建完成后会回到版本编辑页面,点击立即启动,使策略生效;

此处输入图片的描述

  1. 测试验证

完成步骤1中的策略配置,在本地安装配置过内测SDK的低版本APP,启动后(请先杀掉进程)等待一段时间(默认是3s)会弹出如下升级弹窗,表示SDK配置成功

此处输入图片的描述

六、高级配置

我们提供Beta类作为Bugly的初始化扩展,通过Beta类可以修改升级的检测时机,界面元素以及自定义的升级行为,可以参考BetaSdkDemo的相关设置。

public class DemoApplication extends Application{
    public static final String APP_ID = "900020779"; // TODO 替换成bugly上注册的appid
    @Override
    public void onCreate() {
        super.onCreate();
        
        /***** Beta高级设置 *****/
        /**
         * true表示app启动自动初始化升级模块;
         * false不会自动初始化;
         * 开发者如果担心sdk初始化影响app启动速度,可以设置为false,
         * 在后面某个时刻手动调用Beta.init(getApplicationContext(),false);
         */
        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.drawable.ic_launcher;
        
        /**
         * 设置状态栏小图标,smallIconId为项目中的图片资源Id;
         */
        Beta.smallIconId = R.drawable.ic_launcher;
        
        /**
         * 设置更新弹窗默认展示的banner,defaultBannerId为项目中的图片资源Id;
         * 当后台配置的banner拉取失败时显示此banner,默认不设置则展示“loading“;
         */
        Beta.defaultBannerId = R.drawable.ic_launcher;
        
        /**
         * 设置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);
        
        /***** 统一初始化Bugly产品,包含Beta *****/
        Bugly.init(this, APP_ID, true);
    }
}

七、接口说明

更新功能主要API

/**
* 手动检查更新策略
*/
public static synchronized void checkUpgrade()

/**
* 获取本地已有升级策略(非实时,可用于界面红点展示)
*
* @return
*/
public static synchronized UpgradeInfo getUpgradeInfo()

示例

public class MainActivity extends Activity {
    Button checkUpgradeBtn;
    Button refreshBtn;
    TextView upgradeInfoTv;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        checkUpgradeBtn = $(R.id.check_upgrade);
        refreshBtn = $(R.id.refresh_info);
        upgradeInfoTv = $(R.id.upgrade_info);
        
        checkUpgradeBtn.setOnClickListener(new OnClickListener() {
        @Override
            public void onClick(View v) {
            
                /***** 检查更新 *****/
                Beta.checkUpgrade();
            }
        });
        
        refreshBtn.setOnClickListener(new OnClickListener() {
        
            @Override
            public void onClick(View v) {
                loadUpgradeInfo();
            }
        });
    }
    
    private void loadUpgradeInfo() {
        if (upgradeInfoTv == null)
            return;
            
        /***** 获取升级信息 *****/
        UpgradeInfo upgradeInfo = Beta.getUpgradeInfo();
        
        if (upgradeInfo == null) {
            upgradeInfoTv.setText("无升级信息");
            return;
        }
        StringBuilder info = new StringBuilder();
        info.append("id: ").append(upgradeInfo.id).append("\n");
        info.append("标题: ").append(upgradeInfo.title).append("\n");
        info.append("升级说明: ").append(upgradeInfo.newFeature).append("\n");
        info.append("versionCode: ").append(upgradeInfo.versionCode).append("\n");
        info.append("versionName: ").append(upgradeInfo.versionName).append("\n");
        info.append("发布时间: ").append(upgradeInfo.publishTime).append("\n");
        info.append("安装包Md5: ").append(upgradeInfo.apkMd5).append("\n");
        info.append("安装包下载地址: ").append(upgradeInfo.apkUrl).append("\n");
        info.append("安装包大小: ").append(upgradeInfo.fileSize).append("\n");
        info.append("弹窗间隔(ms): ").append(upgradeInfo.popInterval).append("\n");
        info.append("弹窗次数: ").append(upgradeInfo.popTimes).append("\n");
        info.append("发布类型(0:测试 1:正式): ").append(upgradeInfo.publishType).append("\n");
        info.append("弹窗类型(1:建议 2:强制 3:手工): ").append(upgradeInfo.upgradeType);
        
        upgradeInfoTv.setText(info);
    }
}

UpgradeInfo内容如下

public String id = "";//唯一标识
public String title = "";//升级提示标题
public String newFeature = "";//升级特性描述
public long publishTime = 0;//升级发布时间,ms
public int publishType = 0;//升级类型 0测试 1正式
public int upgradeType = 1;//升级策略 1建议 2强制 3手工
public int popTimes = 0;//提醒次数
public long popInterval = 0;//提醒间隔
public int versionCode;
public String versionName = "";
public String apkMd5;//包md5值
public String apkUrl;//APK的CDN外网下载地址
public long fileSize;//APK文件的大小

About

腾讯Bugly内测,升级SDK接入demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages