V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
getui
V2EX  ›  问与答

个推 Android 推送 SDK 集成教程详解

  •  
  •   getui · 2019-08-27 17:36:25 +08:00 · 1528 次点击
    这是一个创建于 1909 天前的主题,其中的信息可能已经有所发展或是发生改变。

    概述

    公司准备采用个推作为第三方推送平台,我作为客户端的头号小鸟,掐指一算已经毕业 0.1 年了,Leader 准备把这个简单而又独立的功能点交给我来处理,我紧张兮兮的打开官网集成文档 学习了起来。其实早在自己大二的时候就集成过个推 SDK,溜达一圈又回来集成个推推送 SDK 了,发现现在的个推 SDK 与当年相比,集成起来真的方便多了。这次集成的是 Android 推送 SDK,希望这篇文章,可以让同学们可以更加快捷的集成个推推送。

    思维导图

    在这里插入图片描述

    详细步骤

    下载 demo

    我的师傅大鸟哥告诉我,集成各类 SDK 的第一步骤都是下载个 Demo,先把 Demo 跑起来看看是什么鬼。咱也不敢问,咱也不敢说,先去下载个 Demo玩玩。我选择的是国内版本的个推 SDK,大家可以自行选择要下载的版本。使用 AS 3.1 把 Getui_SDK_Demo_AS_maven 这个工程直接运行起来,出现了下面这个界面(此处已经对我个人参数进行了手动马赛克)。

    在这里插入图片描述 好了,按我大鸟哥的意思至少 demo 已经成功运行起来了,接下去就是去把上述的 APPID,APPKey 等参数换成自己的,那么这些参数又是怎么来的呢?

    创建个推应用

    看完 Demo 后,慌兮兮打开官网集成文档,原来那些参数是需要创建应用才会获得的,而 cid 是个推 SDK 回调的,没啥说的,那就 “注册登录-创建应用-获取配置” 三连击

    注册登录账号

    GTAccount

    创建应用

    登入成功后,点击我的应用进入,再接着点击右上角的《创建应用》就可以创建属于自己的应用了,因为我已经创建完成,所以此处有城墙一样厚的马赛克🐩🐩🐩 在这里插入图片描述

    填写自身 APP 的基础信息 在这里插入图片描述 敲黑板!!!,iOS 是默认不勾选的,听说 iOS 有自带的推送系统?先不管了,勾上再说,他们爱用不用。

    获取配置数据

    由于我已经注册完成了,填完后的界面就要靠大家自行脑补了。应用创建成功后,就可以查看我们创建的 APP 所绑定的配置信息了。 在这里插入图片描述 看到这里,我终于知道了之前 Demo 里面的那些配置信息是哪里来的了,为了保证我这些参数是有效的, 我还来了一波骚操作:把 Demo 里面的工程的包名换成自己创建 APP 的包名,appid 等信息也进行了替换,发现成功拿到了 cid,问了下他们技术支持,大概意思是只要拿到 cid,集成就完成了 90 %!!!,鸟弟我激动的搓起了小手。后面的思路就清晰了,无非是把 Demo 里东西拷到自己的项目里面就完事了嘛。

    添加依赖及配置

    我使用 Maven 的方式集成了 2.13.2.0 版本的 SDK,选用 Maven 是为了方(偷)便(懒)的集成!如果是选择手动集成的,请疯狂戳我 先看下他们的资料包的内容 在这里插入图片描述 看这个资料包,发现要导入的东西还是蛮多的,各种资源,我选择了 Maven 集成,那么 jar 包& so 就无需导入了

    添加 maven 库

    • 在项目根目录的 build.gradle 中添加 maven 库,不然 load 不到 jar 包
    allprojects {
        repositories {
    
            maven {
              url 'http://mvn.gt.igexin.com/nexus/content/repositories/releases'
            }
        }
    }
    
    • 在 项目 /app 目录下的 build.gradle 中配置 jar 包
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.getui:sdk:2.13.2.0'
    }
    

    配置之前创建的 appid 等

    依葫芦画瓢,这里就直接从 demo 那边拷过来就行了 千万千万要小心,认真核对每一个参数,如果出现空格或者 Appid 与 AppKey 写反这类的~~低级~~错误真的要检查到哭😭😭😭

    manifestPlaceholders = [
        GETUI_APP_ID : "你的 APPID",
        GETUI_APP_KEY : "你的 APP_KEY",
        GETUI_APP_SECRET : "你的 APP_SECRET"
    ]
    

    导入个推 res 文件

    千万千万别忘了,我之前就在这个地方踩了坑,使用 maven 集成就不再需要 so 文件,切记!

    • 把 Getui_SDK_Demo_AS_maven/资源文件 /res 里面的文件一一对应导入到自己项目中的 app/src/main/res 下面

    配置可选权限

    可选可不选的权限,我这边是写上了,因为我项目中正好也需要用到这些权限,美滋滋~

          <!-- 支持 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 了 🤷‍♀️🤷‍♀️🤷‍♀️

    初始化 SDK

    com.igexin.sdk.PushManager.getInstance().initialize(getApplicationContext(), com.xxxx.yyyy.XyPushService.class);
    
    

    我这边是在开屏页初始化个推推送的,大家可以随意,只要在 activity 初始化即可,建议是初始化越早越好

    接收推送服务事件

    那么问题来了,搞了上面这么多东西,推送的消息或者透传是怎么个接收法呢?一头雾水有木有!我又跑回去看了看 Demo,发现还有个叫 DemoIntentService 的玩意,打开一看里面有很多很多的回调,鸟哥说的话果然带劲呀,Demo 理解透,项目集成快! 建议大家直接把 Demo 中的 DemoIntentService 拷到自己的项目中,如果需要修改一些 DemoIntentService 里面的内容,自便哈。记得修改个名字,不然放在自己的项目里面真的太 low 了!我暂名为 XyPushIntentService。

    • 在 AndroidManifest.xml 中配置上述 IntentService 类:
           <!-- 用户自定义服务继承自 GTIntentService,作为 SDK 与 APP 桥梁服务,用来接收各种消息和命令回复-->
            <service android:name=".XyPushIntentService"
                android:permission="android.permission.BIND_JOB_SERVICE"/>
    
    • 在个推 SDK 初始化后,注册上述 IntentService 类
    // XyPushIntentService 为第三方自定义的推送服务事件接收类
    PushManager.getInstance().registerPushIntentService(getApplicationContext(), XyPushIntentService.class);
    

    测试

    总算集成完了,导入上述东西需要细心些哈,漏了一步有的你难受的。 项目跑起来后,在 XyPushIntentService 会有 cid 的回调,最直观的方法是在 logcat 里面输入 clientid,就可以看到在控制台输出日志了,这个 clientID 相当于此 APP 在该设备上的唯一识别码。 在这里插入图片描述 最后一步肯定是创建通知了。 在这里插入图片描述

    在这里插入图片描述

    这边只是创建了一个最最最简单的样式仅供参考,我看这界面上的功能估计可以满足各种运营的玩法了,我这边就不献丑了:)。 推送测试消息的时候,应用一定要在前台,在前台,在前台,重要的事情说三遍

    #尾声 首次集成这类大型 SDK 让我意想不到的顺利,我和我的小伙伴们都😮惊呆了😮,后面我再仔细阅读了下个推的文档,他们家的功能还是很齐全的,我仅是进行了最基础的集成而已,不过也可以满足产品与运营的需求了。不得不提一句,他们的技术支持服务确实够劲(此处确实是一条广告实锤了~),回复的快而准。现在我得赶紧去写 Bug 了,告辞👋👋👋~~~

    转载自: https://blog.csdn.net/u013651405/article/details/99891093 作者:吃饱了想睡

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3069 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:17 · PVG 08:17 · LAX 16:17 · JFK 19:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.