タイトルが示すように、現在、UNNotificationServiceExtension 内からタスクをスケジュールできません。次の関数が呼び出されてプッシュが受信されたときにタスクをスケジュールしたいと思います。
func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void)
現在、私が電話するとすぐに:
try BGTaskScheduler.shared.submit(request)
catch 句が入力され、次のエラーが返されます: 「操作を完了できませんでした。(BGTaskSchedulerErrorDomain エラー 1.)'
プッシュ メッセージは、次の URL を介して Firebase クラウド メッセージングで送信され、アプリで完全に受信されます: https://fcm.googleapis.com/v1/ {プロジェクトへのパス}。この URL を POSTMAN 内から呼び出します。アクセス トークンと json 本体も指定します。
プッシュ メッセージの apns ヘッダーは、「apns-push-type」:「background」に設定されます。そして、payload.aps には次の値があります: "apns-priority": "5","content-available": 1, "mutable-content": 1。
奇妙なことに、UNNotificationServiceExtension 内からバックグラウンド タスクを起動せずに、実際のアプリ内からバックグラウンド タスクを動作させました。コードが実際に機能するかどうかを確認するためにこれを試しました。
1. info.plist の「許可されたバックグラウンド タスク スケジューラ識別子」に正しいタスク識別子が入力されていることを確認しました。この文字列がコードでも正しく使用されることをトリプルチェックしました。
2.アプリで次の機能を有効にしました: 「バックグラウンド フェッチ」、「リモート通知」、「バックグラウンド処理」。
3. info.plist では、次の UIBackgroundModes がサポートされています: 'audio'、'fetch'、'processing'、'remote-notification' および 'voip'。これらの同じ UIBackgroundModes は、UNNotificationServiceExtension info.plist にも入力されます (念のために行いました)。
4.タスクが「didFinishLaunchingWithOptions」の AppDelegate に登録されるようにしました
。 5.タスクが実際に起動されるたびに、「expirationHandler」と「setTaskCompleted」を呼び出します。
ヘルプやガイダンスをいただければ幸いです。
前もって感謝します ;-)