Android 消息推送:个推

| | |- armeabi/

| | |- armeabi-v7a/

| | |- mips/

| | |- mips64/

| | |- x86/

| | |- x86_64/

| |- GetuiSDK2.11.1.0.jar

| |- android-support-v4.jar

| - Demo工程/

| |- Getui_SDK_Demo_AS_maven/ (AndroidStudio快速集成Demo工程)

| |- Getui_SDK_Demo_AS_official/ (AndroidStudio标准集成Demo工程)

| |- Getui_SDK_Demo_Eclipse_official/ (Eclipse集成Demo工程)

3.2 添加Maven库地址

尽管我们会将最新的个推SDK同步部署在JCenter上,但是为了保障稳定使用,我们建议开发者额外配置个推提供的maven库从而实现更快速的访问。

  • 在以项目名为命名的顶层build.gradle文件中,添加个推maven库地址,如下所示:

//Maven URL地址 maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/" }

复制

3.3 配置依赖

  • app/build.gradle文件中引用个推SDK依赖库,如下图所示:

dependencies {

compile fileTree(dir: ‘libs’, include: [‘*.jar’])

compile ‘com.getui:sdk:2.11.1.0’

compile ‘com.android.support:support-v4:+’

}

3.4 配置 so 库

目前个推SDK支持armeabiarmeabi-v7aarm64-v8amipsmips64x86x86_64这几种 CPU 架构,请根据项目情况指定所需的架构。

如果项目中包含的其他 so 库只支持其中某几种 cpu 架构,那么应该根据其他 so 库所支持的 CPU 架构的最小集来配置。否则如果在特定架构上未能支持所有 so 库,则很可能导致程序运行异常。切记!

  • 在项目根目录下的gradle.properties文件中配置useDeprecatedNdk参数,如下图所示:

android.useDeprecatedNdk=true

  • app/build.gradle文件中的android.defaultConfig下指定所需的 CPU 架构,如下图所示:

android {

defaultConfig {

ndk {

abiFilters “armeabi”, “armeabi-v7a”, “x86_64”

}

}

}

3.5 配置个推应用参数

  • app/build.gradle文件中的android.defaultConfig下添加manifestPlaceholders,配置个推相关的应用参数(参见【步骤1】),如下图所示:

manifestPlaceholders = [ GETUI_APP_ID : "APP_ID", GETUI_APP_KEY : "APP_KEY", GETUI_APP_SECRET : "APP_SECRET" ]

复制

  • 请根据【步骤1】获取到的应用参数进行相应替换APP_IDAPP_KEYAPP_SECRET的值

3.6 配置自定义推送服务

为了让推送服务在部分主流机型上更稳定运行,从2.9.5.0版本开始,个推支持第三方应用配置使用自定义Service来作为推送服务运行的载体。

  • 在项目源码中添加一个继承自Android.app.Service的类,参考下列代码实现Service各个生命周期回调方法:

package com.getui.demo;

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import com.igexin.sdk.GTServiceManager;

public class DemoPushService extends Service {

@Override

public void onCreate() {

super.onCreate();

GTServiceManager.getInstance().onCreate(this);

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

super.onStartCommand(intent, flags, startId);

return GTServiceManager.getInstance().onStartCommand(this, intent, flags, startId);

}

@Override

public IBinder onBind(Intent intent) {

return GTServiceManager.getInstance().onBind(intent);

}

@Override

public void onDestroy() {

super.onDestroy();

GTServiceManager.getInstance().onDestroy();

}

@Override

public void onLowMemory() {

super.onLowMemory();

GTServiceManager.getInstance().onLowMemory();

}

}

  • 在AndroidManifest.xml中添加上述自定义Service:

3.7 配置可选权限

  • 上述接入方式已包含个推服务所需的所有必备权限。在此之外,您还可以配置以下可选权限,以便使用个推3.0提供的电子围栏功能。请在AndroidManifest.xml的根标签下添加如下配置:

;

3.8 导入通知栏图标

  • 为了修改默认的通知图标以及通知栏顶部提示小图标,请在资源目录的res/drawable-ldpi/res/drawable-mdpi/res/drawable-hdpi/res/drawable-xhdpi/res/drawable-xxhdpi/等各分辨率目录下,放置相应尺寸的文件名为push.pngpush_small.png图片,如图所示:

  • 建议的push.png图片尺寸如下:

ldpi: 48*48

mdpi: 64*64

hdpi: 96*96

xhdpi: 128*128

xxhdpi: 192*192

  • 该图标push.png将会作为通知图标,如下所示:

  • 建议的push_small.png图片尺寸如下:

ldpi: 18*18

mdpi: 24*24

hdpi: 36*36

xhdpi: 48*48

xxhdpi: 72*72

xxxhdp: 96*96

  • 该图标push_small.png将会作为通知图标展示在通知栏顶部,如下所示:

  • push_small.png设计规范

3.9 资源精简配置

  • 如果您的工程启用了资源精简,即如果在app/build.gradleandroid.buildTypes.release下配置了shrinkResources true,为了避免个推SDK所需资源被错误精简导致功能异常,需要在项目资源目录res/raw中添加keep.xml文件,路径如下:

  • 在SDK资料包中GETUI_ANDROID_SDK/资源文件/raw目录下有keep.xml示例文件,完整内容如下:

<?xml version="1.0" encoding="utf-8"?>

复制

  • 如果你的项目工程已经使用了keep.xml,则只需在tools:keep中增加对@layout/getui_notification的声明,例如:

<?xml version="1.0" encoding="utf-8"?>

复制

  • 如果您的工程使用了AndResGuard进行资源精简,为了避免个推SDK所需资源被错误精简导致功能异常,需要为个推添加白名单配置。

gradle集成AndResGuard的方式,需要您在andResGuardwhiteList节点下添加如下代码:

andResGuard { ... whiteList = [ ... // for getui "R.drawable.push", "R.drawable.push_small", "R.layout.getui_notification", "R.id.getui_*" // 若您需要使用其他自定义推送图标,也需要在此处添加 ] ... }

复制

命令行使用AndResGuard的方式,需要您在config.xml文件中的节点下添加如下代码

复制

4. 编写集成代码


4.1 初始化SDK

我们建议应用开发者在Activity或Service类中调用个推SDK的初始化方法,确保SDK在各种情况下都能正常运行。一般情况下可以在主Activity的onCreate()或者onResume()方法中调用,也可以在多个主要界面Activity的onCreate()或onResume()方法中调用。反复调用SDK初始化并不会有什么副作用。

  • 在应用的 Activity 里导入PushManager类,如下所示:

import com.igexin.sdk.PushManager;

复制

  • 然后在 Activity 的onCreate()或者onResume()方法中调用个推SDK初始化方法。如果使用了自定义推送服务,初始化方法还需要传入新的自定义推送服务名:

// com.getui.demo.DemoPushService 为第三方自定义推送服务 PushManager.getInstance().initialize(this.getApplicationContext(), com.getui.demo.DemoPushService.class);

复制

4.2 接收推送服务事件

从2.9.5.0版本开始,为了解决小概率发生的Android广播丢失问题,我们推荐应用开发者使用新的IntentService方式来接收推送服务事件(包括CID获取通知、透传消息通知等)

  • 在项目源码中添加一个继承自com.igexin.sdk.GTIntentService的类,用于接收CID、透传消息以及其他推送服务事件。请参考下列代码实现各个事件回调方法:

package com.getui.demo;

import android.content.Context;

import android.os.Message;

import android.util.Log;

import com.igexin.sdk.GTIntentService;

import com.igexin.sdk.PushConsts;

import com.igexin.sdk.PushManager;

import com.igexin.sdk.message.FeedbackCmdMessage;

import com.igexin.sdk.message.GTCmdMessage;

import com.igexin.sdk.message.GTTransmitMessage;

import com.igexin.sdk.message.SetTagCmdMessage;

/**

  • 继承 GTIntentService 接收来自个推的消息, 所有消息在线程中回调, 如果注册了该服务, 则务必要在 AndroidManifest中声明, 否则无法接受消息

  • onReceiveMessageData 处理透传消息

  • onReceiveClientId 接收 cid

  • onReceiveOnlineState cid 离线上线通知

  • onReceiveCommandResult 各种事件处理回执

*/

public class DemoIntentService extends GTIntentService {

public DemoIntentService() {

}

@Override

public void onReceiveServicePid(Context context, int pid) {

}

@Override

public void onReceiveMessageData(Context context, GTTransmitMessage msg) {

}

@Override

public void onReceiveClientId(Context context, String clientid) {

Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);

}

@Override

public void onReceiveOnlineState(Context context, boolean online) {

}

@Override

public void onReceiveCommandResult(Context context, GTCmdMessage cmdMessage) {

}

}

  • AndroidManifest.xml中配置上述 IntentService 类:

  • 在个推SDK初始化后,注册上述 IntentService 类:

// com.getui.demo.DemoIntentService 为第三方自定义的推送服务事件接收类

PushManager.getInstance().registerPushIntentService(this.getApplicationContext(), com.getui.demo.DemoIntentService.class);

关于原有广播方式和新的IntentService方式兼容性说明:

  1. 如果调用了registerPushIntentService方法注册自定义IntentService,则SDK仅通过IntentService回调推送服务事件;

  2. 如果未调用registerPushIntentService方法进行注册,则原有的广播接收器仍然可以继续使用。

5. 测试

  • 连接手机或启动Android模拟器,编译运行你的工程,查看logcat信息。在搜索框中输入clientid,如果能显示clientid is xxx日志,则说明个推SDK已经成功运行起来了:
  • 登录个推官网,进入【个推·消息推送】产品,点击【创建推送】,进入待测试应用的推送通知界面:
  • 依次填写通知标题和通知内容,点击发送按钮即可向该推送应用名下所有CID推送通知消息。
  • 如果手机或模拟器收到消息,显示下图所示通知,那么恭喜您,个推SDK接入测试已经成功完成!
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值