html5+ push-消息推送

push-消息推送

Push模块管理推送消息功能,可以实现在线、离线的消息推送,通过plus.push可获取推送消息管理对象。

方法:

对象:

回调方法:

权限:

permissions

{
// ...
"permissions":{
	// ...
	"Push": {
		"description": "消息推送"
	}
}
}

属性:

  • cover: 设定显示推送消息的模式

    可取值true或false,true表示推送消息覆盖模式显示,即仅显示最后接收到的推送消息;false表示在系统消息中心显示多条消息。 默认值为ture。

    平台支持

    • Android - 2.2+ (支持)
    • iOS - 4.3+ (不支持): 不支持覆盖消息,每条信息都在系统消息中心,忽略cover属性值。

ClientInfo

JSON对象,获取的客户端标识信息

属性:

  • token: _(String 类型 )_设备令牌(iOS设备唯一标识),用于APNS服务推送中标识设备的身份

  • clientid: _(String 类型 )_推送服务令牌(设备唯一标识),用于标识推送信息接收者身份

    第三方推送服务器管理的设备唯一标识,在iOS平台此值通常与token不同;在其它平台此值通常与token值一致。 此值与设备及应用都相关,即不同的apk/ipa安装到同一台设备上的值都不相同。

  • appid: _(String 类型 )_第三方推送服务的应用标识

    第三方推送服务器管理的应用标识,通常需要在第三方推送服务器平台进行注册获取。

  • appkey: _(String 类型 )_第三方推送服务器的应用键值

    第三方推送服务器管理的应用键值,通常需要在第三方推送服务器平台进行注册获取。

PushMessage

JSON对象,推送消息对象

属性:

  • title: _(String 类型 )_推送消息显示的标题

  • content: _(String 类型 )_推送消息显示的内容

  • payload: _(JSON 类型 )_推送消息承载的数据

    如果推送消息中传输的数据不符合JSON格式,则作为String类型数据保存。

  • aps: _(JSON 类型 )_Apple APNS推送协议数据

MessageOptions

JSON对象,获客户端创建本地消息的参数

属性:

  • appid: _(String 类型 )_要启动流应用的appid

    默认值为当前流应用的appid。

  • title: _(String 类型 )_推送消息的标题

    在系统消息中心显示的通知消息标题,默认值为程序的名称。

  • sound: _(String 类型 )_推送消息的提示音

    显示消息时的播放的提示音,可取值: “system”-表示使用系统通知提示音; “none”-表示不使用提示音; 默认值为“system”。

  • cover: _(Boolean 类型 )_是否覆盖上一次提示的消息

    可取值true或false,true为覆盖,false不覆盖,默认为permission中设置的cover值。

  • when: _(Date 类型 )_消息上显示的提示时间

    默认为当前时间,如果延迟显示则使用延时后显示消息的时间。

  • delay: _(Number 类型 )_提示消息延迟显示的时间

    当设备接收到推送消息后,可不立即显示,而是延迟一段时间显示,延迟时间单位为s,默认为0s,立即显示。

PushReceiveCallback

客户端接收到推动消息的回调函数

void onReceive( msg ) {
 	// Recieved push message code.
 }

参数:

  • msg: ( String ) 必选 接收到的推送信息msg

返回值:

void : 无

PushClickCallback

用户点击推送消息事件的回调函数

void onClick( msg ) {
	// Clicked push message code. 
}

参数:

  • msg: ( String ) 必选 用户点击的推送信息msg

返回值:

void : 无

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
		<meta name="HandheldFriendly" content="true" />
		<meta name="MobileOptimized" content="320" />
		<title>Hello H5+</title>
		<script type="text/javascript">
			var pushServer = "http://demo.dcloud.net.cn/push/?";
			var message = null;
			// 监听plusready事件  
			document.addEventListener("plusready", function () {
				message = document.getElementById("message");
				// 监听点击消息事件
				plus.push.addEventListener("click", function (msg) {
					// 判断是从本地创建还是离线推送的消息
					switch (msg.payload) {
						case "LocalMSG":
							outSet("点击本地创建消息启动:");
							break;
						default:
							outSet("点击离线推送消息启动:");
							break;
					}
					// 提示点击的内容
					plus.nativeUI.alert(msg.content);
					// 处理其它数据
					logoutPushMsg(msg);
				}, false);
				// 监听在线消息事件
				plus.push.addEventListener("receive", function (msg) {
					if (msg.aps) { // Apple APNS message
						outSet("接收到在线APNS消息:");
					} else {
						outSet("接收到在线透传消息:");
					}
					logoutPushMsg(msg);
				}, false);
			}, false);

			/**
			 * 日志输入推送消息内容
			 */
			function logoutPushMsg(msg) {
				console.log("title: " + msg.title);
				console.log("content: " + msg.content);
				if (msg.payload) {
					if (typeof (msg.payload) == "string") {
						console.log("payload(String): " + msg.payload);
					} else {
						console.log("payload(JSON): " + JSON.stringify(msg.payload));
					}
				} else {
					console.log("payload: undefined");
				}
				if (msg.aps) {
					console.log("aps: " + JSON.stringify(msg.aps));
				}
			}

			/**
			 * 获取本地推送标识信息
			 */
			function getPushInfo() {
				var info = plus.push.getClientInfo();
				outSet("获取客户端推送标识信息:");
				console.log("id: " + info.id);
				console.log("token: " + info.token);
				console.log("clientid: " + info.clientid);
				console.log("appid: " + info.appid);
				console.log("appkey: " + info.appkey);
			}
			/**
			 * 本地创建一条推动消息
			 */
			function createLocalPushMsg() {
				var options = {
					cover: false
				};
				var str = dateToStr(new Date());
				str += ": 欢迎使用HTML5+创建本地消息!";
				plus.push.createMessage(str, "LocalMSG", options);
				outSet("创建本地消息成功!");
				console.log("请到系统消息中心查看!");
				if (plus.os.name == "iOS") {
					console.log('*如果无法创建消息,请到"设置"->"通知"中配置应用在通知中心显示!');
				}
			}
			/**
			 * 读取所有推送消息
			 */
			function listAllPush() {
				var msgs = null;
				switch (plus.os.name) {
					case "Android":
						msgs = plus.push.getAllMessage();
						break;
					default:
						break;
				}
				if (!msgs) {
					outSet("此平台不支持枚举推送消息列表!");
					return;
				}
				outSet("枚举消息列表(" + msgs.length + "):");
				for (var i in msgs) {
					var msg = msgs[i];
					console.log(i + ": " + msg.title + " - " + msg.content);
				}
			}
			/**
			 * 清空所有推动消息
			 */
			function clearAllPush() {
				plus.push.clear();
				outSet("清空所有推送消息成功!");
			}
			/**
			 * 请求‘简单通知’推送消息
			 */
			function requireNotiMsg() {
				if (navigator.userAgent.indexOf('StreamApp') > 0) {
					plus.nativeUI.toast('当前环境暂不支持发送推送消息');
					return;
				}
				var inf = plus.push.getClientInfo();
				var url = pushServer + 'type=noti&appid=' + encodeURIComponent(plus.runtime.appid);
				inf.id && (url += '&id=' + inf.id);
				url += ('&cid=' + encodeURIComponent(inf.clientid));
				if (plus.os.name == 'iOS') {
					url += ('&token=' + encodeURIComponent(inf.token));
				}
				url += ('&title=' + encodeURIComponent('Hello H5+'));
				url += ('&content=' + encodeURIComponent('欢迎回来体验HTML5 plus应用!'));
				url += ('&version=' + encodeURIComponent(plus.runtime.version));
				plus.runtime.openURL(url);
			}
			/**
			 * 请求‘打开网页’推送消息
			 */
			function requireLinkMsg() {
				if (navigator.userAgent.indexOf('StreamApp') > 0) {
					plus.nativeUI.toast('当前环境暂不支持发送推送消息');
					return;
				}
				var inf = plus.push.getClientInfo();
				var url = pushServer + "type=link&appid=" + encodeURIComponent(plus.runtime.appid);
				inf.id && (url += '&id=' + inf.id);
				url += ('&cid=' + encodeURIComponent(inf.clientid));
				if (plus.os.name == 'iOS') {
					url += ('&token=' + encodeURIComponent(inf.token));
				}
				url += ('&title=' + encodeURIComponent('HBuilder飞一样的编码'));
				url += ('&content=' + encodeURIComponent('看HBuilder如何追求代码编写速度的极致!立即去瞧一瞧?'));
				url += ('&url=' + encodeURIComponent('http://www.dcloud.io/'));
				url += ('&version=' + encodeURIComponent(plus.runtime.version));
				plus.runtime.openURL(url);
			}
			/**
			 * 请求‘下载链接’推送消息
			 */
			function requireDownMsg() {
				if (navigator.userAgent.indexOf('StreamApp') > 0) {
					plus.nativeUI.toast('当前环境暂不支持发送推送消息');
					return;
				}
				if (plus.os.name != "Android") {
					plus.nativeUI.alert("此平台不支持!");
					return;
				}
				var inf = plus.push.getClientInfo();
				var url = pushServer + 'type=down&appid=' + encodeURIComponent(plus.runtime.appid);
				inf.id && (url += '&id=' + inf.id);
				url += ('&cid=' + encodeURIComponent(inf.clientid));
				url += ('&title=' + encodeURIComponent('Hello H5+'));
				url += ('&content=' + encodeURIComponent('新版本发布了!立即下载体验?'));
				url += ('&ptitle=' + encodeURIComponent('Hello H5+'));
				url += ('&pcontent=' + encodeURIComponent('1. 优化用户体验;\n2. 修复在Android2.3.x某些设备可能异常退出的问题.'));
				url += ('&dtitle=' + encodeURIComponent('下载Hello H5+'));
				url += ('&durl=' + encodeURIComponent('http://www.dcloud.io/helloh5/HelloH5.apk'));
				url += ('&version=' + encodeURIComponent(plus.runtime.version));
				plus.runtime.openURL(url);
			}
			/**
			 * 请求‘透传数据’推送消息
			 */
			function requireTranMsg() {
				if (navigator.userAgent.indexOf('StreamApp') > 0) {
					plus.nativeUI.toast('当前环境暂不支持发送推送消息');
					return;
				}
				var inf = plus.push.getClientInfo();
				var url = pushServer + 'type=tran&appid=' + encodeURIComponent(plus.runtime.appid);
				inf.id && (url += '&id=' + inf.id);
				url += ('&cid=' + encodeURIComponent(inf.clientid));
				if (plus.os.name == 'iOS') {
					url += ('&token=' + encodeURIComponent(inf.token));
				}
				url += ('&title=' + encodeURIComponent('Hello H5+'));
				url += ('&content=' + encodeURIComponent('带透传数据推送通知,可通过plus.push API获取数据并进行业务逻辑处理!'));
				url += ('&payload=' + encodeURIComponent(
					'{"title":"Hello H5+ Test","content":"test content","payload":"1234567890"}'));
				url += ('&version=' + encodeURIComponent(plus.runtime.version));
				plus.runtime.openURL(url);
			}

		</script>

	</head>
	<body>
		<header id="header">
			<div class="nvbt iback" onclick="back()"></div>
			<div class="nvtt">Push</div>
			<div class="nvbt idoc" onclick="openDoc('Push Document','/doc/push.html')"></div>
		</header>
		<div id="dcontent" class="dcontent">
			<div class="button" onclick="requireNotiMsg()">发送"普通通知"消息</div>
			<div class="button" onclick="requireLinkMsg()">发送"打开网页"消息</div>
			<div class="button" onclick="requireDownMsg()">发送"下载链接"消息</div>
			<div class="button" onclick="requireTranMsg()">发送"透传数据"消息</div>
			<br />
			<ul id="dlist" class="dlist">
				<li class="ditem" onclick="getPushInfo()">获取客户端推送标识</li>
				<li class="ditem" onclick="createLocalPushMsg()">创建本地消息</li>
				<li class="ditem" onclick="listAllPush()">枚举推送消息</li>
				<li class="ditem" onclick="clearAllPush()">清空推送消息</li>
				<!--<li class="ditem" onclick="plus.push.setAutoNotification(false)">关闭自动显示消息</li>
				<li class="ditem" onclick="plus.push.setAutoNotification(true)">开启自动显示消息</li>-->
			</ul>
		</div>
		<div id="output">
			Push模块管理推送消息功能,可以实现在线、离线的消息推送,通过plus.push可获取推送消息管理对象。
		</div>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/weixin_41961749/article/details/82968369