Skip to content

Commit

Permalink
Merge pull request #42 from ds762/apns-collapse-id
Browse files Browse the repository at this point in the history
add apns-collapse-id for Apple devices
  • Loading branch information
mcfedr authored Aug 17, 2022
2 parents b56d558 + b08823a commit 58b631e
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 4 deletions.
3 changes: 2 additions & 1 deletion src/Mcfedr/AwsPushBundle/Message/Message.php
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,8 @@ class Message implements \JsonSerializable
private $gcmData;

/**
* GCM, FCM and ADM only.
* The collapseKey will be sent for GCM, FCM and ADM
* and if set, apns-collapse-id is sent for APNS.
*
* @var string
*/
Expand Down
12 changes: 9 additions & 3 deletions src/Mcfedr/AwsPushBundle/Service/Messages.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,14 +85,20 @@ public function send($message, string $endpointArn): void
$message->setPlatforms($this->platforms);
}

$messageAttributes = [
'AWS.SNS.MOBILE.APNS.PUSH_TYPE' => ['DataType' => 'String', 'StringValue' => $message->getPushType()],
];

if ($message->getCollapseKey() != Message::NO_COLLAPSE) {
$messageAttributes['AWS.SNS.MOBILE.APNS.COLLAPSE_ID'] = ['DataType' => 'String', 'StringValue' => $message->getCollapseKey()];
}

$this->sns->publish(
[
'TargetArn' => $endpointArn,
'Message' => json_encode($message, JSON_UNESCAPED_UNICODE),
'MessageStructure' => 'json',
'MessageAttributes' => [
'AWS.SNS.MOBILE.APNS.PUSH_TYPE' => ['DataType' => 'String', 'StringValue' => $message->getPushType()],
],
'MessageAttributes' => $messageAttributes,
]
);
}
Expand Down
55 changes: 55 additions & 0 deletions tests/Mcfedr/AwsPushBundle/Tests/Service/MessagesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ public function testSend()
->method('jsonSerialize')
->willReturn('data');

$message->expects($this->once())
->method('getCollapseKey')
->willReturn(Message::NO_COLLAPSE);

$message->expects($this->once())
->method('getPushType')
->willReturn(Message::PUSH_TYPE_ALERT);
Expand Down Expand Up @@ -83,6 +87,10 @@ public function testSendPlatforms()
->method('isPlatformsCustomized')
->willReturn(false);

$message->expects($this->once())
->method('getCollapseKey')
->willReturn(Message::NO_COLLAPSE);

$message->expects($this->once())
->method('getPushType')
->willReturn(Message::PUSH_TYPE_ALERT);
Expand Down Expand Up @@ -122,6 +130,10 @@ public function testSendPlatformsCustomized()
->method('isPlatformsCustomized')
->willReturn(true);

$message->expects($this->once())
->method('getCollapseKey')
->willReturn(Message::NO_COLLAPSE);

$message->expects($this->once())
->method('getPushType')
->willReturn(Message::PUSH_TYPE_ALERT);
Expand Down Expand Up @@ -156,10 +168,53 @@ public function testSendBackground()
->method('jsonSerialize')
->willReturn('data');

$message->expects($this->once())
->method('getCollapseKey')
->willReturn(Message::NO_COLLAPSE);

$message->expects($this->once())
->method('getPushType')
->willReturn(Message::PUSH_TYPE_BACKGROUND);

$messages->send($message, 'arn');
}

public function testSendWithCollapseKey()
{
$messages = new Messages($this->client, []);

$collapseKey = uniqid();

$this->client
->expects($this->once())
->method('publish')
->with([
'TargetArn' => 'arn',
'Message' => '"data"',
'MessageStructure' => 'json',
'MessageAttributes' => [
'AWS.SNS.MOBILE.APNS.PUSH_TYPE' => ['DataType' => 'String', 'StringValue' => 'alert'],
'AWS.SNS.MOBILE.APNS.COLLAPSE_ID' => ['DataType' => 'String', 'StringValue' => $collapseKey],
],
]);

$message = $this->getMockBuilder(Message::class)
->disableOriginalConstructor()
->getMock();

$message->expects($this->any())
->method('getCollapseKey')
->willReturn($collapseKey);

$message->expects($this->once())
->method('jsonSerialize')
->willReturn('data');

$message->expects($this->once())
->method('getPushType')
->willReturn('alert');

$messages->send($message, 'arn');
}

}

0 comments on commit 58b631e

Please sign in to comment.