【问题标题】:APNS Push PHP wrong responseAPNS Push PHP 错误响应
【发布时间】:2017-10-04 05:43:31
【问题描述】:

我们在通过 APNS 发送推送时确实存在一些问题。看来我们确实从苹果那里得到了错误的回应。推送已发送,但我们确实收到错误响应,这导致推送多次发送。有没有其他人遇到过类似的问题,或者我错过了什么?

<?php
private function checkAppleErrorResponse($apns, PushToken $token)
{

    //byte1=always 8, byte2=StatusCode, bytes3,4,5,6=identifier(rowID). Should return nothing if OK.
    $apple_error_response = fread($apns, 6);


    if ($apple_error_response) {
        //unpack the error response (first byte 'command" should always be 8)
        $error_response = unpack('Ccommand/Cstatus_code/Nidentifier', $apple_error_response);

        if ($error_response['status_code'] == '0') {
            $error_response['status_code'] = '0-No errors encountered';
        } else if ($error_response['status_code'] == '1') {
            $error_response['status_code'] = '1-Processing error';
        } else if ($error_response['status_code'] == '2') {
            $error_response['status_code'] = '2-Missing device token';
        } else if ($error_response['status_code'] == '3') {
            $error_response['status_code'] = '3-Missing topic';
        } else if ($error_response['status_code'] == '4') {
            $error_response['status_code'] = '4-Missing payload';
        } else if ($error_response['status_code'] == '5') {
            $error_response['status_code'] = '5-Invalid token size';
        } else if ($error_response['status_code'] == '6') {
            $error_response['status_code'] = '6-Invalid topic size';
        } else if ($error_response['status_code'] == '7') {
            $error_response['status_code'] = '7-Invalid payload size';
        } else if ($error_response['status_code'] == '8') {
            $error_response['status_code'] = '8-Invalid token';
        } else if ($error_response['status_code'] == '255') {
            $error_response['status_code'] = '255-None (unknown)';
        } else {
            $error_response['status_code'] = $error_response['status_code'] . '-Not listed';
        }

        if ($token->isExistingUser()) {
            $this->logger->error('#cloudalarm User-Id: ' . $token->getAssociatedUser() . ': Something went wrong with APNS pushing , error is ' . $error_response['status_code']);
        } else {
            $this->logger->error('#cloudalarm  for simple login id ' . $token->getAssociatedUser() . ': Something went wrong with APNS pushing , error is ' . $error_response['status_code']);
        }

        return true;
    }

    return false;
}
?>

【问题讨论】:

  • 您收到哪个错误?请在您的问题中包含这一点。
  • @ventise 是我们在日志中看到的唯一错误是“8-Invalid token”,在某些情况下这是一个有效的响应
  • 所以你认为令牌是正确的,但错误说它不是?您如何验证令牌是否真正起作用?
  • 严格来说不是一个答案,但我会考虑使用switchcase 而不是所有else ifs,这样更容易维护。但是,您是否尝试使用沙盒令牌联系 APNS 服务器?如果是这种情况,那么您将收到该错误。您可能还需要重新发布生产证书,因为私钥可能已损坏?
  • @DanFromGermany 我们依赖于我们在流中得到的响应。我们正在推动生产,事情是:通知正在发送(在实际设备上接收),但我们确实收到了错误响应。

标签: php apn


【解决方案1】:

我认为你误解了这个错误。通常,响应代码旨在帮助您管理列表。如果您收到“无效令牌”错误,通常伴随着更新的令牌,请删除无效的令牌并将新的令牌插入它的位置。请记住,APNS 会自动“转发”消息,通知只是为了帮助您了解最新信息。

如果您没有获得更新的令牌,则可能是您的应用已被删除且未重新安装,因此令牌根本无效。

【讨论】:

    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 2014-04-19
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2014-01-26
    • 2021-07-14
    相关资源
    最近更新 更多