iOS badge 到底怎么用?
你的运行环境
- 插件版本:
- react-native 版本:react-native: 0.59.8
期望效果
1,Jpush.setBadge(0) 能清除角标的数字
2,用 Push API 给用户发送一条 badge = 0 的推送, 应用在前台 和后台 都 能清除角标
实际效果
1,Jpush.setBadge(0) 不能清除角标的数字
2,用 Push API 给用户发送一条 badge = 0 的推送, a,应用在前台的时候 不能清除角标 b, 应用关掉的时候 能清除角标
iOS 中的 JPush.setBadge({badge:0}) 只是更新了极光服务器上的角标数,不会改变应用本地的角标值。 修改 node_modules/jpush-react-native/ios/RCTJPushModule/RCTJPushModule.m 增加
// 原来并未暴露 resetBadge 接口
RCT_EXPORT_METHOD(resetBadge)
{
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
//[JPUSHService resetBadge];
}
import { NativeModules } from 'react-native';
const JPushModule = NativeModules.JPushModule;
// 可以调用 JPushModule.resetBadge() 清除角标
iOS 中的 JPush.setBadge({badge:0}) 只是更新了极光服务器上的角标数,不会改变应用本地的角标值。 修改 node_modules/jpush-react-native/ios/RCTJPushModule/RCTJPushModule.m 增加
// 原来并未暴露 resetBadge 接口 RCT_EXPORT_METHOD(resetBadge) { [UIApplication sharedApplication].applicationIconBadgeNumber = 0; //[JPUSHService resetBadge]; }import { NativeModules } from 'react-native'; const JPushModule = NativeModules.JPushModule; // 可以调用 JPushModule.resetBadge() 清除角标
感谢回复,我这就试试
let params = {"badge":0} JPush.setBadge(params); JPush.resetBadge(); 可以清除 了,不过连消息列表一起清掉了。。
[UIApplication sharedApplication].applicationIconBadgeNumber = -1;
可以不清除消息 只清除角标
JPush.setBadge("badge":0); 我也是客户端调用这个完全清除不了角标
看源代码,setBadge 方法参数还有一个属性 localBadge,但我尝试 JPush.setBadge({localBadge: 0}) 也没任何效果,把 0 改为 1或者其他数字也没效果。
需要改iOS源代码,下面代码有*的那一行加上一行 RCT_EXPORT_METHOD(setBadge:(NSDictionary *)params) { if(params[BADGE]){ NSNumber *number = params[BADGE]; [UIApplication sharedApplication].applicationIconBadgeNumber = number; [JPUSHService setBadge:[number integerValue]]; } } 然后在js调用 JPush.setBadge({badge: 0})
@onlybenyang 按照你说的修改的话,发现无论 badge 传什么数值,都只是有清空角标的效果。所以我尝试修改为 [number integerValue] ,经过测试,这样的话,可以实现真正的 setBadge 效果。
RCT_EXPORT_METHOD(setBadge:(NSDictionary *)params)
{
if(params[BADGE]){
NSNumber *number = params[BADGE];
[UIApplication sharedApplication].applicationIconBadgeNumber = [number integerValue]; // here
[JPUSHService setBadge:[number integerValue]];
}
}
@onlybenyang 按照你说的修改的话,发现无论 badge 传什么数值,都只是有清空角标的效果。所以我尝试修改为
[number integerValue],经过测试,这样的话,可以实现真正的 setBadge 效果。RCT_EXPORT_METHOD(setBadge:(NSDictionary *)params) { if(params[BADGE]){ NSNumber *number = params[BADGE]; [UIApplication sharedApplication].applicationIconBadgeNumber = [number integerValue]; // here [JPUSHService setBadge:[number integerValue]]; } }
嗯,是我写错了
发现 2.7.5 版本已经支持 set appBadge 了
发现 2.7.5 版本已经支持 set appBadge 了
确实,目前这个可以用
JPush.setBadge({ badge: 0, appBadge: 0 })
怎么拿到总的badge数量呢?现在需要实现在点击某一条推送之后,让badge减1
这个可以解决数量问题,我觉得官方可以把文档更新一下 JPush.setBadge({ badge: 0, appBadge: 0 }
@chj-damon 我是直接重新统计数量,然后设置 badge