跳到主要内容
版本:2.6

推送 SDK(Android)

​

信息

最低兼 Android 版本 4.2 API 17

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

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

集成 SDK​

集成 GrowingIO Android 无埋点 SDK​

信息

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

版本建议使用最新版本,如已集成请跳过

参考 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,推送使用了新版的方法,否则会报错。

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

请注意规避类似如下问题

​

​

​

​

​