c2is/apns-sender

通过苹果服务向多个设备发送批量通知。

dev-master / 1.x-dev 2016-02-01 17:52 UTC

This package is auto-updated.

Last update: 2024-08-29 03:36:18 UTC


README

SensioLabsInsight

ApnsSender

安装

使用 composer

composer require c2is/apns-sender

它做什么

此组件解决的问题是需要向多个设备令牌发送相同内容的通知。虽然如果需要的话,可以通过相对较少的努力来实现这一点,但向不同的令牌发送不同的消息并不是一个好的做法。

重点是优雅地处理错误。这种方式是通过向通知服务打开一个流并批量发送通知来实现的。

写入流时可能发生两种错误

  • 如果通知服务将错误写入流,如果是可重试的错误(通常是未知错误或“处理错误”),我们会重试向相同的令牌发送相同的通知。如果再次失败,我们会继续下一个。
  • 没有来自通知服务的错误 流由于某种原因失败了。我们重试最后一个令牌并继续。

一旦发送完毕,就会进行最后的错误检查,结果与上面相同。然后返回一个包含所有无法解决的问题的数组,这样您就可以根据需要处理它们。

目标是抽象流错误并尽可能多地收集信息供您处理。此组件处理错误发生后流不可写的情况,重试所有无法发送的令牌,并返回一个包含错误状态码和消息的列表,这样您就可以在应用程序中根据需要进行处理。

用法

发送通知相对简单

use C2iS\ApnsSender\Sender;

$production = false; // Default value. If false, sends to gateway.sandbox.push.apple.com. If true, sends to gateway.push.apple.com
$certFile = '/my/file.pem'; // Your certificate file
$certPassword = 'MyPassword'; // Your certificate file's password
$message = 'Just testing my awesome notification system works'; // Your notification content
$tokens array(); // Device tokens this notification should be sent to

$sender = new Sender($production, $certFile, $certPassword);
$errors = $sender->send($message, $tokens);

// Here be your error handling logic

send 方法返回一个 \C2iS\ApnsSender\Model\MessageError 对象数组

$error->getCustomIdentifier(); // Returns the array key of the token for which the error occurred
$error->getToken(); // Returns the device token
$error->getErrorCode(); // The APNS error status (255 if not available)
$error->getErrorMessage(); // The APNS error message  (Unknown error if not available)

顺便说一句,使用的状态码

0   => No error
1   => Processing error
2   => Missing device token
3   => Missing topic
4   => Missing payload
5   => Invalid token size
6   => Invalid topic size
7   => Invalid payload size
8   => Invalid token
255 => Unknown error