jpush-react-native addGetRegistrationIdListener 不执行

nodejs
react-native
jpush
标签: #<Tag:0x00007fb83c993cb0> #<Tag:0x00007fb83c993b70> #<Tag:0x00007fb83c993a30>

(Honest) #1

如题,安卓部分,已经可以跑通了,但是 ios 部份接收不到通知,我想试试看能过 registrationId 的方式看看能不能收到通知,结果发现 registrationId 获取不到。

接入过程

我是按照 jpush-react-nativegithub 介绍来操作的,后台用的 nodejsjpush-sdk。证书啥的也都弄好了,运行 app 的时候还会提示是否需要开启通知,Token Authentication证书 推送我也都试过了:(

代码

// react native 代码
  componentDidMount() {
    if (Platform.OS === 'android') {
      JPushModule.initPush();
    } else {
      JPushModule.setupPush();
    }
    JPushModule.setAlias(this.state.alias, () => {
      console.log('成功设置 alias');
    }, () => {
      console.log('设置 alias 失败');
    });
    JPushModule.addReceiveCustomMsgListener((ret) => {
      const data = JSON.parse(ret.extras);
      this.setState({ id: data.id });
    });
    JPushModule.addReceiveNotificationListener(() => {});
    JPushModule.addReceiveOpenNotificationListener(() => {
      this.props.navigation.navigate('Article', { id: this.state.id, type: '推荐' });
    });
    JPushModule.addGetRegistrationIdListener((registrationId) => {
      console.log(`Device register succeed, registrationId ${registrationId}`);
    }, (error) => {
      console.error(`获取不到`, error);
    });
  }
// nodejs 部分
    client.push().setPlatform(JPush.ALL)
      .setAudience(JPush.ALL, JPush.alias('reactnative'))
      .setNotification(data.title, JPush.ios('ios alert', data.title, 5))
      .setMessage('ok', data.title, 'obj', { id: data.id })
      .send(function(err, res) {
        if (err) {
          console.log(err.message);
        } else {
          console.log('Sendno: ' + res.sendno);
          console.log('Msg_id: ' + res.msg_id);
        }
      });

#2

取不到regIstrationID的看一下日志信息,监听下事件


(Honest) #3

我待会儿会去尝试,不过我刚又用 Android 手机跑了一遍,发现

JPushModule.addGetRegistrationIdListener((registrationId) => {
      console.log(`Device register succeed, registrationId ${registrationId}`);
}}

这个还是没用执行…


(Honest) #4

我又看了 xcode 的日志找到了一些线索:

Not get deviceToken yet. Maybe:
your certificate not configured APNs?
or current network is not so good so APNs registration failed? 
or there is no APNs register code? Please refer to JPush docs.

#5

(Honest) #6

又在 didRegisterForRemoteNotificationsWithDeviceToken 中做了一次打印,走到了 register success

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  printf("register success");
  [JPUSHService registerDeviceToken:deviceToken];
}

(Honest) #7

又修改了打印信息

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  printf("register success %s", deviceToken);
  [JPUSHService registerDeviceToken:deviceToken];
}

运行结果如下:

2018-04-24 15:05:38.345651+0800 CadailyApp[15633:6320264]  | JIGUANG | W - [JIGUANGClientController] Not get deviceToken yet. Maybe: your certificate not configured APNs? or current network is not so good so APNs registration failed?  or there is no APNs register code? Please refer to JPush docs.
register success \231\200\263\241!----- register info -----
----- register info -----

(Honest) #8

大佬,这样的话,是不是就说明的了我在 ios 部分的设置是没有问题的?


#9

你regIstrationID能不能取到嘛


(Honest) #10

拿不到,我不会 ios 开发,只能是通过 js 查看

// 这段里面的回调没有执行
JPushModule.addGetRegistrationIdListener((registrationId) => {
      console.log(`Device register succeed, registrationId ${registrationId}`);
}}

#11

添加监听

看一下完整的客户端日志信息,报了什么错,就根据错误排查
上面的 Not get deviceToken yet
根据这个排查


(Honest) #12

这边的监听完全不执行:( 唉…


#13

可否根据上述链接先排查一下


(Honest) #14

实在不好意思,有两个关键字不明白是什么意思

  • pushconfig
  • 应用详情

#15

有的插件可能没有这些文件,你先将你能检查的部分检查,特别是


(Honest) #16

非常感谢您的耐心解答,bundle id 是一致的,证书都是绿的。



(Honest) #17

明天测试机到了,再拿测试机试试看…


#18

你现在用的是iOS模拟器测试的吗?


(Honest) #19

现在用的是同事的机器 iphone7 - ios11


#20

噢噢,用的是真机就行,你现在将日志给一下。

你所使用的插件的版本号。