蒲公英文档中心

Android SDK 3.0.0 集成指南

蒲公英 Android SDK 3.0.0 版本的集成步骤,涵盖 App Key 获取、SDK 导入、用户反馈与版本更新。

蒲公英 SDK 已停止维护,新集成请直接使用 蒲公英 API。本文保留用于已集成项目参考。

本文介绍如何在 Android 工程中集成蒲公英 SDK 3.0.0,并启用用户反馈与版本更新检查。

前置要求

  • Android API 16 及以上。
  • 已在蒲公英注册应用并获取 App Key。
  • Android Studio 或 Eclipse 工程。

App Key 可在应用管理页面首页查看:

导入 SDK

下载 Android SDK

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'
}

示例工程:PgyerSdkDemoForAndroidStudio

Android Studio 用户也可以使用与 Eclipse 相同的 jar 包方式集成。

Eclipse

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

加入 libs 目录

配置 AndroidManifest

aar 方式

仅需配置 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>
PGYER_APPID 即 App Key。

jar 包方式

jar 包需要完整配置权限、provider 与 App Key:

<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" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_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" />

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

    <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>

Android 8.0 安装 apk 需要添加权限:

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

Android 9.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>

用户反馈

旧版本方法不兼容新版本接口。

启用摇一摇反馈

默认弹出 Dialog:

new PgyerFeedbackManager.PgyerFeedbackBuilder().builder().register();

改为弹出 Activity:

new PgyerFeedbackManager.PgyerFeedbackBuilder()
    .setDisplayType(PgyerFeedbackManager.TYPE.DIALOG_TYPE)
    .builder()
    .register();

可配置项

方法说明默认值
setShakeInvoke(boolean)是否以摇一摇激活;为 false 时需调用 invoke() 直接显示true
setDisplayType(TYPE)显示方式,DIALOG_TYPEACTIVITY_TYPEDIALOG_TYPE
setColorDialogTitle(String)Dialog 标题字体色#ffffff
setColorTitleBg(String)Dialog 标题栏背景色#2E2D2D
setBarBackgroundColor(String)顶部按钮与底部背景色#2E2D2D
setBarButtonPressedColor(String)按钮按下反馈色#383737
setColorPickerBackgroundColor(String)颜色选择器背景色#272828
setBarImmersive(boolean)Activity 模式下是否沉浸式false
setMoreParam(String, String)自定义反馈数据,可多次调用

自定义触发反馈

Dialog 方式直接弹出:

new PgyerFeedbackManager.PgyerFeedbackBuilder()
    .setShakeInvoke(false)
    .setDisplayType(PgyerFeedbackManager.TYPE.DIALOG_TYPE)
    .setColorDialogTitle("#FF0000")
    .setColorTitleBg("#FF0000")
    .setBarBackgroundColor("#FF0000")
    .setBarButtonPressedColor("#FF0000")
    .setColorPickerBackgroundColor("#FF0000")
    .setMoreParam("KEY1", "VALUE1")
    .setMoreParam("KEY2", "VALUE2")
    .builder()
    .invoke();

Activity 方式直接弹出:

new PgyerFeedbackManager.PgyerFeedbackBuilder()
    .setShakeInvoke(false)
    .setBarBackgroundColor("#FF0000")
    .setBarButtonPressedColor("#FF0000")
    .setColorPickerBackgroundColor("#FF0000")
    .setBarImmersive(true)
    .setDisplayType(PgyerFeedbackManager.TYPE.ACTIVITY_TYPE)
    .setMoreParam("KEY1", "VALUE1")
    .setMoreParam("KEY2", "VALUE2")
    .builder()
    .invoke();

自定义反馈数据会显示在反馈详情页:

检查更新

默认对话框

/** 弃用写法 */
PgyUpdateManager.register();

/** 推荐 */
new PgyUpdateManager.Builder().register();

/** 带配置 */
new PgyUpdateManager.Builder()
    .setForced(true)              // 强制更新。v3.0.4+ 也可在网站后台设置;二者任一生效即提示
    .setUserCanRetry(false)       // 失败后是否允许重试
    .setDeleteHistroyApk(false)   // 检查更新前是否删除本地历史 Apk,默认 true
    .register();

带回调的更新检查

旧写法:

/** 弃用写法 */
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)
    .setDeleteHistroyApk(false)
    .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());
            PgyUpdateManager.downLoadApk(appBean.getDownloadURL());
        }

        @Override
        public void checkUpdateFailed(Exception e) {
            Log.e("pgyer", "check update failed ", e);
        }
    })
    // 调用 PgyUpdateManager.downLoadApk() 后此回调才生效
    // 用于自行实现下载进度与状态 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");
            // 调用 SDK 提供的安装方法
            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,可在 Logcat 中使用 PgyerSDK 标签筛选。

常见问题

参见 Android SDK 3.0.0 常见问题

本页目录