jpush-react-native icon indicating copy to clipboard operation
jpush-react-native copied to clipboard

iOS badge 到底怎么用?

Open chatugpt opened this issue 6 years ago • 13 comments

你的运行环境

  • 插件版本:
  • 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, 应用关掉的时候 能清除角标

chatugpt avatar Nov 19 '19 03:11 chatugpt

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() 清除角标

chengky avatar Nov 19 '19 03:11 chengky

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() 清除角标

感谢回复,我这就试试

chatugpt avatar Nov 19 '19 03:11 chatugpt

let params = {"badge":0} JPush.setBadge(params); JPush.resetBadge(); 可以清除 了,不过连消息列表一起清掉了。。

[UIApplication sharedApplication].applicationIconBadgeNumber = -1;

可以不清除消息 只清除角标

chatugpt avatar Nov 20 '19 06:11 chatugpt

JPush.setBadge("badge":0); 我也是客户端调用这个完全清除不了角标

leeewh avatar Nov 20 '19 09:11 leeewh

看源代码,setBadge 方法参数还有一个属性 localBadge,但我尝试 JPush.setBadge({localBadge: 0}) 也没任何效果,把 0 改为 1或者其他数字也没效果。

Riant avatar Dec 05 '19 04:12 Riant

需要改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 avatar Dec 13 '19 00:12 onlybenyang

@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]];
    }
}

Riant avatar Jan 06 '20 08:01 Riant

@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 avatar Jan 06 '20 08:01 onlybenyang

发现 2.7.5 版本已经支持 set appBadge 了

Riant avatar Jan 09 '20 03:01 Riant

发现 2.7.5 版本已经支持 set appBadge 了

确实,目前这个可以用
JPush.setBadge({ badge: 0, appBadge: 0 })

kala888 avatar Sep 02 '20 06:09 kala888

怎么拿到总的badge数量呢?现在需要实现在点击某一条推送之后,让badge减1

chj-damon avatar Oct 17 '20 07:10 chj-damon

这个可以解决数量问题,我觉得官方可以把文档更新一下 JPush.setBadge({ badge: 0, appBadge: 0 }

gancan110 avatar Feb 23 '21 02:02 gancan110

@chj-damon 我是直接重新统计数量,然后设置 badge

Riant avatar May 06 '21 05:05 Riant