今天下午做个推消息推送,需要提醒卖家“你有1笔新的付款订单到账,请及时处理”。
因此需要将数字保存,然后在收到个推推送后,设置订单管理的角标+1,应用的角标+1。
类似下面的效果:
大家都知道角标肯定是数字的,然后使用plus.storage.setItem保存,再使用plus.storage.getItem获取,就是始终获取不到。
折腾了一下午,结果发现plus.storage.setItem只能保存string类型的数据,http://ask.dcloud.net.cn/question/6474
说多了都是泪啊 T_T
遂将角标管理类分享出来,也帮着填一个坑,已自动将value转换为string,保存到plus.storage。欢迎各位拍砖!
注意:
5+设置角标API plus.runtime.setBadgeNumber,官方文档是这么描述的:
Android - 2.2+ (支持): 目前仅支持小米(MIUI v5),其它设备调用后无任何效果;
iOS - 4.3+ (支持): 应用需开启“Push Notifications”服务才生效。
暂不知道官方的支持计划。
// 用法1.
plus.push.addEventListener('receive', function(msg){
if(msg.aps){
alert('接收到在线APNS消息');
}else{
alert('接收到在线透传消息');
}
// 测试在线,透传消息,设置角标
BadgeManager.setInc('order', 1);
})
// 用法2.
// 进入订单管理模块后,清除订单角标
BadgeManager.removeBadgeNumber('order');
/**
* BadgeManager 静态类
* 只需要关心对应业务的角标增长值,自动计算总的角标数,并设置App角标plus.runtime.setBadgeNumber
* @author fanrong33
* @version 1.0.2 build 201501223
*/
;function BadgeManager(){
};
/**
* 角标增长
* @param {String} key 键值
* @param {Number} step 增长值
*/
BadgeManager.setInc = function(key, step){
var key = "badge_"+key;
var total_number = plus.storage.getItem("badge_total_number");
var key_number = plus.storage.getItem(key);
total_number = parseInt(total_number); // 字符串转数字
key_number = parseInt(key_number);
if(!key_number) key_number = 0;
if(!total_number) total_number = 0;
key_number = key_number + step;
total_number = total_number + step;
plus.storage.setItem(key, key_number.toString()); // 数字转字符串
plus.storage.setItem("badge_total_number", total_number.toString());
// 设置APP图标的角标
plus.runtime.setBadgeNumber(total_number);
}
/**
* 角标减少
* @param {String} key 键值
* @param {Number} step 减少值
*/
BadgeManager.setDec = function(key, step){
var key = "badge_"+key;
var total_number = plus.storage.getItem("badge_total_number");
var key_number = plus.storage.getItem(key);
total_number = parseInt(total_number);
key_number = parseInt(key_number);
if(!key_number) key_number = 0;
if(!total_number) total_number = 0;
key_number = key_number - step;
total_number = total_number - step;
if(key_number < 0) key_number = 0;
if(total_number < 0) total_number = 0;
plus.storage.setItem(key, key_number.toString());
plus.storage.setItem("badge_total_number", total_number.toString());
// 设置APP图标的角标
plus.runtime.setBadgeNumber(total_number);
}
/**
* 根据key获取对应的角标值
* @param {String} key
*/
BadgeManager.getBadgeNumber = function(key){
var key = "badge_"+key;
var key_number = plus.storage.getItem(key);
key_number = parseInt(key_number);
if(!key_number) key_number = 0;
return key_number;
}
/**
* 删除key对应的角标值
* @param {String} key
*/
BadgeManager.removeBadgeNumber = function(key){
var key = "badge_"+key;
var total_number = plus.storage.getItem("badge_total_number");
var key_number = plus.storage.getItem(key);
total_number = parseInt(total_number);
key_number = parseInt(key_number);
if(!key_number) key_number = 0;
if(!total_number) total_number = 0;
total_number = total_number - key_number;
if(total_number < 0) total_number = 0;
plus.storage.removeItem(key);
plus.storage.setItem("badge_total_number", total_number.toString());
// 设置APP图标的角标
plus.runtime.setBadgeNumber(total_number);
}