iOS тихий удаленный пу sh уведомление не работает: пользователь не видит содержимого - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь отправить тихие удаленные уведомления sh pu с сервера PHP на устройство iOS. Настройте, используя информацию на https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app

Когда я отправляю сообщение, я вижу, что оно получено устройством iOS (iOS версия 12.4.7). Но я также вижу ошибку «Уведомление не имеет видимого пользователем содержимого». Теперь это тихое фоновое уведомление с установленным заголовком apns-push-type:background, я бы подумал, что нет необходимости в видимом пользователем контенте?

[xxxxx] Not delivering user visible push notification B026-EC8D [ error=Error Domain=UNErrorDomain Code=1401 "Notification has no user visible content" UserInfo={NSLocalizedDescription=Notification has no user visible content} ]

Уведомления работают, когда приложение находится в фоновом режиме, но не когда приложение закрыто.

Я попытался отправить обычное нефоновое предупреждение, и оно отлично работает, даже если приложение закрыто.

Ниже приведен простой класс / функция, которые я создал на тестирование

class SimpleApnsService
{
    public static function push($deviceToken, $certificate, $topic)
    {
        $payload = '{
            "appdata": "command:refresh",
            "aps": {
                "content-available": 1
            }
        }';

        $url = "https://api.development.push.apple.com/3/device/$deviceToken";

        $headers = [
            "apns-topic:$topic",
            "apns-push-type:background",
            "apns-priority:5",
        ];

        $ch = curl_init($url);

        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        // there is not password set on the certificate
        curl_setopt($ch, CURLOPT_SSLCERT, $certificate);

        // return true
        $response = curl_exec($ch); => return true

        // returns 200
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    }
}
...