之前一直在使用极光推送,这次项目打算使用个推试试!

集成失败原因:

1、检查自己的APPID等信息

2、检查自己的.jar和.so文件

3、检查AndroidManifest.xml

<!-- 自定义权限 自定义权限解释:部分手机型号不能正常运行个推SDK,需添加自定义权限进行配置。-->
<uses-permission android:name="getui.permission.GetuiService.${applicationId}" />
<permissionandroid:name="getui.permission.GetuiService.${applicationId}"android:protectionLevel="normal" >
</permission>

关于Android Studio

Android Studio是Google力推的Android开发环境,在IntelliJ IDEA基础上进行了大量功能完善和优化,包括:

  • 基于Gradle的构建支持
  • Android 专属的重构工具和Instant Run快速修复技术
  • 功能强大的布局编辑器,可以让你拖拉 UI 控件并进行效果预览
  • 全新的 Android 模拟器大约比之前的模拟器快 3 倍,同时由于 ADB 的增强,传输应用和数据到模拟器上的速度比到物理设备上快 10 倍。
  • 提供性能分析工具以捕获性能、可用性、版本兼容性等问题

因此我们强烈推荐Android开发者将现有项目迁移到Android Studio环境,并在Android Studio下更快地实现个推SDK的集成工作。

前言

  • 本文档介绍Android Studio提供的基于Maven的快速集成方案,配置简单、不容易出问题、后续更新维护方便,因此我们强烈推荐应用开发者根据本文档步骤进行个推集成。
  • 本文档适用SDK版本:2.9.5.0及以后
  • 请参考Getui_SDK_Demo_AS_mavenDemo工程

1. 创建个推应用

  • 请登录个推网址,选择登记应用并填写应用名称和包名信息,完成应用创建:
  • 点击应用配置,获取到相应的AppID、AppKey、AppSecret信息:

2. 打开项目工程

  • 启动Android Studio, 打开您之前创建的Android项目工程:
  • 如果需要从原有的Eclipse项目导入,请选择Import project (Eclipse ADT, Gradle, etc.):

3. 添加个推SDK及相关配置
老版本升级到 2.9.5.0 及以上版本注意事项:

1、替换旧的GetuiSDKxxx.jar,并删除GetuiExt-xxx.jar和所有jni相关目录下的libgetuiext.so
2、删除AndroidManifest.xml中以下组件相关的配置,最新的SDK已经不再需要这些组件:
        com.igexin.sdk.PushServiceUser
        com.igexin.sdk.PushManagerReceiver
        com.igexin.getuiext.activity.GetuiExtActivity
        com.igexin.getuiext.service.PayloadReceiver
        com.igexin.getuiext.service.GetuiExtService
3、删除app/src/main/res/layout目录下原来旧的布局文件,包括getui_notification.xml、notification_inc.xml和increment_popup_dialog.xml,请使用最新SDK所提供的getui_notification.xml即可

3.1 个推Android SDK资料包结构

GETUI_ANDROID_SDK/|- readme.txt (SDK资料包说明)|- 接入文档/ (Android SDK相关集成文档PDF版本)|- 资源文件/|    |- res/|    |    |- layout/|    |    |    |- getui_notification.xml (个推SDK所需的布局文件)|    |    |- raw|    |    |    |- keep.xml (用于资源保留的描述文件)|    |- so/ (各 CPU 架构so库)|    |   |- arm64-v8a/|    |   |- 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 {@Overridepublic void onCreate() {super.onCreate();GTServiceManager.getInstance().onCreate(this);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {super.onStartCommand(intent, flags, startId);return GTServiceManager.getInstance().onStartCommand(this, intent, flags, startId);}@Overridepublic IBinder onBind(Intent intent) {return GTServiceManager.getInstance().onBind(intent);}@Overridepublic void onDestroy() {super.onDestroy();GTServiceManager.getInstance().onDestroy();}@Overridepublic 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() {}@Overridepublic void onReceiveServicePid(Context context, int pid) {}@Overridepublic void onReceiveMessageData(Context context, GTTransmitMessage msg) {}@Overridepublic void onReceiveClientId(Context context, String clientid) {Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);}@Overridepublic void onReceiveOnlineState(Context context, boolean online) {}@Overridepublic 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接入测试已经成功完成!

Android 消息推送:个推相关推荐

  1. 移动应用消息推送及推送原理

    消息推送 消息通知分本地通知和远程推送通知. 本文是记录React Native使用aws push notifications推送及相关配置及遇到的相关问题.在twilio和aws中选择使用aws的 ...

  2. iOS远程消息推送(信鸽推送平台)

    首先进入信鸽推送平台网站,登录, 下载iOS SDK文档,解压文件,将demo文件夹下面的sdk文件拖入工程中. 在苹果开发者网站,创建自己的APP id ,推送证书,描述文件.  详情见推送平台的文 ...

  3. 极光推送——App推送

    极光推送:主要用于APP实时获取最新消息.本文主要描述如何使用极光提供的SDK进行推送. 极光推送中主要需要配置的参数如下: 推送平台:JPush 当前支持 Android, iOS, Windows ...

  4. php主动推送弹幕_源起网-织梦发布文档主动百度推送熊掌推送批量推送

    源起网-织梦发布文档主动百度推送熊掌推送批量推送 环境要求 PHP必须开启了curl扩展 百度主动推送(实时)可以缩短百度爬虫发现您站点新链接的时间,使新发布的页面可以在第一时间被百度收录 织梦程序我 ...

  5. android推送如何推送不在线设备,推送系统从0到1(四):消息如何到达用户设备...

    本篇主要为大家揭秘推送消息是如何传输的,如何到达用户设备上的,在不同的设备上会如何展示. 在上一篇文章中,我们可以知道在建立推送任务的过程中,需要考虑带有自滤功能的用户池构建.筛选有效用户.设置推送内 ...

  6. 阿里云消息推送同时推送到iOS和android问题解决

    1. SDK.InvalidRegionID :can not find endpoint to access 在阿里开发手册中给出的解决方法,产生原因是由于SDK核心包版本过低,升级版本即可解决. ...

  7. android推送接口,推送API

    推送API 简述 个推为开发者提供了如下3种消息推送方式: toSingle :简称"单推",指向单个用户推送消息 toList:简称"批量推",指向制定的一批 ...

  8. Android 推送-个推

    最近闲来无事就把个推研究了一下,发现个推的SDK版本已经更新到2.9.5.0了,而且跟以前的版本相比感觉变化实在是太大了. 以前的版本在配置清单里面的配置为 <!-- 配置第三方Receiver ...

  9. Android 阿里推送正常推送以及辅助通道走过的坑,字节跳动+阿里+华为+腾讯等大厂Android面试题

    dependencies { ...... compile 'com.aliyun.ams:third_vivopush:2.9.0.1' } 在AndroidManifest文件中添加如下配置: & ...

  10. Android 阿里推送正常推送以及辅助通道走过的坑,Android经典面试

    3.6 VIVO依赖 如需配置VIVO通道还需要添加VIVO推送SDK依赖: dependencies { ...... compile 'com.aliyun.ams:third_vivopush: ...

最新文章

  1. [转]苹果iOS 5限制应用本地存储问题
  2. 数据库MySQL关系模型之基本概念
  3. 2015年个人年度目标总结-产品狗版
  4. debian重启ssh服务_Jenkins远程部署Linux服务器
  5. python乐观锁和悲观锁
  6. OPENCV-2 学习笔记
  7. PHP面向对象设计的五大原则
  8. python s append_Python Pandas Series.append()用法及代码示例
  9. RegisterWaitForSingleObject的使用
  10. inPixio Photo Studio 11(图片编辑软件)官方正式版V11.0.7709.20526 | 超好用的图片编辑器
  11. oracle服务商前几名,oracle厂商服务有哪几种
  12. 如何复制百度文库内容?
  13. 微信境外支付(附PHP例子,JAVA工具类)
  14. 冷高轮时间windows电脑屏幕保护
  15. python里打印空格_python打印空格
  16. 制造业生产过程中多源异构数据处理方法综述
  17. 论文解读:iDRNA-ITF:基于诱导和转移框架识别蛋白质中的DNA和RNA结合残基
  18. 女生突然不回微信,那你首先得明白不回微信的原因
  19. 【erlang】字符串转成term
  20. (10.2.3.3)静电的设计教室:APP设计利器Sketch教程(03)-让插件助你一臂之力(原创

热门文章

  1. 对电冰箱制冷系统检漏抽真空的方法
  2. 前端系列——Electron工程构建(普通工程,Vue集成)
  3. matlab神经网络训练停止条件,matlab神经网络工具箱的网络训练问题
  4. google map限制地图缩放级别和显示范围
  5. STM32F103ZET6程序移植到C8T6
  6. vue中的for循环路由二级路由
  7. Ubuntu安装NVIDIA英伟达显卡驱动教程
  8. html中nbsp无效,html中 nbsp; 和空格的区别
  9. MySQL使用IN、EXISTS、ANY、ALL关键字的子查询
  10. 自动驾驶路径跟踪控制——纯追踪控制