uniapp之unipush安卓app信息推送

第一步,uniapp 官网查找推送

uni-app官网

介绍业务、开通流程,请务必仔细阅读 UniPush使用指南 - DCloud问答

第二步,unipush相关链接

开通的unipush是封装了个推SDK,但Dcloud平台没有技术联系方式,他们技术支持是付费的,所以我们个推这边也会关注下unipush用户的集成情况,给予技术上的协助。

这里是完整的技术文档,请仔细研读:

UniPush使用指南 UniPush使用指南 - DCloud问答

Unipush常见问题 Unipush常见问题 - DCloud问答

Unipush咨询入口:DCloud问答

服务端api接口推送调用文档

推送API-个推文档中心

可联系管理员进微信技术群

重点来了~~~

第三步,前端记录

unipush 信息推送,需要前端获取到app的cid,后端通过cid推送给对应的app,

开通UniPush推送服务

点此查看如何开通UniPush推送服务

Android平台支持厂商推送通道

注意:开通UniPush后,需在后台配置“厂商推送设置”,配置好厂商参数后请一定要提交云打包,并且使用“自有证书”打签名包;将云打包后的安装包安装到手机上,再获取cid 进行离线厂商推送测试,不可使用基座方式获取的cid进行离线厂商推送测试。

获取手机厂商推送设置信息请参考:厂商推送应用创建配置流程

应用桌面图标的角标

如何获取CID和任务ID

  • 在应用安装后第一次运行时应该调用5+ API的plus.push.getClientInfo方法获取客户端标识,如果获取的cid为空,说明客户端向推送服务器注册还未完成,可以使用setTimeout延时重试。
    document.addEventListener('plusready', function(){    
    // 页面加载时触发    
    var pinf = plus.push.getClientInfo();    
    var cid = pinf.clientid;//客户端标识    
    }, false );   
  • 服务端推送的,请求成功后会返回result,result中【taskid】的值就是任务ID;平台上推送的,在【推送记录】中点击详情,页面上显示的【task ID】的值。

监听点击事件

	// 点击推送信息  离线
		plus.push.addEventListener('click', res => {
			//模板消息
			console.log('push--->click');
		});
		// 接收推送信息  在线
		plus.push.addEventListener('receive', res => {
			console.log('push--->receive');

		});

uniapp 安卓demo代码

app.vue

app.vue
<script>
        //引入推送js
	import plusListener from '@/common/unipush-listener.js';
	export default {
		extends: base,
		onLaunch: function() {
			// 信息推送
			//开启推送
			//#ifdef APP-PLUS  
			plusListener.getClientInfoLoop();// 循环获取cid
			plus.runtime.setBadgeNumber(0); // 角标清空
			plusListener.pushListener(); // 监听通知栏信息
			//  #endif 
               }
          } 
</script>

unipush-listener.js 

unipush-listener.js 

/**
 * 监听push 消息 以及后台数据恢复
 */
import store from '@/store'
let timer = false;
var numloop = 0;

export default {
	// 开启监听推送 
	pushListener() {

		console.log('pushListener=================pushListener');
		// 点击推送信息  离线
		plus.push.addEventListener('click', res => {
			//模板消息
			console.log('push--->click');
			this.addEventListenerPushMessage(res, 'click');
		});
		// 接收推送信息  在线
		plus.push.addEventListener('receive', res => {
			console.log('push--->receive');
			this.addEventListenerPushMessage(res, 'receive');

		});
	},
	// 点击click方法,获取push数据,判断是否登录,进行跳转
	addEventListenerPushMessage(push, type) {

		console.log("push, type", push, type);
		clearTimeout(timer);
		timer = setTimeout(function() {
			var row = push.payload;
			console.log(JSON.stringify(row), "JSON.stringify(row)");
			if (store.state.user.token) {
				if (row.id) {
					uni.navigateTo({
						url: '/packagehome/pages/task/TodoList?row=' + JSON.stringify(row)
					})
				} else {
					uni.reLaunch({
						url: '../index/index',
					});
				}
			} else {
				uni.reLaunch({
					url: '/pages/login/login'
				});
			}
		}, 1500)
	},
	// 循环获取clientid信息,直到获取到为止
	getClientInfoLoop() {

		plus.push.getClientInfoAsync(function(info) {
			console.log("info", JSON.stringify(info));

			console.log(info);
			console.log(info.clientid);
			console.log(!info || !info.clientid, (info && info.clientid ? true : false));
			// 如果info不存在,或者info存在,cid不存在则再次获取cid
			if (!info || !info.clientid) {
				console.log("cid为空=========================================");
				let infoTimer = false;
				infoTimer = setInterval(function() {
					console.log('setInterval======');
					console.log('numloop======', numloop++);
					// 同步获取cid
					var pinf = plus.push.getClientInfo();
					var cid = pinf.clientid; //客户端标识 
					console.log(pinf, cid, cid ? true : false);
					if (cid) {
						clearInterval(infoTimer); //清定时器
						uni.setStorageSync('cid', cid); // 储存cid
						console.log(uni.getStorageSync('cid'), '储存的cid======');
						// this.passCid(cid); // 向后台传送cid
						// 是否有cid,登录的时候上传后台,否则首页上传
						var havecid = uni.getStorageSync('havecid');
						console.log('havecid', havecid, cid);
						console.log(!havecid && cid)
						if (!havecid && cid) {
							this.$http.get('/sys/updateCid?clientId=' + cid).then(({
								data
							}) => {
								console.log(cid, 'passCid,向后台传cid========2data', data);
								if (data.success) {
									uni.setStorageSync('havecid', true);
								}
							})

						}
					}
				}, 100);
			} else if (info && info.clientid) {
				// 储存cid
				var cid = info.clientid;
				uni.setStorageSync('cid', cid);
				console.log(uni.getStorageSync('cid'), '本地储存cid======');
				// this.passCid(cid); // 向后台传送cid
				// 是否有cid,登录的时候上传后台,否则首页上传
				var havecid = uni.getStorageSync('havecid');
				console.log('havecid', havecid, cid);
				console.log(!havecid && cid)
				if (!havecid && cid) {
					this.$http.get('/sys/updateCid?clientId=' + cid).then(({
						data
					}) => {
						console.log(cid, 'passCid,向后台传cid========2data', data);
						if (data.success) {
							uni.setStorageSync('havecid', true);
						}
					})

				}
			}

		}, function(e) {
			console.log('Failed', JSON.stringify(e));
			// 同步获取cid
			var pinf = plus.push.getClientInfo();
			var cid = pinf.clientid; //客户端标识 
			if (cid) {
				// 储存cid
				uni.setStorageSync('cid', cid);
				console.log(uni.getStorageSync('cid'), '======');
				this.passCid(cid); // 向后台传送cid
			}
		})
	},
	// 向后台传送cid
	passCid(cid) {

		// 是否有cid,登录的时候上传后台,否则首页上传
		var havecid = uni.getStorageSync('havecid');
		console.log('havecid', havecid, cid, !havecid && cid);
		if (!havecid && cid) {
			this.$http.get('/sys/updateCid?clientId=' + cid).then(({
				data
			}) => {
				console.log(cid, 'passCid,向后台传cid========2data', data);
				if (data.success) {
					uni.setStorageSync('havecid', true);
				}
			})

		}
	},
	// // receive,接收到推送信息,前端创建推送信息
	// addEventListenerReceive(push, type) {

	// 	console.log("push, type", push, type);
	// 	clearTimeout(timer);
	// 	timer = setTimeout(function() {
	// 		plus.push.createMessage(push.content,push.payload,push.options);
	// 	}, 1500)
	// },
}

以下是Java-sdk封装Rest-V2厂商推送示例:

    {  
    "request_id":"请填写10到32位的id",  
    "audience": {  
        "cid": [  
            "请填写clientid"  
        ]  
    },  
    "settings":{  
        "ttl":3600000,  
        "strategy":{  
            "default":1  
        }  
    },  
    "push_message":{  
         "transmission":" {title:"标题",content:"内容",payload:"自定义数据"}"  
    },  
    "push_channel":{  
        "android":{  
            "ups":{  
                "notification":{  
                    "title":"安卓离线展示的标题",  
                    "body":"安卓离线展示的标题",  
                    "click_type":"intent",  
                    "intent":"intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end"  
                }  
            }  
        },  
      "ios":{  
            "type":"notify",  
            "payload":"自定义消息",  
            "aps":{  
                "alert":{  
                    "title":"苹果离线展示的标题",  
                    "body":"苹果离线展示的内容"  
                },  
                "content-available":0  
            },  
            "auto_badge":"+1"  
        }  
}

完整服务端厂商推送教程参考:
https://docs.getui.com/getui/server/rest_v2/common_args/

遇到的坑

猜你喜欢

转载自blog.csdn.net/qq_42351675/article/details/123209796