【问题标题】:How to check One signal Player ids are valid or invalid in node js如何在节点js中检查一个信号播放器ID是否有效
【发布时间】:2021-05-14 06:51:23
【问题描述】:

问题是当我使用one-signal documentation's nodejs code 发送推送通知时,

我有一组玩家 ID:['id1','id2','id3','id4','id5']

它只发送到前 2 个玩家 ID 或设备令牌,然后第三个令牌/玩家 ID 无效,因此它不会向数组中第三个玩家 ID 之后的其他玩家 ID 发送通知。

它给了我如下错误和响应:

{
   "id":"17236233-2a86-4e13-a6c4-0f0a51ba053a",
   "recipients":2,
   "external_id":null,
   "errors":{
      "invalid_player_ids":[
         "id3",
         "id5"
      ]
   }
}

期望:

我想检查无效的玩家 ID,然后从数组中删除, 所以我可以只向有效的玩家 ID 发送推送通知。

非常感谢您的贡献。

【问题讨论】:

    标签: javascript node.js push-notification onesignal


    【解决方案1】:

    自行回答对我有用的解决方案,它也适用于其他开发人员并帮助他们。

    所以我研究了检查 One-signal documentation View Device 上的 PlayerId 是否有效。

    下面是我检查 playerId 是否有效的代码,并且 playerId 现在存在于我的单信号用户中。然后我正在执行这些步骤:

    1. 如果它无效/不存在,那么我只是将它从我的数据库中删除,这样以后发送推送时就不会导致任何错误。
    2. 使最终的validDevices 数组仅向有效设备发送推送通知,因此不会返回任何错误。

    发送通知的函数

    const sendPushNotificationToUser = async (devices) => {
      let validDevices = [];
      console.log(`All devices-->`, devices);
      for (let i = 0; i < devices.length; i++) {
        let isValid = await removeInvalidPlayerIds(devices[i]);
        if (isValid) {
          validDevices.push(devices[i]);
        }
      }
      console.log(`Valid devices-->`, validDevices);
    
      if (validDevices.length > 0) {
        //code for send notification
      }
    };
    

    删除无效/不存在的 playerIds

    
    const removeInvalidPlayerIds = async (device) => {
      try {
        const config = {
          headers: {
            host: "onesignal.com",
          },
        };
        const onesignalURL = `https://104.18.226.52:443/api/v1/`,
          url = `${onesignalURL}players/${device}?app_id=${process.env.ONESIGNAL_APPID}`;
        let response = await axios.get(url, config);
        response = response.data;
        if (response && response.invalid_identifier == true) {
          // removing token and return false
          await UserDeviceService.deleteUserDeviceWithoutUserId(device);
          return false;
        } else {
          return true;
        }
      } catch (error) {
        if (error.response) {
          let { data } = error.response;
          // The request was made
          // the server responded with a status code
          // that falls out of the range of 2xx
    
          if (data.hasOwnProperty("errors")) {
            // removing token and return false
            await UserDeviceService.deleteUserDeviceWithoutUserId(device);
            return false;
          }
          console.log(error.response.data);
          console.log(error.response.status);
        } else if (error.request) {
          console.log("error.request");
        } else {
          console.log("Error", error.message);
        }
      }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2015-09-13
      • 1970-01-01
      相关资源
      最近更新 更多