做者:吃饱了想睡html
公司准备采用个推做为第三方推送平台,我做为客户端的头号小鸟,掐指一算已经毕业 0.1 年了,Leader 准备把这个简单而又独立的功能点交给我来处理,我紧张兮兮的打开官网集成文档 学习了起来。其实早在本身大二的时候就集成过个推 SDK,溜达一圈又回来集成个推推送SDK了,发现如今的个推 SDK 与当年相比,集成起来真的方便多了。此次集成的是Android推送SDK,但愿这篇文章,可让同窗们能够更加快捷的集成个推推送。android
个人师傅大鸟哥告诉我,集成各种 SDK 的第一步骤都是下载个 Demo,先把 Demo 跑起来看看是什么鬼。咱也不敢问,咱也不敢说,先去下载个Demo玩玩。我选择的是国内版本的个推 SDK,你们能够自行选择要下载的版本。使用 AS 3.1 把 Getui_SDK_Demo_AS_maven 这个工程直接运行起来,出现了下面这个界面(此处已经对我我的参数进行了手动马赛克)。微信
好了,按我大鸟哥的意思至少 demo 已经成功运行起来了,接下去就是去把上述的 APPID,APPKey 等参数换成本身的,那么这些参数又是怎么来的呢?app
看完 Demo 后,慌兮兮打开官网集成文档,原来那些参数是须要建立应用才会得到的,而 cid 是个推SDK 回调的,没啥说的,那就 “注册登陆-建立应用-获取配置” 三连击maven
登入成功后,点击个人应用进入,再接着点击右上角的《建立应用》就能够建立属于本身的应用了,由于我已经建立完成,因此此处有城墙同样厚的马赛克🐩🐩🐩 学习
填写自身 APP 的基础信息 敲黑板!!!,iOS 是默认不勾选的,据说 iOS 有自带的推送系统?先无论了,勾上再说,他们爱用不用。测试
因为我已经注册完成了,填完后的界面就要靠你们自行脑补了。应用建立成功后,就能够查看咱们建立的 APP 所绑定的配置信息了。 看到这里,我终于知道了以前 Demo 里面的那些配置信息是哪里来的了,为了保证我这些参数是有效的, 我还来了一波骚操做:把 Demo 里面的工程的包名换成本身建立 APP 的包名,appid等信息也进行了替换,发现成功拿到了 cid,问了下他们技术支持,大概意思是只要拿到 cid,集成就完成了 90 %!!!,鸟弟我激动的搓起了小手。后面的思路就清晰了,无非是把 Demo 里东西拷到本身的项目里面就完事了嘛。gradle
我使用 Maven 的方式集成了 2.13.2.0 版本的 SDK,选用 Maven是为了方(偷)便(懒)的集成!若是是选择手动集成的,请疯狂戳我 先看下他们的资料包的内容 看这个资料包,发现要导入的东西仍是蛮多的,各类资源,我选择了 Maven 集成,那么 jar 包& so 就无需导入了ui
allprojects { repositories { maven { url 'http://mvn.gt.igexin.com/nexus/content/repositories/releases' } } }
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.getui:sdk:2.13.2.0' }
依葫芦画瓢,这里就直接从 demo 那边拷过来就好了 千万千万要当心,认真核对每个参数,若是出现空格或者 Appid 与 AppKey写反这类的低级错误真的要检查到哭😭😭😭url
manifestPlaceholders = [ GETUI_APP_ID : "你的 APPID", GETUI_APP_KEY : "你的 APP_KEY", GETUI_APP_SECRET : "你的 APP_SECRET" ]
千万千万别忘了,我以前就在这个地方踩了坑,使用 maven 集成就再也不须要 so 文件,切记!
可选可不选的权限,我这边是写上了,由于我项目中正好也须要用到这些权限,美滋滋~
<!-- 支持iBeancon 须要蓝牙权限 --> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <!-- 支持个推3.0 电子围栏功能 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Demo 里面还配置了自定义的 service,我也搞了后,官网上有这么一句话
为了让推送服务在部分主流机型上更稳定运行,从2.9.5.0版本开始,个推支持第三方应用配置使用自定义Service来做为推送服务运行的载体
都这么说了,鸟弟我二话不说就 new 一个自定义服务,进行空实现便可
package com.xinwenwang.xy; import com.igexin.sdk.PushService; public class XyPushService extends PushService { }
新建的 service 千万别忘了把新建的 service 注册到 AndroidManifest.xml 中,多么痛的领悟
<service android:name="com.xxxx.yyyy.XyPushService" android:exported="true" android:label="PushService" android:process=":pushservice"> </service>
深刻一想也能够理解为啥要加个空实现的 service,就像集成微信分享同样,微信分享也要求继承一个指定的 activity。
这么一步步的走下来,要配置挺多东西的,终于要开始初始化 SDK 了 🤷♀️🤷♀️🤷♀️
com.igexin.sdk.PushManager.getInstance().initialize(getApplicationContext(), com.xxxx.yyyy.XyPushService.class);
我这边是在开屏页初始化个推推送的,你们能够随意,只要在 activity 初始化便可,建议是初始化越早越好
那么问题来了,搞了上面这么多东西,推送的消息或者透传是怎么个接收法呢?一头雾水有木有!我又跑回去看了看 Demo,发现还有个叫 DemoIntentService 的玩意,打开一看里面有不少不少的回调,鸟哥说的话果真带劲呀,Demo 理解透,项目集成快! 建议你们直接把 Demo 中的 DemoIntentService 拷到本身的项目中,若是须要修改一些DemoIntentService 里面的内容,自便哈。记得修改个名字,否则放在本身的项目里面真的太 low 了!我暂名为 XyPushIntentService。
<!-- 用户自定义服务继承自GTIntentService,做为SDK与APP桥梁服务,用来接收各类消息和命令回复--> <service android:name=".XyPushIntentService" android:permission="android.permission.BIND_JOB_SERVICE"/>
// XyPushIntentService 为第三方自定义的推送服务事件接收类 PushManager.getInstance().registerPushIntentService(getApplicationContext(), XyPushIntentService.class);
总算集成完了,导入上述东西须要细心些哈,漏了一步有的你难受的。 项目跑起来后,在 XyPushIntentService 会有 cid 的回调,最直观的方法是在 logcat 里面输入 clientid ,就能够看到在控制台输出日志了,这个 clientID 至关于此 APP 在该设备上的惟一识别码。 最后一步确定是建立通知了。
这边只是建立了一个最最最简单的样式仅供参考,我看这界面上的功能估计能够知足各类运营的玩法了,我这边就不献丑了:)。 推送测试消息的时候,应用必定要在前台,在前台,在前台,重要的事情说三遍
#尾声 首次集成这类大型 SDK 让我意想不到的顺利,我和个人小伙伴们都😮惊呆了😮,后面我再仔细阅读了下个推的文档,他们家的功能仍是很齐全的,我仅是进行了最基础的集成而已,不过也能够知足产品与运营的需求了。不得不提一句,他们的技术支持服务确实够劲(此处确实是一条广告实锤了~),回复的快而准。如今我得赶忙去写 Bug 了,告辞👋👋👋~~~