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

news/2025/1/13 11:01:26/

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

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推送基本大体流程基本完成。之前的小米华为也是类似。


http://www.ppmy.cn/news/325499.html

相关文章

vivo 服务端监控体系建设实践

作者&#xff1a;vivo 互联网服务器团队- Chen Ningning 本文根据“2022 vivo开发者大会"现场演讲内容整理而成。 经过几年的平台建设&#xff0c;vivo监控平台产品矩阵日趋完善&#xff0c;在vivo终端庞大的用户群体下&#xff0c;承载业务运行的服务数量众多&#xff0c…

【营】在开局,提升【豹】发力 - vivo活动插件管理平台

一、背景 随着vivo悟空活动中台活动组件越来越多&#xff0c;活动中台开发的小伙伴们愈发的感知到我们缺少一个可以沉淀通用能力&#xff0c;提升代码复用性的组件库。在这个目标基础之上诞生了acitivity-components&#xff0c;但是随着组件的抽离增多&#xff0c;在和上下游…

无需ROOT卸载或禁用vivo / oppo手机的内置软件

需要注意的&#xff1a;卸载或禁用未知功能 App 可能会导致手机故障&#xff0c;在卸载或禁用 App 之前先备份手机内的重要数据。 本文使用的手机型号&#xff1a;vivo Z5 / oppo Reno Z 需要的软件&#xff1a; ADB下载地址&#xff1a;https://adbdownload.com/ ES文件浏…

怎样关闭vivo的HTML查看器,vivo安全模式在哪儿关闭?

01 vivo关闭安全模式&#xff0c;有两种方法&#xff0c;第一重启手机&#xff0c;长按手机的电源键&#xff0c;点击“重启”&#xff0c;重启之后&#xff0c;手机就会自动关闭安全模式了。第二恢复出厂设置&#xff0c;打开手机设置&#xff0c;点击更多设置&#xff0c;进入…

安全隐私之路没有尽头,vivo 坚守用户隐私安全底线

近日&#xff0c;国家网信办依据《个人信息保护法》《App 违法违规收集使用个人信息行为认定方法》等法律法规&#xff0c;集中查处了近 80 款“侵犯个人信息合法权益”的违法违规 App。这些 App 被查处的原因包括但不限于以下几点&#xff1a;“强制索要非必要权限”“无隐私政…

vivo手机mitmproxy安全证书安装

在使用手机进行App爬取时&#xff0c;要拦截https请求时&#xff0c;需要进行证书设置。 而mitmproxy在使用pip命令安装该模块后&#xff0c;会在你的用户目录下出现.mitmproxy目录&#xff0c;里面就包含了一套CA证书&#xff0c;如下&#xff1a;使用vivo手机安装证书时&…

如何卸载vivo手机自带的应用程序(尤其是开启开发者选项后出现在状态栏的黄色警告)

iq为零&#xff0c;性价比确实高&#xff0c;入手后发现自带软件确实烦&#xff0c;发现可以在不root下去除自带软件&#xff0c;做了尝试后&#xff0c;发现确实可行&#xff0c;公布出来给需要的人。毕竟以前是低配高价的厂妹机&#xff0c;不吐槽它就不错了&#xff0c;怎么…

DAY33-前端基本知识

nodejs nodejs的模块大概可以分为三种&#xff1a;核心模块 第三方模块 自定义模块。每种模块的加载优先级都不相同。 核心模块&#xff1a;nodejs内置模块&#xff0c;可以理解为nodejs的基础API&#xff0c;例如我们常用的path os fs等等。这些模块也是我们nodejs与服务器交…