Pgyer document center

Android SDK 3.0.0集成指南

注册应用获取 App Key

App Key:唯一标识一个应用的 Key,在蒲公英上的每一个 App 都有一个唯一的 App Key,开发者可以在应用管理页面首页查看。

下载 SDK

点击这里下载 Android SDK

导入SDK

Eclipse用户

将 jar 包复制到工程的 libs 目录下面。

加入libs目录

Android Studio用户

添加代码到project下的build.gradle文件中:

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

然后在module下的build.gradle文件中添加依赖即可:

dependencies {
    compile 'com.pgyersdk:sdk:3.0.10'
}

Android Studio工程示例代码

Android Studio用户除了可以使用以上方法集成SDK外,也可以使用和Eclipse用户相同的方法来集成SDK。

jar包引用SDK方式,配置 AndroidManifest

需要配置相关的权限,provider,PgyerProvider,PGYER_APPID

<!-- 必选-->
<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" /> <!-- 获取logcat日志 -->

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
<!-- 可选-->
        <activity android:name="com.pgyersdk.feedback.FeedbackActivity"/>
<!-- Jar 包集成的方式 必填 -->
    <provider
            android:name="com.pgyersdk.PgyerProvider"
            android:authorities="${applicationId}.com.pgyer.provider"
            android:exported="false"/>
<!-- 必填 -->
    <meta-data
        android:name="PGYER_APPID"
        android:value="4b6e8877dfcc2462bedb37dcf66b6d87" >
    </meta-data>
</application>

aar 引用SDK方式,配置 AndroidManifest

仅需要配置 PGYER_APPID,即是App Key

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application >
<!-- 可选-->
        <activity android:name="com.pgyersdk.feedback.FeedbackActivity"/>
<!-- 必选-->
    <meta-data
            android:name="PGYER_APPID"
            android:value="4b6e8877dfcc2462bedb37dcf66b6d87" >
        </meta-data>
    </application>
</manifest>

注意:APPID 即 App Key

Jar 包方式集成需要手动配置以下文件

Android8.0 安装 apk 需要添加权限:

 <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

Android9.0 需要配置允许 SDK http请求配置:
network_security_config.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">www.pgyer.com</domain>
        <domain includeSubdomains="true">app-global.pgyer.com</domain>
    </domain-config>
</network-security-config>

上报 Crash 异常

一、注册Crash接口(必选)

  1. 启动 Pgyer 检测 Crash 功能;
   PgyCrashManager.register(getApplicationContext());  // 弃用
   PgyCrashManager.register(); //推荐使用
  1. 添加自定义的 Crash 功能(新功能)
   //这个方法慎用 
   PgyerCrashObservable.get().attach(new PgyerObserver() {
    @Override
    public void receviedCrash(Thread thread, Throwable exception) {
    // 禁止做耗时操作
    // 添加自定义操作
      }
     }
   });

注意:自定义的 crash 操作中禁止做耗时操作,循环操作。

  1. 设置是否忽略系统默认的Crash流程
   PgyCrashManager.setIsIgnoreDefaultHander(true); //默认设置为false;
   //设置为 true ,则忽略系统默认Crash 操作,SDK 会重启启动 app 的当前页面

二、上报异常

try  {
    // code
} catch (Exception e) {
/** 旧版本 **/
    PgyCrashManager.reportCaughtException(MainActivity.this, e); // 弃用,不推荐使用
/** 新版本 **/
    PgyCrashManager.reportCaughtException(e);       
}

摇一摇用户反馈(旧版本方法不兼容)

  1. 默认摇一摇启动
 // 默认采用摇一摇弹出 Dialog 方式
 new PgyerFeedbackManager.PgyerFeedbackBuilder().builder().register();

 // 采用摇一摇弹出 Activity 方式
 new PgyerFeedbackManager.PgyerFeedbackBuilder()    
    .setDisplayType(PgyerFeedbackManager.TYPE.DIALOG_TYPE)  
    .builder()
    .register();
// 可自定义的选项
 new PgyerFeedbackManager.PgyerFeedbackBuilder()
    .setShakeInvoke(false)  //设置是否摇一摇的方式激活反馈,默认为 true
                         // fasle 则不触发摇一摇,最后需要调用 invoke 方法
    .setColorDialogTitle("#FF0000")    //设置Dialog 标题的字体颜色,默认为颜色为#ffffff
    .setColorTitleBg("#FF0000")        //设置Dialog 标题栏的背景色,默认为颜色为#2E2D2D
    // 默认参数为PgyerFeedbackManager.TYPE.DIALOG_TYPE, Dialog UI 显示
    // 可选参数PgyerFeedbackManager.TYPE.ACTIVITY_TYPE  Activity UI 显示
    .setDisplayType(PgyerFeedbackManager.TYPE.DIALOG_TYPE)  
    .setMoreParam("KEY1","VALUE1") //自定义的反馈数据
    .setMoreParam("KEY2","VALUE2") //自定义的反馈数据
    .builder()
    .register();

2.自定义触发反馈

  1. Dailog UI 显示反馈
new PgyerFeedbackManager.PgyerFeedbackBuilder()
    .setShakeInvoke(false)       //fasle 则不触发摇一摇,最后需要调用 invoke 方法
                                // true 设置需要调用 register 方法使摇一摇生效
    .setDisplayType(PgyerFeedbackManager.TYPE.DIALOG_TYPE)   //设置以Dialog 的方式打开
    .setColorDialogTitle("#FF0000")    //设置Dialog 标题的字体颜色,默认为颜色为#ffffff
    .setColorTitleBg("#FF0000")        //设置Dialog 标题栏的背景色,默认为颜色为#2E2D2D
    .setBarBackgroundColor("#FF0000")      // 设置顶部按钮和底部背景色,默认颜色为 #2E2D2D
    .setBarButtonPressedColor("#FF0000")        //设置顶部按钮和底部按钮按下时的反馈色 默认颜色为 #383737
    .setColorPickerBackgroundColor("#FF0000")   //设置颜色选择器的背景色,默认颜色为 #272828
    .setMoreParam("KEY1","VALUE1") //自定义的反馈数据
    .setMoreParam("KEY2","VALUE2") //自定义的反馈数据
    .builder()
    .invoke();                  //激活直接显示的方式
  1. Activity UI 显示反馈
new PgyerFeedbackManager.PgyerFeedbackBuilder()
    .setShakeInvoke(false)       //fasle 则不触发摇一摇,最后需要调用 invoke 方法
                                // true 设置需要调用 register 方法使摇一摇生效
    .setBarBackgroundColor("#FF0000")      // 设置顶部按钮和底部背景色,默认颜色为 #2E2D2D
    .setBarButtonPressedColor("#FF0000")        //设置顶部按钮和底部按钮按下时的反馈色 默认颜色为 #383737
    .setColorPickerBackgroundColor("#FF0000")   //设置颜色选择器的背景色,默认颜色为 #272828
    .setBarImmersive(true)              //设置activity 是否以沉浸式的方式打开,默认为 false
    .setDisplayType(PgyerFeedbackManager.TYPE.ACTIVITY_TYPE)   //设置以 Activity 的方式打开
    .setMoreParam("KEY1","VALUE1")      //自定义的反馈数据
    .setMoreParam("KEY2","VALUE2")      //自定义的反馈数据
    .builder()
    .invoke();                  //激活直接显示的方式

将在用户反馈的详情界面看到自定义的数据,如下图:

检查更新

  1. 默认对话框的版本更新检查

旧版本需修改如下

 /** 旧版本修改 **/
 PgyUpdateManager.register(); // 弃用方法,不推介

新版本

/** 新版本 **/
/** 默认方式 **/
new PgyUpdateManager.Builder()
    .register();

/** 可选配置集成方式 **/
new PgyUpdateManager.Builder()
    .setForced(true)                //设置是否强制提示更新
                // v3.0.4+ 以上同时可以在官网设置强制更新最高低版本;网站设置和代码设置一种情况成立则提示强制更新
    .setUserCanRetry(false)         //失败后是否提示重新下载
    .setDeleteHistroyApk(false)     // 检查更新前是否删除本地历史 Apk, 默认为true
    .register();
  1. 带回调的版本更新检查

旧版本需修改如下

/** 旧版本修改 **/
PgyUpdateManager.register(new UpdateManagerListener() {   // 弃用方法,不推介
    @Override
    public void onNoUpdateAvailable() {
        //检测没有跟新的回调
    }

    @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) {   //再回调失败的时候,增加了新的接口
              //更新拒绝(应用被下架,过期,不在安装有效期,下载次数用尽)以及无网络情况会调用此接口

        }
    });

​新版本 (新方法:添加了使用蒲公英下载的回调接口)


/** 新版本 **/ 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(File file) { Log.e("pgyer", "download apk success"); // 使用蒲公英提供的安装方法提示用户 安装apk PgyUpdateManager.installApk(file); } @Override public void onProgressUpdate(Integer... integers) { Log.e("pgyer", "update download apk progress" + integers); }}) .register();

混淆

一般不需要添加,如果需要,则添加以下代码

-libraryjars libs/pgyer_sdk_x.x.jar
-dontwarn com.pgyersdk.**
-keep class com.pgyersdk.** { *; }
-keep class com.pgyersdk.**$* { *; }

调试

蒲公英 SDK 会在调试的过程中打印 Log,可以通过 PgyerSDK 标签筛选 Log 信息

常见问题

点击查看