- 获取clientId(设备id),获取到了之后需要传给服务端,服务端会根据这个id给该id对应的设备推送消息。实践中发现clientId有时获取为空,所以通过setInterval去轮询获取了一下,保证clientId不为空。
let pinf = plus.push.getClientInfo();
if (pinf && pinf.clientid) {
console.log('aaaaaa',pinf.clientid)
_self.clientId=pinf.clientid
setClientId(pinf.clientid)
}
else {
var obtainingCIDTimer = setInterval(function() {
pinf = plus.push.getClientInfo();
if (pinf.clientid) {
_self.clientId=pinf.clientid
setClientId(pinf.clientid)
clearInterval(obtainingCIDTimer);
}
}, 50);
}
setTimeout(() => {
_self.clientId && setClientId(_self.clientId)
}, 500);
2.当我们进入了app时,这时候服务端推送了消息过来,即在线推送消息时需要客户端手动调用plus.push.createMessage去创建消息的状态栏。
// 在线推送消息
plus.push.addEventListener(
'receive',
function (msg) {
console.log('tmdtmdtmd',msg)
const {content,type,title,payload}=msg || {}
const newPayload=JSON.parse(payload) || {}
const {data}=newPayload
//ios平台需要多一层判断,且拿取方式不同
var platform = uni.getSystemInfoSync().platform
if (platform == 'ios') {
if (type == 'receive') {
// 这里判断触发的来源,否则一直推送。
let options = { cover: false, title }
plus.push.createMessage(content, msg.payload, options)
}
} else if (platform == 'android') {
let option = { cover: false, title }
plus.push.createMessage(msg.content, msg.payload, option)
}
},
false
)
3.处理点击消息的业务
plus.push.addEventListener('click', async function(message) {
console.log('哈哈哈哈哈哈',message)
let commonBusType=null,commonData=null
var platform = uni.getSystemInfoSync().platform
if(platform == 'ios'){
if(message.aps){
const {busType,data}=message.payload || {}
commonBusType=busType;
commonData=data
setMessageInfo(message.payload)
}else {
const payload=JSON.parse(message.payload) || {}
const {busType,data}=payload
commonBusType=busType;
commonData=data
setMessageInfo(payload)
}
}else if (platform == 'android'){
const {busType,data}=message.payload || {}
commonBusType=busType;
commonData=data
setMessageInfo(message.payload)
}
console.log('这是通知类型1111',commonBusType)
console.log('这是通知消息',commonData)
//此处是具体的业务代码
}, 1000)
}, false);
4.APP图标右上角消息数量展示逻辑处理代码
// 获取ios角标数量
function getIosBadgeNum(){
// #ifdef APP-PLUS
var UIApplication = plus.ios.import("UIApplication");
var app = UIApplication.sharedApplication();
var currentBadge = app.applicationIconBadgeNumber();
console.log('当前角标值:', currentBadge);
plus.ios.deleteObject(app); // 释放对象
return currentBadge
// #endif
}
function clearBadge(muinNum=1){
// #ifdef APP-PLUS
var platform = uni.getSystemInfoSync().platform;
console.log('测试角标数量222',getIosBadgeNum())
if(platform == 'ios'){
console.log('测试角标数量111111',getIosBadgeNum())
const num=getIosBadgeNum()
const currentNum=num<=0 ? 0 :num-muinNum
plus.runtime.setBadgeNumber(currentNum);
var GeTuiSdk = plus.ios.importClass('GeTuiSdk');
GeTuiSdk.setBadge(currentNum); // 同步个推角标数值
plus.ios.import("UIApplication").sharedApplication().setApplicationIconBadgeNumber(currentNum); // 系统级清除
}else{
plus.push.clear();
plus.runtime.setBadgeNumber(-1);
plus.runtime.setBadgeNumber(0);
var GeTuiSdk = plus.android.importClass('com.getui.api.GTIntentService');
GeTuiSdk.setBadge(-1);
GeTuiSdk.setBadge(0);
}
// #endif
}
5.在app应用中打开手机允许通知设置页面,getPermissionStatus方法是获取手机系统设置允许通知是开启还是关闭状态,setPermissions方法是打开手机允许通知设置页面。
function setPermissions(){
// #ifdef APP-PLUS
if (plus.os.name == 'Android') { // 判断是Android
var main = plus.android.runtimeMainActivity();
var pkName = main.getPackageName();
var uid = main.getApplicationInfo().plusGetAttribute("uid");
openAndroidPermissionDialog(main,pkName,uid)
} else if (plus.os.name == 'iOS') { // 判断是ISO
var UIApplication = plus.ios.import("UIApplication");
openIosPermissionDialog(UIApplication)
}
// #endif
}
function openAndroidPermissionDialog(main,pkName,uid){
var Intent = plus.android.importClass('android.content.Intent');
var Build = plus.android.importClass("android.os.Build");
//android 8.0引导
if (Build.VERSION.SDK_INT >= 26) {
var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
} else if (Build.VERSION.SDK_INT >= 21) { //android 5.0-7.0
var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
intent.putExtra("app_package", pkName);
intent.putExtra("app_uid", uid);
} else { //(<21)其他--跳转到该应用管理的详情页
var Settings = plus.android.importClass("android.provider.Settings");
var Uri = plus.android.importClass("android.net.Uri");
var intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
var uri = Uri.fromParts("package", pkName, null);
intent.setData(uri);
}
// 跳转到该应用的系统通知设置页
main.startActivity(intent);
}
function openIosPermissionDialog(UIApplication){
var NSURL2 = plus.ios.import("NSURL");
var setting2 = NSURL2.URLWithString("app-settings:");
var application2 = UIApplication.sharedApplication();
application2.openURL(setting2);
plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2);
}
function getPermissionStatus(){
// #ifdef APP-PLUS
if(plus.os.name == 'Android'){
var main = plus.android.runtimeMainActivity();
var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
//android.support.v4升级为androidx
if (NotificationManagerCompat == null) {
NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat");
}
var areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled();
return areNotificationsEnabled
}else if (plus.os.name == 'iOS') {
var UIApplication = plus.ios.import("UIApplication");
var app = UIApplication.sharedApplication();
var enabledTypes = 0;
if (app.currentUserNotificationSettings) {
var settings = app.currentUserNotificationSettings();
enabledTypes = settings.plusGetAttribute("types");
if(enabledTypes==0){
return false
}
return true
}
}
// #endif
}