Pushwoosh创建消息得到200,但是说UnknownDevices

时间:2014-07-16 02:05:06

标签: pushwoosh

我的系统运行至少两年。大多数推送通知请求得到200.但是,最近,我发现我经常得到500。

Nealy 10%的推送通知获得了500个。

请帮助!!!

我已经重新发送了问题消息,一切都很好。

实施例: 请求是:

{
  "request": {
    "application": "3DXXX-59XXX",
    "username": "MyXXXXX",
    "password": "********",
    "notifications": [
      {
        "send_date": "now",
        "content": {
          "en": "Subscriber ID. 9000  Close  User 01"
        },
        "link": "",
        "data": {
          "userID": "12345"
        },
        "wp_type": "",
        "wp_background": "",
        "wp_count": "",
        "ios_badges": 51,
        "ios_sound": "short-tone.caf",
        "devices": [
          "APA91bHZHEhIMjVYwxyMk-4-YObazHfcxlQq7CmYto930nuIqHlQGCdzUQsnDcnHTB78wUcTlm-qhV3ipMqe9HO3kTqD9j_zgzSUUAdoGK0fbeRRGMNn69Z63BlQ9RqIdioZ4J2NFA0DLOUkroImk-it8p_3Glr5bRlnrl1_wT3ycXfsgvQZq4g"
        ],
        "page_id": "0",
        "android_sound": "five_sectoneone"
      }
    ]
  }
}

回应是: {“status_code”:500,“status_message”:“设备列表无效”}

=============================================== ===============
更新======================== =====

将Pushwoosh API从V1.2升级到V1.3后,问题就消失了。

然而,新的问题来了。

我的样本是:

请求:

{
  "request": {
    "application": "3DXXX-59XXX",
    "auth": "*********WqLiS5ZM2****************************************9eib******",
    "notifications": [
      {
        "send_date": "now",
        "content": {
          "en": "Jones Residence Tue,17Jul 12:12 Test from Robbie......."
        },
        "link": "",
        "data": {
          "userID": "12345"
        },
        "wp_type": "",
        "wp_background": "",
        "wp_count": "",
        "ios_badges": 39,
        "ios_sound": "short-tone.caf",
        "devices": [
          "298eeXXXXa26849cc77da16adXXXXc1c801df12e79bad1e724829aXXXXcbe07d"  //I hashed real ID here
        ],
        "page_id": "0",
        "android_sound": "five_sectoneone"
      }
    ]
  }
}

回应是:

{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "Messages": [
      "D954-3C45B1AA-AA6293E5"
    ],
    "UnknownDevices": {
      "D954-3C45B1AA-AA6293E5": [
        "298eeXXXXa26849cc77da16adXXXXc1c801df12e79bad1e724829aXXXXcbe07d" //I hashed real ID here
      ]
    }
  }
}

alt text

2 个答案:

答案 0 :(得分:3)

我看到你已经在Pushwoosh社区写了这个问题。我也会在这里发布答案。

" UnknownDevice"警告表示您已放入"设备的推送令牌"我们的数据库中没有createMessage请求的部分。

有几个原因:

1)应用程序已从设备中删除。

2)推送令牌已更新。的APN / GCM /等。往往会不时更改推送令牌,我们会从服务器中删除过时的推送令牌。 (这很少发生)

3)您的请求中有印刷错误。 (我确定情况并非如此)

请注意,为了使您的用户库保持最新,您可以使用getUnregisteredDevices方法,该方法将返回最后一千个已删除的推送令牌。您需要定期拨打此电话。

P.S。 https://community.pushwoosh.com/questions/998/pushwoosh-create-message-get-200-but-says-unknowndevices
P.P.S.不要使用1.2 API,它很老,很快就会被弃用。

答案 1 :(得分:1)

我认为,您使用了错误的设备令牌。不要使用设备UUID。将deviceArray放入Java代码后,可以将设备令牌发送到数据库。 编辑PushwooshiOS.js文件;

pushNotification.registerDevice(
    function(status)
    {
        var deviceToken = status['deviceToken'];
        console.warn('registerDevice: ' + deviceToken);

        $.ajax({
            url : "http://ip:port/deviceid/"+deviceToken,
            dataType : "json",
            success : function(a, b, c) {
                console.log("send tokens to server after call t in your json array");    
            },
            error : function(a, b, c) {
                console.log("err a ", a);
                console.log("err b ", b);
                console.log("err c ", c);
                console.log("err c ", c);
            }
        });
        onPushwooshiOSInitialized(deviceToken);
    },
    function(status)
    {
        console.warn('failed to register : ' + JSON.stringify(status));
        //alert(JSON.stringify(['failed to register ', status]));
    }
);

Java代码

String method = "createMessage";
URL url = new URL(PUSHWOOSH_SERVICE_BASE_URL + method);
JSONArray deviceArray = new JSONArray();
// put your device tokens
deviceArray.put(deviceToken);
JSONArray notificationsArray = new JSONArray()
        .put(new JSONObject().put("send_date", "now")   
                             .put("content", "A test push")
                             .put("devices",deviceArray));
JSONObject requestObject = new JSONObject()
        .put("application", APPLICATION_CODE)
        .put("auth", AUTH_TOKEN)
        .put("notifications", notificationsArray);
JSONObject mainRequest = new JSONObject().put("request", requestObject);
JSONObject response = SendServerRequest.sendJSONRequest(url, mainRequest.toString());