微信开放平台微信登录功能 /消息推送服务器设置

微信开放平台微信登录功能 /消息推送服务器设置

消息推送

第一步:填写服务器配置

登录OPEN平台后,在移动应用/网页应用详情页面 -「消息推送」中,管理员可启用消息服务,填写服务器地址(URL)、令牌(Token) 和 消息加密密钥(EncodingAESKey)等信息。

  • URL: 开发者用来接收微信消息和事件的接口 URL。开发者所填写的URL 必须以 http:// 或 https:// 开头,分别支持 80 端口和 443 端口。
  • Token: 可由开发者可以任意填写,用作生成签名(该 Token 会和接口 URL 中包含的 Token 进行比对,从而验证安全性)。
  • EncodingAESKey: 由开发者手动填写或随机生成,将用作消息体加解密密钥。

同时,开发者可选择消息加解密方式:明文模式(默认)、兼容模式和安全模式。可以选择消息数据格式:XML 格式(默认)或 JSON 格式。

模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。切换加密方式和数据格式需要提前配置好相关代码,详情请参考 消息加解密说明

第二步:验证消息的确来自微信服务器

开发者提交信息后,微信服务器将发送 GET 请求到填写的服务器地址 URL 上,GET请求携带参数如下表所示:

参数描述
signature微信加密签名,signature结合了开发者填写的 token 参数和请求中的 timestamp 参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串

开发者通过检验 signature 对请求进行校验(下面有校验方式)。若确认此次 GET 请求来自微信服务器,请原样返回 echostr 参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

  1. 将token、timestamp、nonce三个参数进行字典序排序
  2. 将三个参数字符串拼接成一个字符串进行sha1加密
  3. 开发者获得加密后的字符串可与 signature 对比,标识该请求来源于微信

验证 URL 有效性成功后即接入生效。

检验 signature 的PHP示例代码:

private function checkSignature()
{
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];

    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );

    if ($tmpStr == $signature ) {
        return true;
    } else {
        return false;
    }
}

PHP示例代码下载:下载

第三步:接收消息和事件

当某些特定的用户操作引发事件推送时(如用户资料变更时),微信服务器会将消息(或事件)的数据包以 POST 请求发送到开发者配置的 URL,开发者可以依据自身业务逻辑进行响应。事件类型消息推荐使用 FromUserName + CreateTime 排重。

服务器收到请求必须做出下述回复,这样微信服务器才不会对此作任何处理,并且不会发起重试。详见下面说明:

  1. 直接回复success(推荐方式)
  2. 直接回复空串(指字节长度为0的空字符串,而不是结构体中 content 字段的内容为空)

OPPO消息推送怎么消息撤回

OPPO消息推送怎么消息撤回

消息推送后,若出现内容错误或者其他问题可以进行“撤回”操作,如想停止下发消息,可第一时间点击【停止下发】。
注意:已经下发的消息不可撤回;停止下发的消息计入推送限额。

操作方式:进入推送记录-通知栏数据,点击需要停止下发消息的数据详情,进入详情界面后点击【停止下发】

OPPO开放平台 消息回执说明

OPPO开放平台 消息回执说明

消息回执

消息回执是OPPO PUSH提供给开发者获知消息送达状态的功能。由于推送消息请求是异步调用,调用请求接口成功仅表示消息成功开始下发,不代表消息最终的推送状态,因此OPPO PUSH在后续的消息推送流程中捕获重要事件,并通过HTTP请求的形式反馈给开发者,这个功能成为消息回执功能。

开启和配置消息回执

要使用消息回执功能,开发者在推送每条消息时需要在对应的请求字段中配置回执参数,目前回执参数主要有两个,一个是开发者接受OPPO PUSH回执HTTP请求的目标地址URL,以及这个回执请求携带的URL参数。

回执参数是归属于消息体内容的参数,和其他消息体参数一样,按照不同推送方式,在创建广播消息体或在单点推送接口中正确配置配置参数即可获取消息的回执。

以下是回执参数说明:

名称类型是否必填默认描述是否支持单推
call_back_urlString* 仅支持registrationId推送方式 *
开发者接收消息送达的回执消息的URL地址。
OPPO PUSH提供消息回执的功能,消息回执的功能是指消息送达后,OPPO PUSH基于HTTP/HTTPS请求的方式告知开发者对应消息的送达情况。
要使用回执功能,开发者需要配置回执目标地址的URL参数,URL长度限制在限制200以内。
以下是一个使用回执的示例:
1.开发者配置本参数
2.消息到达设备后,OPPO PUSH根据本参数,向这个URL以
Content-Type为application/json的方式发送一个HTTP/HTTPS请求。请求内容的示例如下
JSON 数据示例:
[
{
“messageId”: “msgId1”, // 到达的消息ID
“appId”: “appid”, // 对应的应用ID
“taskId”: “taskId1”, // 如果是广播消息,对应taskID;如果是单推消息,该字段为消息ID
“registrationIds”: “regId1, regid2”, // 消息的推送目标注册ID
“eventTime”: “timestamp”, // 回执事件产生时间
“param”: “call_back_parameter”, // 开发者指定的回执参数
“eventType”: “push_arrive” // 到达事件,消息到达的事件被定义为push_arrive
},
// 对于完全一致的URL地址,OPPO PUSH可能会将相同URL地址回执信息在一个HTTP/HTTPS请求中发送,因此body里是一个长度大于等于1的JSON数组
{
“messageId”: “msgId1”,
“appId”: “appid”,
“taskId”: “taskId1”,
“registrationIds”: “regId1,regid2”,
“eventTime”: “timestamp”,
“param”: “call_back_parameter”,
“eventType”:
“push_arrive”
}
]
call_back_parameterString开发者指定的自定义回执参数。
数字符串长度限制在100以内,OPPO PUSH将这个参数设置在回执请求体单个JSON结构的param字段中。

回执事件

OPPO PUSH 有如下回执事件

回执事件含义触发条件备注
push_arrive表明消息成功到达设备消息成功到达设备,OPPO PUSH客户端向服务端反馈已经收到该条消息。表示消息到达OPPO PUSH客户端,不包含通知栏的展示,点击等后续动作含义。
regid_invalid无效的RegistrationID应用被卸载、应用自动注销、用户设备刷机、设备30天内未联网会导致RegistrationID失效开发者接收到无效RegistrationID的回执后可以做剔除或者过滤处理,减少无效推送

OPPO开放平台消息推送自检工具

OPPO开放平台消息推送自检工具

自检工具

OPush Demo的使用

OPush Demo提供了一些基本功能的接入示例,开发者可以在接入SDK之前,通过demo方快速体验和了解推送的实际效果。也可以测试一些基本功能例如注册、注销、清除通知、打开通知设置等功能。或者通过修改部分代码,可以快速验证接入功能。

代码参考demo下载:heytapPushDemo.rar(3.0.0版本)

一门APP 移动应用平台推送信息服务教程 一键开启云消息推送

关于移动应用推送,我不太喜欢用第3方模块,核心是懒得折腾,但为了实现移动应用推送呼起特定页面,还是折腾了下平台的推送服务。

1、控制台-[配置]-[应用与工具]-[云消息]推送:

a. 有通知和消息两种类型,为了兼容安卓和IOS,推荐使用消息类型;

b. 消息的标题就是显示在通知里的内容,消息的内容传特定的内容,用于移动应用分析。

2、移动应用内代码:

为了少折腾点,我把监听代码放在移动应用的root页(首屏的那个WIN窗口);

jsBridge.push.getPushId(function(succ, data) {
  if (succ) {
    jsBridge.setClipboardText(data.push_id);
    alert(data.push_id + "\n已复制");
  } else {
    alert("获取失败\n" + JSON.stringify(data));
  }
});

/*
data 参数说明:
{
  push_id: ""  //字符串类型,唯一标识
}
*/

这是监听点击事件,意思点击通知栏进来才有反应,是因为ret.value的值在IOS和安卓上有所不值,因此参见我的代码,我的应用只传要打开的URL,然后直接打开。

假设您的业务复杂,请自行分析自己传过来的值再处理。

还有有一点,在IOS上,点击一次通知栏,这个事件会响应二次,平台查下问题所在吧,and 这个ret.value在不同官方值不同的问题最好也处理一下。