蔡繁荣
蔡繁荣
  • 发布:2015-06-16 19:01
  • 更新:2021-01-19 19:48
  • 阅读:21397

分享基于plus.storage的角标管理类,主要用于触发个推消息监听事件后设置角标v1.0.2

分类:MUI

今天下午做个推消息推送,需要提醒卖家“你有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);  
}  
28 关注 分享
DCloud_heavensoft AndyHua 羊羽亻子 BoredApe 大海花开 祺佑 liuhulan DB 我勒个去 barice DCDDD ifeiyan MooGu 小云菜 gmmx133 ali 咬了一口的苹果 internetdc 距离您98米 杜林 skysowe 稳住能赢 5***@qq.com 诗小柒 高风 阿落 lijiamu d***@163.com

要回复文章请先登录注册

骑着毛驴追火箭

骑着毛驴追火箭

你这个封装的不怎么好,重复代码太多,不够精简
2015-11-11 16:42
liuhulan

liuhulan

回复 蔡繁荣 :
好的,谢谢!
2015-09-21 21:44
蔡繁荣

蔡繁荣 (作者)

回复 liuhulan :
是的,就是官方说的那样
2015-09-21 21:27
liuhulan

liuhulan

请问是在ios还是在Android中实现的?Android下能实现吗?
5+官方文档是这么描述的:
Android - 2.2+ (支持): 目前仅支持小米(MIUI v5),其它设备调用后无任何效果;
iOS - 4.3+ (支持): 应用需开启“Push Notifications”服务才生效。
2015-09-21 21:24
抬头遇见自己

抬头遇见自己

mark
2015-09-08 11:03
蔡繁荣

蔡繁荣 (作者)

回复 deiphi :
应用的角标,Android的目前好像还没有对接Api,可以问下官方
2015-08-07 21:40
deiphi

deiphi

貌似android 4.0不支持啊
2015-08-07 14:30
蔡繁荣

蔡繁荣 (作者)

回复 凌凌漆 :
这个类主要是负责业务逻辑的,前端订单管理那里根据获取到的角标数设置样式mui-badge
2015-08-07 13:28
凌凌漆

凌凌漆

Mark

订单管理那里的角标也是同样使用吗?
那里应该跟样式表有关吧?
2015-08-07 11:38
祺佑

祺佑

Mark
2015-07-27 14:04