大家好,我在 React Native 的 iOS 应用上使用 leancloud-storageleancloud-installation 进行通知设备注册时,遭遇了灵异现象。在调用 installation.save() 函数后,程序成功返回了 LeanCloud 服务端响应结果,但在后台 - 数据管理 - 数据 - _Installation 中,却找不到相应保存的记录,整个表的记录数为 0,让我感觉来到了成都。

相关代码如下:

AV.initialize(config.AV.appId, config.AV.appKey);
const Installation = AVInstallation(AV);

const info = {
  deviceType: token.os,
  deviceToken: token.token,
};

const installation = await Installation.getCurrent();
const result = await installation.save(info);

console.log(result);

控制台显示程序输出:

[22:07:38] Object {
[22:07:38]   "createdAt": "2019-01-30T01:18:02.317Z",
[22:07:38]   "deviceToken": "4c70...",
[22:07:38]   "deviceType": "ios",
[22:07:38]   "objectId": "kfKsrPqm3T0Ju9nNDz3Cllwl0b1ol2LE",
[22:07:38]   "timeZone": "America/New_York",
[22:07:38]   "updatedAt": "2019-01-30T01:18:02.317Z",
[22:07:38] }

iOS 设备的 deviceToken 是通过 react-native-push-notification 获取的,应该没问题。

App ID: RdQfc8SI7K8GpW72RLV8C1NJ-gzGzoHsz
相关版本号:

{
  "react-native-push-notification": "^3.1.2",
  "leancloud-installation": "2.0.1",
  "leancloud-storage": "3.11.1"
}

拜托论坛各位大神帮忙看下哪里出了什么问题。我不想遭遇灵异现象,也不想去成都。提前祝大家新春快乐了。

kfKsrPqm3T0Ju9nNDz3Cllwl0b1ol2LE

这个 objectId 是后端返回的 ID 格式哦。应该 save 成功了。

我刚才试了一下,同样的代码,今天就好了。我怀疑他针对我😶

那末就又有一个问题了,我同一个 iOS deviceToken,用测试渠道可以推送,用生产渠道就不行。我用的是 Token Authentication,这样也会有生产/测试的区分吗?

我明白了!用 Xcode 跑的时候就是测试,用 TestFlight 跑就是生产!无视我,请!

嗯,因为发布推送的时候提示是 invalidToken,觉得是验权有问题,就把 auth token 给换了,也把那条记录删了。那之后就再也加不上记录,直到刚才(

补充回复下这个问题,使用 Token Authentication 也是区分生产和测试环境的,是使用 prod 参数用来区分生产环境或测试环境的。同一个 key 可以给测试环境发消息,也能给正式环境发消息。

但是同一个设备的 deviceToken 只能成功发送一个环境。要么是正式环境,要么是测试环境的。现象是给一个 deviceToken 推送,如果 dev 成功了,prod 就会报 invalid Tokens,不会是两个环境都能发成功的。

1 人赞了这个帖子.