推送 SDK(Android)
最低兼Android版本4.2 API 17
推送SDK会根据运营人员对用户的分组情况,下发弹窗和推送消息。
各个厂商通道的详细接入文档见目录栏「厂商通道」。

一. 集成SDK

1. 集成GrowingIO Android无埋点SDK

添加推送 SDK前请确保您已经集成了我们公司的埋点 SDK,版本需要在 2.6.9 及以上,详细情况请移步Android埋点SDK帮助文档。最低兼容的 Android 版本为 4.2 。

2. 添加依赖

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

如果没有开通华为推送通道可以不用添加该仓库,跳过该步骤。
1.5.0版本后仓库从JCenter迁移到了Maven Central, 请使用mavenCentral()替换jcenter()
1
allprojects {
2
repositories {
3
google()
4
jcenter()
5
// sdk1.5.0版本开始迁移到了Maven Central
6
mavenCentral()
7
mavenLocal()
8
// 华为仓库
9
maven { url 'http://developer.huawei.com/repo/' }
10
}
11
}
Copied!

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

1
dependencies {
2
...
3
//由于推送底层网络库依赖OkHttp3网络库,请添加OkHttp3依赖
4
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
5
//推送SDK依赖
6
implementation 'com.growingio.android:gtouch:$gtouch_version'
7
//华为推送SDK依赖,如果没有开通华为推送通道可以不用添加该依赖
8
implementation 'com.growingio.android.gpush:gpush-huawei-adapter:$gtouch_version'
9
//魅族推送SDK依赖,如果没有开通魅族推送通道可以不用添加该依赖
10
implementation 'com.growingio.android.gpush:gpush-meizu-adapter:$gtouch_version'
11
//小米推送SDK依赖,如果没有开通小米推送通道可以不用添加该依赖
12
implementation 'com.growingio.android.gpush:gpush-xiaomi-adapter:$gtouch_version'
13
//OPPO推送SDK依赖,如果没有开通OPPO推送通道可以不用添加该依赖
14
implementation 'com.growingio.android.gpush:gpush-oppo-adapter:$gtouch_version'
15
//vivo推送SDK依赖,如果没有开通vivo推送通道可以不用添加该依赖
16
implementation 'com.growingio.android.gpush:gpush-vivo-adapter:$gtouch_version'
17
}
Copied!
$gtouch_version 为推送SDK版本号,最新的版本号为请参考SDK更新日志,注意必须与com.growingio.android:gtouch这个依赖的版本号保持一致。
如果是其他机型默认选择小米(需要app在前台保活)

3. 配置AppID和AppKey

在module级别的build.gradle里配置AppID和AppKey。
根据您APP的实际情况配置不同厂家渠道
1
android {
2
......
3
defaultConfig {
4
manifestPlaceholders = [
5
PACKAGE_NAME : "您的APP包名",
6
7
GPUSH_XIAOMI_APP_ID : "小米推送的AppId",
8
GPUSH_XIAOMI_APP_KEY: "小米推送的AppKey",
9
10
GPUSH_HUAWEI_APP_ID : "华为推送的AppId(华为推送不需要AppKey)",
11
12
GPUSH_MEIZU_APP_ID : "魅族推送的AppId",
13
GPUSH_MEIZU_APP_KEY : "魅族推送的AppKey",
14
15
GPUSH_VIVO_APP_ID : "VIVO推送的AppId",
16
GPUSH_VIVO_APP_KEY : "VIVO推送的AppKey",
17
18
GPUSH_OPPO_APP_ID : "OPPO推送的AppId",
19
GPUSH_OPPO_APP_KEY : "OPPO推送的AppKey",
20
GPUSH_OPPO_APP_SECRET : "OPPO推送的AppSecret",
21
]
22
......
23
}
24
......
25
}
Copied!

4.添加权限

集成推送SDK需在AndroidManifest.xml 中添以下权限
1
<!-- 【必须】 小米、华为,魅族和Vivo推送SDK所需权限 -->
2
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
4
<uses-permission android:name="android.permission.GET_TASKS" />
5
<uses-permission android:name="android.permission.VIBRATE"/>
6
<!-- 【必须】 Oppo推送SDK需额外权限 -->
7
<uses-permission android:name="com.colors.mcs.permission.RECIEVE_MCS_MESAGE" />
Copied!

5. 初始化SDK

请将以下GrowingTouch.startWithConfig加在您的Application 的 onCreate 方法中,且保证在埋点SDK初始化代码GrowingIO.startWithConfiguration
1
public class MyApplication extends Application {
2
3
@Override
4
public void onCreate() {
5
super.onCreate();
6
GrowingIO.startWithConfiguration(this, new Configuration()
7
.trackAllFragments()
8
.setChannel("XXX应用商店")
9
);
10
11
GrowingTouch.startWithConfig(this, new GTouchConfig()
12
.setPushEnable(true)
13
.setDebugEnable(BuildConfig.DEBUG)
14
);
15
}
16
}
Copied!

6. 代码混淆

如果您启用了代码混淆,请务必在您的proguard-rules.pro文件里加入下面的代码:
1
#GrowingIO
2
-keep class com.growingio.** {
3
*;
4
}
5
-dontwarn com.growingio.**
6
-keepnames class * extends android.view.View
7
-keepnames class * extends android.app.Fragment
8
-keepnames class * extends android.support.v4.app.Fragment
9
-keepnames class * extends androidx.fragment.app.Fragment
10
-keep class android.support.v4.view.ViewPager{
11
*;
12
}
13
-keep class android.support.v4.view.ViewPager$**{
14
*;
15
}
16
-keep class androidx.viewpager.widget.ViewPager{
17
*;
18
}
19
-keep class androidx.viewpager.widget.ViewPager$**{
20
*;
21
}
22
23
#okhttp
24
-dontwarn okhttp3.**
25
-keep class okhttp3.**{*;}
26
27
#okio
28
-dontwarn okio.**
29
-keep class okio.**{*;}
30
31
#Xiaomi Push
32
-dontwarn com.xiaomi.**
33
-keep class com.xiaomi.**{*;}
34
-keep public class * extends com.xiaomi.mipush.sdk.PushMessageReceiver
35
36
#Huawei Push
37
-ignorewarnings
38
-keepattributes *Annotation*
39
-keepattributes Exceptions
40
-keepattributes InnerClasses
41
-keepattributes Signature
42
-keepattributes SourceFile,LineNumberTable
43
-keep class com.hianalytics.android.**{*;}
44
-keep class com.huawei.updatesdk.**{*;}
45
-keep class com.huawei.hms.**{*;}
46
-keep class com.huawei.android.hms.agent.**{*;}
47
48
#Meizu Push
49
-dontwarn com.meizu.cloud.pushsdk.**
50
-keep class com.meizu.cloud.pushsdk.**{*;}
51
52
#OPPO Push
53
-keep public class * extends android.app.Service
54
55
#vivo Push
56
-dontwarn com.vivo.push.**
57
-keep class com.vivo.push.**{*;}
58
-keep class com.growingio.android.sdk.gpush.vivo.VivoPushAdapterReceiver{*;}
Copied!

二. 重要配置

1. 设置推送开关 setPushEnable

设置推送消息的开关
1
setPushEnable(boolean pushEnable)
Copied!
参数说明
参数名
类型
必填
说明
enable
boolean
开关推送功能
  • true开启
  • false关闭
默认为true
代码示例
1
GrowingTouch.startWithConfig(this, new GTouchConfig()
2
.setPushEnable(true)
3
...
4
);
Copied!

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

查看数据采集发送日志,能够在Android Studio中通过Logcat查看GrowingTouch打印的数据发送日志,在 APP 的 Application onCreate 初始化SDK地方添加配置。
1
setDebugEnable(boolean debugEnable)
Copied!
参数说明
参数名
类型
必填
说明
debugEnable
boolean
开启推送日志
  • true开启
  • false关闭
默认false
代码示例
1
GrowingTouch.startWithConfig(this, new GTouchConfig()
2
//BuildConfig.DEBUG 这样配置就不会上线忘记关闭
3
.setDebugEnable(BuildConfig.DEBUG)
4
...
5
);
Copied!

3. 推送消息的自定义处理

推送功能默认提供 打开APP、打开网页、打开APP内部页面跳转自定义地址四种功能,如果前三种功能满足不了您的需求,可以在创建一个跳转自定义地址的推送后, 代码里自定义一个BroadcastReceiver类,用于自定义处理各种消息的响应。例如自定义一个BroadcastReceiver,用于消费跳转自定义协议的推送。
1
public class PushMessageReceiver extends GPushMessageReceiver {
2
private static final String TAG = "PushMessageReceiver";
3
4
/**
5
* 推送注册成功
6
*
7
* @param context BroadcastReceiver的onReceive回调中的Context对象
8
* @param channel 推送通道,如华为、小米等
9
* @param pushToken 注册的推送Token
10
*/
11
@Override
12
public void onRegister(Context context, PushChannel channel, String pushToken) {
13
Log.e(TAG, "onRegister: channel = " + channel.getChannelName() + ", pushToken = " + pushToken);
14
}
15
16
/**
17
* 推送注销成功
18
*
19
* @param context BroadcastReceiver的onReceive回调中的Context对象
20
*/
21
@Override
22
public void onUnregister(Context context) {
23
Log.e(TAG, "onUnregister: ");
24
}
25
26
/**
27
* 推送消息被点击
28
*
29
* @param context BroadcastReceiver的onReceive回调中的Context对象
30
* @param pushMessage 推送的消息体
31
*/
32
@Override
33
public void onNotificationMessageClicked(Context context, GPushMessage pushMessage) {
34
Log.e(TAG, "onNotificationMessageClicked: " + pushMessage.toString());
35
}
36
}
Copied!
将自定义的BroadcastReceiver注册到AndroidManifest.xml文件中
1
<receiver
2
android:name="您的包名.PushMessageReceiver"
3
android:enabled="true">
4
<intent-filter>
5
<action android:name="com.growingio.push.intent.action.MESSAGE" />
6
</intent-filter>
7
</receiver>
Copied!

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

推送SDK会收集SDK内部异常上报服务端,方便开发更好的追踪推送SDK的问题,和完善推送SDK的功能。如果您不想帮助我们推送产品完善功能,或者和您的crash收集框架有冲突,您可以选择关闭此功能。
1
setUploadExceptionEnable(boolean uploadExceptionEnable)
Copied!
参数说明
参数名
类型
必填
说明
uploadExceptionEnable
boolean
开关SDK异常上传功能
  • true开启
  • false关闭
默认值true
代码示例
1
GrowingTouch.startWithConfig(this, new GTouchConfig()
2
.setUploadExceptionEnable(true)
3
...
4
);
Copied!

三. API介绍( GrowingTouch.class )

1. void registerPush()

注册消息推送功能

2. void unRegisterPush()

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

四. 其他

1. 推送消息跳转原生Activity界面

若推送跳转链接为 com.growingio.gtouch.InAppPageActivity?key1=value1&key2=value2 那么会打开原生界面 InAppPageActivity,并携带两个参数。
对应的推送页面配置如下图所示:
其中「自定义参数」意思是输入任何您自己的scheme(自定义协议),
比如: myapp://productdetails/itemabc ,然后在onclick事件回调中解析出来就行了
  • 推送页面配置截图如下:
在InAppPageActivity可以通过intent获取参数
1
@Override
2
protected void onCreate(Bundle savedInstanceState) {
3
super.onCreate(savedInstanceState);
4
setContentView(R.layout.activity_in_app_page);
5
Intent intent = getIntent();
6
Log.e(TAG, "onCreate: key1 = " + intent.getStringExtra("key1"));
7
Log.e(TAG, "onCreate: key2 = " + intent.getStringExtra("key2"));
8
}
Copied!

2. okhttp 版本要求

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

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

请注意规避类似如下问题

4. 集成推送后,运营平台推送配置扫码验证失败

  • 查看urlScheme是否和平台上一致,扫码能否跳转集成SDK后的App
  • Logcat里搜索「PushRegister」这个tag,找到对应的code报错码,再去对应的产商推送平台上找报错码对应的异常情况。
  • 只集成了一个推送通道,请用相应通道的设备进行推送验证。小米通道则不限制
  • Logcat里搜索「token」,看是否有获取到gio_push_token

5. 兼容性-(具体看对应厂商通道

如果您的App已经集成了个推VIP或极光VIP版本的推送SDK,我们的Android SDK也能兼容。
为了和个推兼容,我们将厂商通道独立打包。以小米推送通道为例,我们打包两个SDK:gpush-mipush-sdk和gpush-xiaomi-adapter。如果是从未接过个推、极光等VIP版本的用户可以直接添加小米推送通道依赖。
1
implementation 'com.growingio.android.gpush:gpush-xiaomi-adapter:$gtouch_version'
Copied!
如果是个推、极光等VIP版本的用户可以将小米官方SDK包gpush-mipush-sdk 排除出去。
1
implementation ('com.growingio.android.gpush:gpush-xiaomi-adapter:$gtouch_version'){
2
exclude(group: 'com.growingio.android.gpush' , module: 'gpush-mipush-sdk')
3
}
Copied!