跳到主要内容
版本:2.3

推送 SDK(Android)

信息

最低兼 Android 版本 4.2 API 17

推送 SDK 会根据运营人员对用户的分组情况,下发弹窗和推送消息。

各个厂商通道的详细接入文档见目录栏「厂商通道」。

集成 SDK

集成 GrowingIO Android 无埋点 SDK

信息

推送 SDK 依赖于数据数据采集 SDK

版本要求最低 1.2.3,如已集成请跳过

参考 Android SDK

添加依赖

在 project 级别的 build.gradle 的 allprojects->repositories 添加华为推送 SDK 的 maven 仓库

如果没有开通华为推送通道可以不用添加该仓库,跳过该步骤。

allprojects {

repositories {

google()

jcenter()

mavenLocal()

// 华为仓库

maven { url 'http://developer.huawei.com/repo/' }

}

}

在 module 级别的 build.gradle 添加 SDK 依赖

dependencies {

...

//由于推送底层网络库依赖OkHttp3网络库,请添加OkHttp3依赖

implementation 'com.squareup.okhttp3:okhttp:3.12.1'

//推送SDK依赖

implementation 'com.growingio.android:gtouch:$gtouch_version'

//华为推送SDK依赖,如果没有开通华为推www送通道可以不用添加该依赖

implementation 'com.growingio.android.gpush:gpush-huawei-adapter:$gtouch_version'

//魅族推送SDK依赖,如果没有开通魅族推送通道可以不用添加该依赖

implementation 'com.growingio.android.gpush:gpush-meizu-adapter:$gtouch_version'

//小米推送SDK依赖,如果没有开通小米推送通道可以不用添加该依赖

implementation 'com.growingio.android.gpush:gpush-xiaomi-adapter:$gtouch_version'

//OPPO推送SDK依赖,如果没有开通OPPO推送通道可以不用添加该依赖

implementation 'com.growingio.android.gpush:gpush-oppo-adapter:$gtouch_version'

//vivo推送SDK依赖,如果没有开通vivo推送通道可以不用添加该依赖

implementation 'com.growingio.android.gpush:gpush-vivo-adapter:$gtouch_version'

}

$gtouch_version 为最新 SDK 版本号,现最新的版本号为请参考SDK 更新日志

配置 AppID 和 AppKey

在 module 级别的 build.gradle 里配置 AppID 和 AppKey。

根据您 APP 的实际情况配置不同厂家渠道

android {

......

defaultConfig {

manifestPlaceholders = [

PACKAGE_NAME : "您的APP包名",



GPUSH_XIAOMI_APP_ID : "小米推送的AppId",

GPUSH_XIAOMI_APP_KEY: "小米推送的AppKey",



GPUSH_HUAWEI_APP_ID : "华为推送的AppId(华为推送不需要AppKey)",



GPUSH_MEIZU_APP_ID : "魅族推送的AppId",

GPUSH_MEIZU_APP_KEY : "魅族推送的AppKey",



GPUSH_VIVO_APP_ID : "VIVO推送的AppId",

GPUSH_VIVO_APP_KEY : "VIVO推送的AppKey",



GPUSH_OPPO_APP_ID : "OPPO推送的AppId",

GPUSH_OPPO_APP_KEY : "OPPO推送的AppKey",

GPUSH_OPPO_APP_SECRET : "OPPO推送的AppSecret",

]

......

}

......

}

添加权限

集成推送 SDK 需在 AndroidManifest.xml 中添以下权限

<!-- 【必须】 小米、华为,魅族和Vivo推送SDK所需权限 -->

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

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

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

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

<!-- 【必须】 Oppo推送SDK需额外权限 -->

<uses-permission android:name="com.colors.mcs.permission.RECIEVE_MCS_MESAGE" />

初始化 SDK

请将以下GrowingTouch.startWithConfig加在您的 Application 的 onCreate 方法中,且保证在 GrowingIO 采集 SDK 启动代码后

public  class  MyApplication extends Application  {

@Override

public void onCreate() {

super.onCreate();

// GrowingIO 采集SDK 启动代码

// GrowingIO 推送SDK 启动代码

GrowingTouch.startWithConfig(this, new GTouchConfig()

.setPushEnable(true)

.setDebugEnable(BuildConfig.DEBUG)

);

}

}

请注意调用顺序,需要在 GrowingIO 采集 SDK 启动代码调用后,再调用 GrowingTouch.startWithConfig 函数。

代码混淆

如果您启用了代码混淆,请务必在您的 proguard-rules.pro 文件里加入下面的代码:

#GrowingIO

-keep class com.growingio.** {

*;

}

-dontwarn com.growingio.**

-keepnames class * extends android.view.View

-keepnames class * extends android.app.Fragment

-keepnames class * extends android.support.v4.app.Fragment

-keepnames class * extends androidx.fragment.app.Fragment

-keep class android.support.v4.view.ViewPager{

*;

}

-keep class android.support.v4.view.ViewPager$**{

*;

}

-keep class androidx.viewpager.widget.ViewPager{

*;

}

-keep class androidx.viewpager.widget.ViewPager$**{

*;

}



#okhttp

-dontwarn okhttp3.**

-keep class okhttp3.**{*;}



#okio

-dontwarn okio.**

-keep class okio.**{*;}



#Xiaomi Push

-dontwarn com.xiaomi.**

-keep class com.xiaomi.**{*;}

-keep public class * extends com.xiaomi.mipush.sdk.PushMessageReceiver

#Huawei Push

-ignorewarnings

-keepattributes *Annotation*

-keepattributes Exceptions

-keepattributes InnerClasses

-keepattributes Signature

-keepattributes SourceFile,LineNumberTable

-keep class com.hianalytics.android.**{*;}

-keep class com.huawei.updatesdk.**{*;}

-keep class com.huawei.hms.**{*;}

-keep class com.huawei.android.hms.agent.**{*;}



#Meizu Push

-dontwarn com.meizu.cloud.pushsdk.**

-keep class com.meizu.cloud.pushsdk.**{*;}



#OPPO Push

-keep public class * extends android.app.Service



#vivo Push

-dontwarn com.vivo.push.**

-keep class com.vivo.push.**{*;}

-keep class com.growingio.android.sdk.gpush.vivo.VivoPushAdapterReceiver{*;}

重要配置

设置推送开关 setPushEnable

设置推送消息的开关

setPushEnable(boolean pushEnable)

参数说明

参数名类型必填说明
enableboolean开关推送功能
true 开启
false 关闭
默认为 true

代码示例

GrowingTouch.startWithConfig(this,  new  GTouchConfig()

.setPushEnable(true)

...

);

设置 Debug 模式(只在调试时使用,上线请务必关闭) setDebugEnable

查看数据采集发送日志,能够在 Android Studio 中通过 Logcat 查看 GrowingTouch 打印的数据发送日志,在 APP 的 Application onCreate 初始化 SDK 地方添加配置。

setDebugEnable(boolean debugEnable)

参数说明

参数名类型必填说明
debugEnableboolean开启推送日志
true 开启
false 关闭
默认 false

代码示例

GrowingTouch.startWithConfig(this,  new  GTouchConfig()

//BuildConfig.DEBUG 这样配置就不会上线忘记关闭

.setDebugEnable(BuildConfig.DEBUG)

...

);

推送消息的自定义处理

推送功能默认提供 打开 APP、打开网页、打开 APP 内部页面跳转自定义地址四种功能,如果前三种功能满足不了您的需求,可以在创建一个跳转自定义地址的推送后, 代码里自定义一个BroadcastReceiver类,用于自定义处理各种消息的响应。例如自定义一个 BroadcastReceiver,用于消费跳转自定义协议的推送。

public  class  PushMessageReceiver extends GPushMessageReceiver  {

private static final String TAG = "PushMessageReceiver";

/**

\* 推送注册成功

\*

\* @param context BroadcastReceiver的onReceive回调中的Context对象

\* @param channel 推送通道,如华为、小米等

\* @param pushToken 注册的推送Token

*/

@Override

public void onRegister(Context context, PushChannel channel, String pushToken) {

Log.e(TAG, "onRegister: channel = " + channel.getChannelName() + ", pushToken = " + pushToken);

}

/**

\* 推送注销成功

*

\* @param context BroadcastReceiver的onReceive回调中的Context对象

*/

@Override

public void onUnregister(Context context) {

Log.e(TAG, "onUnregister: ");

}



/**

\* 推送消息被点击

\*

\* @param context BroadcastReceiver的onReceive回调中的Context对象

\* @param pushMessage 推送的消息体

*/

@Override

public void onNotificationMessageClicked(Context context, GPushMessage pushMessage) {

Log.e(TAG, "onNotificationMessageClicked: " + pushMessage.toString());

}

}

将自定义的 BroadcastReceiver 注册到 AndroidManifest.xml 文件中

<receiver

android:name="您的包名.PushMessageReceiver"

android:enabled="true">

<intent-filter>

<action android:name="com.growingio.push.intent.action.MESSAGE" />

</intent-filter>

</receiver>

设置推送 SDK 异常上传开关 setUploadExceptionEnable

推送 SDK 会收集 SDK 内部异常上报服务端,方便开发更好的追踪推送 SDK 的问题,和完善推送 SDK 的功能。如果您不想帮助我们推送产品完善功能,或者和您的 crash 收集框架有冲突,您可以选择关闭此功能。

setUploadExceptionEnable(boolean uploadExceptionEnable)

参数说明

参数名类型必填说明
uploadExceptionEnableboolean开关 SDK 异常上传功能
true 开启
false 关闭
默认值 true

代码示例

 GrowingTouch.startWithConfig(this,  new  GTouchConfig()

.setUploadExceptionEnable(true)

...

);

API 介绍( GrowingTouch.class )

void registerPush()

注册消息推送功能

void unRegisterPush()

注销消息推送功能

注意执行此方法会使设备发给厂商通道的推送令牌发生变化,导致厂商通道那边有脏数据,一定时间内会降低送达率。

其他

推送消息跳转原生 Activity 界面

若推送跳转链接为 com.growingio.gtouch.InAppPageActivity?key1=value1&key2=value2 那么会打开原生界面 InAppPageActivity,并携带两个参数。

对应的推送页面配置如下图所示:

其中「自定义参数」意思是输入任何您自己的 scheme(自定义协议),

比如: myapp://productdetails/itemabc ,然后在 onclick 事件回调中解析出来就行了

  • 推送页面配置截图如下:

在 InAppPageActivity 可以通过 intent 获取参数

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_in_app_page);

Intent intent = getIntent();

Log.e(TAG, "onCreate: key1 = " + intent.getStringExtra("key1"));

Log.e(TAG, "onCreate: key2 = " + intent.getStringExtra("key2"));

}

okhttp 版本要求

需要升级到 3.12.1,推送使用了新版的方法,否则会报错。

集成推送后,原有应用将变为多进程应用

请注意规避类似如下问题