リモートプッシュ通知では、Info.plistにUIBackgroundModesを追加する必要がありますか?


104

リモートプッシュ通知を統合しましたが、次の警告が表示されます。

didReceiveRemoteNotification:fetchCompletionHandler:]ただしremote-notification、サポートされているのリストに「」 を追加する必要がありUIBackgroundModeますInfo.plist

Xcodeのバージョンは8.3.1です。これを本当に追加したいですInfo.plist。私もいくつかのチュートリアルに従いましたが、彼らもこれについて言及しませんでした。私は本当に何をすべきですか?

回答:


245

はい。バックグラウンド更新にリモート通知を使用できるようにするには、バックグラウンドモード/リモート通知を有効にする必要があります。

これを行う最も簡単な方法は、プロジェクト設定を使用することです。ナビゲートするためにターゲット- >あなたのアプリケーション- >機能- >バックグラウンドモードとは、チェックリモート通知を。これにより、必要な設定が自動的に有効になります。

プロジェクト設定のバックグラウンドモードドロップダウンリスト


3
私はすでにそのフィールドをチェックしましたが、それでも同じエラーが発生します。
Anuj

Anujは以下の私の答えを参照
Joshua Cleetus

1
私はこの答えに同意しません。リモート通知を使用してバックグラウンド更新を行う場合は、バックグラウンドモード->リモート通知のみを有効にする必要があります。こちらのドキュメントを参照してください。 バックグラウンド更新通知の構成
jzeferino

1
@jzeferinoお知らせありがとうございます。回答に説明を追加しました。元の質問は、application(_:didReceiveRemoteNotification:fetchCompletionHandler:)データフェッチの処理に使用される関数に関するものであったことに注意してください。
タマシュSengel

これはすばらしいことですが、バックグラウンド更新の機能が必要かどうかという質問に答えます。プッシュ通知のためだけにバックグラウンドモード機能を設定する必要があるかどうかについての回答を投稿しました(ネタバレ、設定しません)。
mobob

30

必要なinfo.plist([名前を付けて開く]-> [ソースコード])を編集して貼り付けることもできます。

<dict>
<key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>

7
バックグラウンドモードでリモート通知をチェックすると、Xcodeによって自動的に追加されるようになりました
Vinoth Vino

1
私は対象外:バージョン11.4.1(11E503a)
paiego

4

実際、単にリモート通知を使用するために.plistにUIBackgroundModesを追加する必要はありません。

私は相続人を少し分けていることを知っています(他の答えはほとんど素晴らしいです、そしておそらくiOS 11のように何かが新しいです)質問はバックグラウンド更新を必要とするプッシュ通知に言及し、そうではありません。

ここでの違いは、AppDelegateで通知を受け取る2つの異なるメソッドがあることです。

これは、UIBackgroundModesを使用する必要がありません。

optional func userNotificationCenter(_ center: UNUserNotificationCenter, 
                         willPresent notification: UNNotification, 
               withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)

上記は、iOS 11で非推奨になったものに代わるものです。

optional func application(_ application: UIApplication, 
didReceiveRemoteNotification userInfo: [AnyHashable : Any])

そして、これにはバックグラウンドモード機能が必要です。

optional func application(_ application: UIApplication, 
didReceiveRemoteNotification userInfo: [AnyHashable : Any], 
   fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)

ここで重要なのは、前者(および廃止されたもの)がアプリがフォアグラウンドにあるときにのみ実行されることです。後者は、アプリがフォアグラウンドまたはバックグラウンドにある場合に実行されます。この特定のナゲットの仕様を参照してください。

このメソッドを使用して、アプリの着信リモート通知を処理します。アプリがフォアグラウンドで実行されている場合にのみ呼び出されるapplication(_:didReceiveRemoteNotification :)メソッドとは異なり、アプリがフォアグラウンドまたはバックグラウンドで実行されている場合、システムはこのメソッドを呼び出します。

したがって、プッシュ通知が必要な場合は、バックグラウンドで実行する必要があるかどうかを決定します。両方が必要な場合にのみ、警告で提案されたメソッドを実装する必要があります。


3

これは、機能でリモート通知のバックグラウンドモードを設定した後でも起こりました。問題は、3つのターゲットがあったことです。1つは本番用、1つはQA用、ステージング用です。3つのターゲットすべてにリモート通知を設定する必要があり、警告が修正されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.