Получение токена из ошибки APNS-php - PullRequest
4 голосов
/ 04 апреля 2011

Я пытаюсь реализовать APNS-PHP и обнаружил, что в моей тестовой среде у меня есть несколько недопустимых токенов (поскольку тестовые устройства перешли в производство).

Мне нужно получить идентификатор токена из сериализованного объекта в массиве, так как я хочу перехватить этот сценарий и удалить недопустимые токены из БД.Я использую следующий код, но он не работает:

    $aErrorQueue = $push->getErrors();
    if (!empty($aErrorQueue)) {
        foreach($aErrorQueue as $error){            
            foreach($error['ERRORS'] as $err){
                $message .=  $err['statusMessage'] . " ";
                if($err['statusCode'] == 8){
                    $phones = Phone::getPhonesWithToken($error['MESSAGE']['_aDeviceTokens:protected'][0]);
                    Phone::setToken($phones[0]['id'], "");      
                }
            }   
        }
    }

Проблема в том, что APNS_Message - это сериализованный объект в $ error ['MESSAGE'], и я не могу вспомнить, как получить доступ к токенув этом объекте ...

Var dump:

["MESSAGE"] => объект (ApnsPHP_Message) # 9 (8) {["_bAutoAdjustLongPayload: protected"] =>bool (true) ["_aDeviceTokens: protected"] => array (1) {[0] => string (64) "018E4B9CB8CF73341CE4EBE7138E25E605CD80FB74B3A9701CE5CCA6D9363F3A"} ["_sTent>int (256) ["_sSound: protected"] => NULL ["_aCustomProperties: protected"] => NULL ["_nExpiryValue: protected"] => int (604800) ["_mCustomIdentifier: protected"] => строка (17)"Message-Badge-004"}

Ответы [ 2 ]

2 голосов
/ 19 апреля 2013

_aDeviceTokens является защищенным свойством, вы обнаружите, что прямой доступ к этому свойству вызовет исключение.

Вместо этого следует использовать метод getRecipients() или getRecipient($recipientNumber = 0) для объекта Message для получения токена (ов) устройства.

Например:

$token = $error['MESSAGE']->getRecipient();
0 голосов
/ 04 апреля 2011

$error['MESSAGE']->_aDeviceTokens[0]

...