老生常谈,推送接入已经不是什么难事,跟着文档走几小时就能搞定。不过我这里还是要记录一下,因为我在接入的时候还是有坑。希望这篇文章可以帮到你。

VVIO客户端

厂商推送,无非就是收到推送拉起通知。所以在最新版中,官方说明已经移除了透传部分,无需再用透传接收自行处理了,向华为小米看齐了。
数据接收需要在被拉起的Activity中使用getIntent接收 就等于你普通页面间传值。
依赖包也又jar升级为aar少了部分配置。
详细适配步骤请移步VIVO推送官方文档。

这里只讲一下参数接收

在你想要点击通知后拉起的Activity配置

<activity android:name=".CustomActivity"   android:exported="true"><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><dataandroid:host="com.vivo.push.notifysdk"android:path="/detail"android:scheme="vpushscheme" /></intent-filter>
</activity>

参数解析:
关于意图过滤器详解请移步博客园相关文章
这里只说服务端发送的参数Uri和客户端接收之间的对应关系
比如 <data /> 里
android:hostandroid:pathandroid:scheme
分别对应的值为:
com.vivo.push.notifysdk/detailvpushscheme

那么服务端的对应 Uri 也就是想客户端发送的数据 就应该这么写

intent://com.vivo.push.notifysdk/detail?#Intent;scheme=vpushscheme;end

OK!这样就可以拉起你的 CustomActivity 页面了。
那如果要传递参数 该怎么搞呢?
同理

intent://com.vivo.push.notifysdk/detail?customkey=param;#Intent;scheme=vpushscheme;end

其中customkey为你传参的键 param为键对应的值

对应Activity中的接收就是

getIntent().getStringExtra("customkey");

这样就可以在通知拉起 CustomActivity 页面时通过Intent接收到后台传递过来的值了。拿到值就可以做你自己想做的操作了。

关于混淆

-dontwarn com.vivo.push.** -keep class com.vivo.push.**{*; } -keep class com.vivo.vms.**{*; }-keep class xxx.xxx.xxx.PushMessageReceiverImpl{*;}//这个是你需要透传的那个类,如果没实现透传接口 可以忽略。

VIVO服务端

服务端开发很少有人讲,因为推送服务器和app这快都是我一个搞的,所以这里顺带讲一下。
服务端一般分为SDK开发和API开发。说白了:就是服务器去请求第三方推送的接口来显示推送的点目的。
API开发和SDK开发怎么选仁者见仁智者见智。
我这里选择SDK开发,因为快。等于第三方已经帮你封装好了网络请求部分。
VIVO推送服务端文档

服务端VIVO的核心是Sender类 也就是一个网络封装类,你直接调用即可。

Sender sender = new Sender("appSecret");//注册登录开发平台网站获取到的appSecret

然后就是一个Token 我们自己推送服务器和第三方推送之间的一个登陆凭证。
按照官方的说法是本地做处理,最好4-6小时重新更新一次Token。

Result tokenResult = sender.getToken(appId, appKey);
String token = tokenResult.getAuthToken();

这里获取到的Token 需要你保存到本地。然后加个计时器或者时间戳什么的。反正触发条件是每隔4-6小时重新调用一次getToken即可。以避免Token失效。

OK!拿到Token后 就可以发送推送指令了。发送推送指令 就需要构造消息体:

Message.Builder vPushBuilder = new Message.Builder().title("XXX")//标题.content("XXXXXX")//内容.notifyType(4)//响铃+震动.timeToLive(300)//存活时间 必填 单位/秒 这里根据你们APP的应用场景来定,我这里由于时效性,时间太久这条推送就没意义了,所以设置的5分钟。.skipType(3)//打开App指定页.classification(1)//消息类型 0运营消息 1系统消息(无限制).pushMode(0)//消息类型 0正式推送 1测试推送(测试推送上限20个设备).requestId(System.currentTimeMillis())//请求唯一id 标记当前 我这里用时间戳代替,请根据自己需求自行定制.pushMode(0);//0正式推送 1测试推送(基本没用).skipContent("Intent URI")//跳转内容.regId("User Token")//发送推送.build();

这里参数只讲一下
skipContent(“Intent URI”)和regId(“User Token”)

skipConent 为 传递给App的参数 也就是 这段代码

intent://com.vivo.push.notifysdk/detail?#Intent;scheme=vpushscheme;end

regId 为 app 端调用vivo推送的sdk后获取到的一个唯一设备token。可以理解为指定某一台设备。

//app端获取 regId
String regId = PushClient.getInstance(getApplicationContext()).getRegId();

消息构造完成。
接下来就是发送,这里使用单推,也就是单独推送(指定用户),也有群发和指定别名推送,这里请查阅官方文档根据自身需求操作。

sender.setAuthToken(IMServer.vPushToken);//设置推送的必要参数authToken(调用鉴权方法获得)
//发送单推消息
Result result = sender.sendSingle(builder.regId(userTokensJson).build());
//回调 其他回调参数请查阅官方文档
result.getResult()   // 获取平台返回的 0成功,非0失败
result.getDesc()    // 获取请求的服务器信息

result.getResult() == 0 表示推送成功,如果!=0 推送失败,可以做再次推送的处理。就看自身业务需求了。

到此 VIVO推送 要说的地方就整理完毕

接下来时OPPO推送 两个差不多,接了VIVO再集成OPPO就很快了。

OPPO 客户端

OPPO推送 范围比较广,接入OPPO推送就等于同时适配
OPPO Realme 和 一加(新机型) 因为它们的ROM都是Color OS
详情官方文档

权限

<uses-permission android:name="com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE" />
<uses-permission android:name="com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE" />

参数接收

和VIVO同理 这里不再赘述。

关于混淆

-keep public class * extends android.app.Service //app一般都会默认混淆
-keep class com.heytap.msp.** { *;}

推送通道适配

Andoird 8.0 引入了 通知通道的概念,具体请自行搜索 [ Android8.0通知适配 ]
这里只说一下通道id 因为服务器端需要用到

NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH);

其中 channelId 就是通道id 自定义 必须创建,否则无法接收OPPO推送

OPPO服务端

OPPO服务端也是Sender 注意两个包不一样,只是名字相同。

Sender sender = new Sender("appKey", "masterSecret");

这里Sender 内部进行了封装,内部维护了一个token时效,我问了OPPO的开发人员,他们说不用处理。会自动更新。

不过消息对象是 Notification 比较符合Android开发的概念

Notification notification = new Notification();
notification.setTitle("OPush->" + contentBean.getTitle());
notification.setContent(contentBean.getContent());
notification.setOffLineTtl(300);//存活时间 必填 单位/秒 这里 5分钟
notification.setStyle(1);//默认短文本1 长文本2 大图3
notification.setClickActionType(4);//点击动作 4为打开应用内页 也就是某个Activity
notification.setOffLine(false);//不要离线消息,这个推送是实时的。3天不登录就不推送了。
notification.setClickActionActivity("包名.CustomActivity");//设置内页地址
notification.setActionParameters("{\"key\":\"" + param+ "\"}");//传递的参数 json 格式 举例:{"key","param"}

不过 OPPO推送的 参数格式 不是Intent URI了,改为了JSON字符串。这里写的时候注意转码或者用 JsonObject 自行转换。

{"key":"param","key0":"param0"}

上面说了,无需操心token问题 那么数据构造完成,就需要发送了。

这里还是举例单推。

发送一条单推:

Target target = Target.build(userToken); //创建发送对象
Result result = IMServer.oPushSender.unicastNotification(messageObj, target);result.getMessageId()   // 获取平台返回的messageId
result.getStatusCode()    // 获取http请求状态码
result.getReturnCode().getCode()    // 获取平台返回码

其中 userToken 为oppo推送的app端sdk生成。

HeytapPushManager.register(getApplicationContext(), OPPO_APP_KEY, OPPO_APP_SECRET, new ICallBackResultService() {@Overridepublic void onRegister(int code, String s) {if (code == 0) {Log.i("注册成功", "registerId:" + s);} else {Log.i("itl-注册失败", "code=" + code + ",msg=" + s);}}public void onUnRegister(int code){...}public void onGetPushStatus(final int code, int status) {...}public void onGetNotificationStatus(final int code, final int status){...}});

其中 onRegister为 回调类 中 向oppo推送注册成功后获取的唯一设备id

至此,OV推送基本大体流程基本完成。之前的小米华为也是类似。

VIVO推送接入 OPPO推送接入 客户端+服务端相关推荐

  1. OPPO消息推送服务器,OPPO推送平台服务端API.PDF

    OPPO推送平台服务端API.PDF OPPO推送平台服务端API 修订记录: 版本号 修订人 修订日期 修订描述 V0.1 宫建涛 2017-03-28 初始版本 V0.2 宫建涛 2017-07- ...

  2. Uniapp的消息推送Unipush(在线、离线、服务端)

    基本配置 Hbuild下打开PUSH,Unipush功能,并详细阅读"使用指南".         打包配置安卓包名,例如pts.sh 打包选择自有证书 自有证书生成:D:\Jav ...

  3. 送餐app+php,订餐APP源码Food Delivery App v2.1(客户端+服务端)

    android订餐APP源码Food Delivery App v2.1(客户端+服务端),包含android客户端源码.php+mysql服务端源码. Version 2.1 Food Delive ...

  4. OPPO推送服务客户端SDK接入

    目前SDK版本为V3.0.0,只支持Android 4.4或以上版本的手机系统,如无特殊说明,兼容历史版本.开发者技术支持:QQ群1(1125363958).QQ群2(1125372593). 二.S ...

  5. (4.2.12)浅谈第三方推送[推送基础]:百度推送、小米推送、华为推送

    市面上目前做免费推送服务的有很多,友盟.极光.百度.小米.华为等,由于android机型的多样性,在使用单独的一种推送时,往往会造成一些机型无法获取(当然,内部原因可能很复杂). Android 第三 ...

  6. JAVA实现QQ:实现文字聊天、QQ用户登录、拉取在线用户列表、无异常退出、私聊、发文件、下载文件、离线留言、服务端推送新闻等功能(后端无界面,Utilty源码在后面、)

    这个仿QQ项目是参考韩顺平老师的多线程课程做的,因为个人觉得非常有意义特别是让我对多线程通信又了一个新的理解因此我准备写一篇总结(如果觉得视频太长可以参考下): 具体视频地址:大家给韩老师一键三连[韩 ...

  7. 免费开源iPhone推送消息工具+服务端-Bark

    什么是Bark Bark 是一款纯推送提醒服务,主要用来给自己的 iPhone 发送自定义内容的推送,可以是文字.链接,不提供历史记录功能,阅后即焚.服务端和客户端均开源,实时性和稳定性都非常可靠,支 ...

  8. Android vivo手机接入极光推送闪退

    最近项目中用到推送功能,选择接入极光推送,可是根据官方文档接入之后,app一启动过一会就闪退,而且是必闪退,翻来覆去看了几遍文档,没有遗漏都开始怀疑人生了. 然后定位问题,把极光推送初始化方法注释就不 ...

  9. android 友盟服务端推送给客户端,Android 友盟推送 厂商通道 接入Notes

    image 前言 本文章也是就在接入过程中遇到的一些小问题做个记录,希望对遇到问题的开发者有些许帮助. 接入的SDK 版本为:Push SDK 6.1.0 官方文档 目前,友盟推送仅支持以下五家厂商的 ...

最新文章

  1. 数据库复习1——数据库体系结构和关系系统
  2. ASP.NET开发经验积累
  3. 跨平台日志清理工具 Log-Cutter v1.0.3 正式发布
  4. 【~~~】POJ-1006
  5. 使用ADO的通用DAL
  6. ROS的学习(二十一)使用时间和TF
  7. IOS用正则验证手机号
  8. 六分钟八法则塑造优秀程序员
  9. 1 分析计算机上网时断时续的原因,网络丢包现象分析与解决方案
  10. 有没有测试牙齿需不需要修正的软件,测一测,你的牙齿需要矫正吗?
  11. 一个古老故事--线程和线程池的故事
  12. 关于Android证书MD5获取
  13. 启强书屋(书荒地老)
  14. Dedecms信息泄露漏洞(CVE-2018-6910)
  15. 【实战】物联网安防监控项目【4】———从网页上控制A9的LED灯
  16. EXCEL之函数调用
  17. 东芝原厂授权代理,TC358762,MIPI 转 RGB,高清分辨率,支持墨水屏
  18. PHP与软件破解导学
  19. 初学者深度学习工作站配置
  20. SMART 200PLC指针寻址

热门文章

  1. JavaSE面向对象
  2. 【Jenkins】win 10 / win 11:Jenkins 的下载、安装、部署(Jenkins 2.134 基于 Java 8)
  3. hostapd.conf 解析
  4. Git使用SSH拉取代码,附带生成SSH Key(超详细之一定能成功)
  5. 区块链 - 展望2022年元宇宙会呈现哪些趋势?
  6. python3解两数之和
  7. 超好用一键卸载软件和软件注册码
  8. Python机器学习1-餐饮企业综合分析
  9. 输入阻抗 输出阻抗
  10. vue+axios以流的形式下载文件