pushok icon indicating copy to clipboard operation
pushok copied to clipboard

Implement iOS 13 updates

Open edamov opened this issue 6 years ago • 11 comments

https://onesignal.com/blog/ios-13-introduces-4-breaking-changes-to-notifications/ https://aws.amazon.com/blogs/messaging-and-targeting/sending-push-notifications-to-ios-13-devices-with-amazon-sns/

edamov avatar Oct 13 '19 19:10 edamov

In order to send VOIP push notifications we need to set $this->headers[self::HEADER_APNS_PUSH_TYPE] = 'voip';

zek avatar Oct 24 '19 13:10 zek

I've tried adding that on Request.php but it also needs to be set

$this->headers[self::HEADERS_APNS_TOPIC] == bundleId."voip"

When I'm doing the auth I know I'm sending that header but I can't retrieve it from Request.php (I don't know how, I've tried multiple stuff).. so what I did waws, a sort of a hack, sending a customValue (from my app) on the payload, and updating Request.php with the following code

// new header required to support iOS 13
        $this->headers[self::HEADER_APNS_PUSH_TYPE] = 'alert';
        $payload = $notification->getPayload();
        try {
            $apnsTopic = $payload->getCustomValue(self::HEADER_APNS_TOPIC);
        } catch (InvalidPayloadException $e) {
        }
        if ($notification->getPayload()->isContentAvailable()) {
            $this->headers[self::HEADER_APNS_PUSH_TYPE] = 'background';
        }
        if (isset($apnsTopic) && !empty($apnsTopic)) {
            $this->headers[self::HEADER_APNS_TOPIC] = $apnsTopic;
            $this->headers[self::HEADER_APNS_PUSH_TYPE] = 'voip';
        }

But I know this is not ideal, and we might just recover that value (appBundleId) from the headers and then we might add a validation if strpos($appBundleId, 'voip') then we can set $this->headers[self::HEADER_APNS_PUSH_TYPE] = 'voip'

I would like to work in a patch, but I'm trying to understand the codebase and why that header is "lost" after the authentication :/

angvp avatar Nov 13 '19 02:11 angvp

But can we check if HEADER_APNS_TOPIC exists, then add HEADER_APNS_PUSH_TYPE=void?

if ($notification->getPayload()->isContentAvailable()) {
    $this->headers[self::HEADER_APNS_PUSH_TYPE] = 'background';
} elseif (isset($this->headers[self::HEADER_APNS_TOPIC]))
    $this->headers[self::HEADER_APNS_PUSH_TYPE] = 'voip';
}

edamov avatar Nov 16 '19 09:11 edamov

@edamov I'll try this today and I'll let you know if it works. Thanks!

angvp avatar Nov 17 '19 16:11 angvp

Hmm I think I misunderstood you, how come I can have $this->headers[self::HEADER_APNS_TOPIC] with the value of the bundleId."voip" ? automatically, as this is being sent when we authenticate against apple api?

angvp avatar Nov 19 '19 02:11 angvp

Seems now I understand what do you mean :smiley: Request class is not accessible. We need to improve Request class with the code I wrote above. Will it make sense? Can you create PR?

edamov avatar Nov 19 '19 06:11 edamov

Ok I will create the PR with this code, although I will create a branch with the modifications I need to make it work on my project, then after when everything is upstream I'll point to that branch.

Thanks!

angvp avatar Nov 19 '19 15:11 angvp

I made a PR: https://github.com/edamov/pushok/pull/91 that will solve the voip part.

angvp avatar Nov 20 '19 17:11 angvp

Thanks! I just found there are much more push types like mdm, fileprovider, complication. It is very good that it is possible now to set them

edamov avatar Nov 20 '19 18:11 edamov

I tried to send voip push notifications, but apparently this package doesn't automatically add a .voip suffix to the bundle id.

voip ... If you set this push type, the apns-topic header field must use your app’s bundle ID with .voip appended to the end.

https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns/

chimit avatar Mar 09 '20 10:03 chimit

Apparently, we can close this issue along with this one https://github.com/edamov/pushok/issues/97

chimit avatar May 05 '20 04:05 chimit