react native 的iOS中程序未启动的问题

react-native
标签: #<Tag:0x00007fb84a1b0a30>

(AaronHero) #1

ios程序未启动时,收到推送通知并打开通知后会调用openNotification方法,那么推送多条通知能不能得到推送通知的个数(两种类型的通知,需要分别得到推送通知类型各自的个数)


#2

1、iOS的apns通知由系统直接展示,你点了通知栏之后才能取到你需要的信息,在后台时还有办法先获取到,但杀死是不行的


2、通知个数问题,对所有的通知,我们有角标这个功能,你不需要取值,直接在推送的时候实现角标+1,收到时,icon展示的就是当前通知总数

3、如果你有其他的需求,请自己用计数器什么的实现,或者详细表述你的问题


(AaronHero) #3

首先,谢谢你的答复。我把场景描述一下,您看能不能给我提供个思路或者是可行的解决方法!万分感谢!
场景:有两个类型的通知0和1;主界面是个底部导航栏包含两个tab(分别显示0通知列表和1通知列表);当程序未启动时,推送了一个0通知和一个1通知,此时点开0通知,能把1通知的个数(也就是1)传给显示1通知的tab导航栏角标!


#4

这个是你们应用内的操作
根据你的描述,我大概理解,你是说如果没有点击1类型通知,进入主页后,底部导航栏要显示这个类型消息的个数

由于此时你已经进入了App应用内,我建议你推送的时候 Notification+Message同时推送,Message(自定义消息)是不展示的,只在前台接收(iOS),离线保存5条消息,且可以通过time_to_live设置离线保存的时间。

那么在你进入前台的时候就能收到这个自定义消息,你可以自己对消息设定一个extras,自己计数,然后展示在导航栏

相当于Notification用来提醒,Message用来传应用内的信息。


(AaronHero) #5

非常感谢!我试试


(AaronHero) #6

您好,我通知和自定义消息一起推送后,程序在前台和后台收到通知,点击后会出现红屏错误:Cannot read property ‘extras’ of undefined

涉及代码:

NativeAppEventEmitter.addListener(
            'networkDidReceiveMessage',
            (notifi) => {
                console.log("000000000000"+notifi);
                if (notifi.extras.messageType===0){
                    receiveMsgArray.push("0");
                }else {
                    receiveMsgArray.push("1");
                }
              ...
}
);

感觉是通知和自定义消息有冲突


#7

报错 似乎说的是extras没定义,与Notification和Message冲突联系不上吧


(AaronHero) #8

这东西应该不用自己定义吧,上图是程序未运行收到通知后打开通知调试结果,extras是这个方法自带的吧


(HuminiOS) #9

你说的 extras 找不到的问题,这边倒是没有出现,

不过看你 的代码

notifi.extras.messageType === 0

应该改成
notifi.extras.messageType === "0"


(AaronHero) #10

用自己的后台推送,我的就是整形的,如果改成”0“数组会一直push“1”。然后我改用了咱们激光的控制台进行推送,程序在后台运行时,发了一条自定义消息,再发一条通知,此时如果点击应用icon会正常显示,若点开通知就会报“extras 找不到”的问题!

测试机9.3版本


#11

你确认你通知里面extras都带了吗?给我msgid和appkey看下


(AaronHero) #12

appKey:
f38fa80e218452762df871c8

通知:
msgid:42784196472020466

自定义消息:
msgid:20266198350116315

报红瓶错误,点dismiss,程序正常运行


#13

你extras是都写了,既然你后面测试的两条消息都是分别发的,那么不存在二者冲突的问题导致。

问题关键在 点击通知消息,用你获取extras的方法,会报这个错,那你还能正常取到这个messageType的数据吗


#14

我们开发这边自己测试获取extras,是没有问题的


(AaronHero) #15

果然,后台运行点击通知notifi = undefined,你们自定义消息的代码时怎样设置的,看我设置的对吗?

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)   (UIBackgroundFetchResult))completionHandler {
  
[[NSNotificationCenter defaultCenter] postNotificationName:kJPFNetworkDidReceiveMessageNotification object:userInfo];
      [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];
}



 NativeAppEventEmitter.addListener(
            'networkDidReceiveMessage',
            (notifi) => {
                console.log("000000000000"+notifi);
});

(HuminiOS) #16

这是我的测试代码


subscription = NativeAppEventEmitter.addListener(
                            'networkDidReceiveMessage',
                            (notification) => {
                              console.log(notification)
                              console.log(notification.extras.messageType)
                              }
                          );