私は現在実装していますプッシュ通知、使用して-私たちのアプリ(同じコードベースのMacOSカタリナ&iOS版)に、当社のバックエンドサーバからのアップルのプッシュ通知(鍵ID、teamId、からJWTを生成&認証トークンベースの方法を...&それに署名しますApple開発者コンソールで生成された秘密鍵を使用して)、APNサービスにプッシュを送信します。
私が直面している問題は、「アラート」通知(ステータス200、ヘッダー付きapns-push-type: alert
)を正常に送信し、iOSおよびMacOSデバイスで受信できることです(プッシュ通知はプロダクションモードおよびサンドボックスモードで正常に表示されます)が、何らかの理由で「サイレント」 "ヘッダー付きのプッシュapns-push-type: background
は、iOSデバイス(iPhone)でのみ受信され、Macでは受信されません(didReceiveRemoteNotification(...)
in AppDelegate
は呼び出されません)。
これまでに行ったこと:
- APNリクエストヘッダーがサイレントプッシュ用に正しく設定されていることを確認しました。
apns-push-type: background
- 正しいAPNトピックヘッダーがあることを確認しました:(
apns-topic: my.bundle.id
これはサンドボックス/プロダクションでは異なります) - 「準必須」の優先度ヘッダーを追加:(
apns-priority: 5
バックグラウンドプッシュを配信する場合のみ) - 作成されたJWTが有効であり、APN authヘッダーで使用されていることを確認しました
authorization: mytoken
(そうである必要があります。そうでない場合、APNサービスはステータス200で応答しません) - アプリケーションにXcodeで定義された正しいエンタイトルメントと機能があることを確認しました(私の推論:これは事実である必要があります。そうでない場合、「アラート」プッシュ通知も機能しません)
- Macアプリのプッシュ通知が許可/有効化されていることを再確認しました(システム設定を確認しました)
- プッシュを送信するデバイストークンが、実際にプッシュを受信することを目的としたデバイスからのものであることを確認しました(例:MacBook)
- JWTの署名に使用している秘密鍵にAPN機能があることを確認しました
- Macアプリの実行中にテストされていますが、フォーカスされていません。
プッシュを送信するために実行しているAPNsリクエストは次のとおりです。
- サンドボックス:POST https://api.sandbox.push.apple.com/3/device/ {deviceToken}
- 生産:POST https://api.push.apple.com/3/device/ {deviceToken}
リクエスト本文でAPNサービスに送信するペイロード(JSON)は次のようになります。
{
"aps": {
"content-available": 1 # defines push as "silent"
},
"data": { #some key-value pairs here }
}
いずれの場合でも(iOSとmacOSの両方のデバイストークンを使用するプロダクションとサンドボックスの両方)、APNへのリクエストがステータスコード200で返されます。私のMacBookはCatalina 10.15.3を実行しています。私はここで何が間違っているのでしょうか、それとも単にCatalystアプリでサポートされていないことですか?