我正在尝试实施APNS-PHP,并发现在我的测试环境中我有一些无效的令牌(因为测试设备已转移到生产中)。
我需要从数组中的序列化对象获取令牌ID,因为我想捕获这种情况并从数据库中删除无效令牌。我使用以下代码,但这不起作用:
$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转储:
[ “MESSAGE”] => object(ApnsPHP_Message)#9(8){ [ “_bAutoAdjustLongPayload:保护”] => 布尔(真) [ “_aDeviceTokens:保护”] => array(1){[0] =>串(64) “018E4B9CB8CF73341CE4EBE7138E25E605CD80FB74B3A9701CE5CCA6D9363F3A” } [“_sText:protected”] =>空值 [ “_nBadge:保护”] => INT(256) [ “_sSound:保护”] =>空值 [ “_aCustomProperties:保护”] => NULL [“_nExpiryValue:protected”] => INT(604800) [ “_mCustomIdentifier:保护”] => string(17)“Message-Badge-004”}
答案 0 :(得分:2)
_aDeviceTokens
是受保护的属性,您会发现直接访问此属性会引发异常。
您应该使用getRecipients()
对象上的getRecipient($recipientNumber = 0)
或Message
方法来检索设备令牌。
例如:
$token = $error['MESSAGE']->getRecipient();
答案 1 :(得分:0)
$error['MESSAGE']->_aDeviceTokens[0]