Releases: web-push-libs/web-push-php
Releases · web-push-libs/web-push-php
v5.1.0
v5.0.0
Breaking changes
You now need to iterate over the results of flush
in order to actually send the notifications.
The way you handle the results of the flush()
method should be changed. In v5 the flush always returns a Generator
object. This means that you can still iterate over it, but you wouldn't be able to store it, at least not as-is. Using the example from the docs, the responses would now look different:
PLEASE NOTE:
\Generator
is returned even if you only send one message.
BEFORE:
$res = [
[ // first notification (failed)
'success' => false,
'endpoint' => $theEndpointToDeleteInYourDatabaseIfExpired,
'message' => $responseMessage,
'statusCode' => $responseStatusCode,
'headers' => $responseHeaders,
'content' => $responseContent, // you may have more infos here
'expired' => $isTheEndpointWrongOrExpired,
],
[ // second notification (succeeded)
'success' => true,
],
[ // third notification
...
], ...
];
AFTER:
var_dump($res); // \Generator
/** \Minishlink\WebPush\MessageSentReport */
foreach ($res as $result) {
// you now have access to request & response objects
/** @var \Psr\Http\Message\RequestInterface $request */
$request = $result-> getRequest();
/** @var \Psr\Http\Message\ResponseInterface $response */
$response = $result->getResponse();
if ($result->isSuccess()) {
// process successful message sent
$logger->log('Notification with payload %s successfully sent for endpoint %s.' [
json_decode((string) $response->getBody()),
$result->getEndpoint()
]);
} else {
// or a failed one - check expiration first
if ($result->isSubscriptionExpired()) {
// this is just an example code, not included in library!
$db->markExpired($result->getEndpoint());
} else {
// process faulty message
$logger->log('Notification failed: %s. Payload: %s, endpoint: %s' [
$result->getReason(),
json_decode((string) $response->getBody()),
$result->getEndpoint()
]);
}
}
}
v4.0.2
- Fix Subscription::create when not giving every keys
v4.0.1
- Add
reasonPhrase
to error result (thx @The-Hasanov!)
v4.0.0
See migration commit in web-push-php-example
- Support new
aes128gcm
content encoding (used notably in MS Edge)
You get your content encoding in your client JS code, and store it in your database alongside the rest of the subscription:
const contentEncoding = (PushManager.supportedContentEncodings || ['aesgcm'])[0];
- [BREAKING] You must use a new Subscription object in
sendNotification
Before:
use Minishlink\WebPush\WebPush;
$webPush->sendNotification(
'endpoint',
'payload', // optional (defaults null)
'userPublicKey', // optional (defaults null)
'userAuthToken' // optional (defaults null)
);
After:
use Minishlink\WebPush\WebPush;
use Minishlink\WebPush\Subscription;
$subcription = Subscription::create([
'endpoint' => 'endpoint',
'publicKey' => 'public key', // optional
'authToken' => 'authToken', // optional
'contentEncoding' => 'aesgcm', // optional, one of PushManager.supportedContentEncodings
]);
$webPush->sendNotification(
$notification['subscription'],
$notification['payload'] // optional (defaults null)
);
v3.0.2
v3.0.1
- Fixed random rare case where the encryption failed
v3.0.0
v2.0.1
v2.0.0
- Removed compatibility for PHP < 7
- Updated dependencies