2017-09-27 59 views
0

問題是通知服務擴展本身是無用的,除了應用程序被終止時可以顯示的一件事情。因此,通過inapp通知和內容擴展,我可以顯示自定義通知,但只有當應用程序未被終止/強制關閉時纔會顯示該通知。 問題:如果在有內容和服務通知擴展的情況下如何管理inapp通知,以及如何強制通知服務擴展來調用/喚醒通知內容擴展。IOS:Inapp通知+通知服務+內容擴展

回答

0

看起來我需要清理項目並刪除應用程序並重新安裝。下面是FCM完整步驟來實現這種情況下,也許有些步驟是多餘的,但我不想去觸摸它,而它正在工作:

應用程序被殺害/關閉:通知出現自定義內容視圖 應用程序是在後臺:通知出現使用自定義內容視圖 應用程序是在前臺:通知到達默默

  1. 從服務器端的通知應該是這樣的

    { 「notification」://必填 { 「data」:{}, 「body」:「」//似乎也是強制性的,無論如何,您可以在服務擴展中更改它 } 「content_available」:true,//強制性 「mutable_content」:真實的,//強制 「要」: 「」 //強制 }

  2. 創建通知服務擴展目標。

  3. 在NSExtension下的info.plist中,將UNNotificationExtensionCategory添加爲Array,並添加一個具有所需名稱的類別,但在任何地方都使用相同的名稱。
  4. 在通知服務擴展目標中,確保所有內容與主要目標(快速版本,構建版本,部署目標,設備)相同。
  5. 在功能中添加應用程序組(應與主目標中的相同)。
  6. 在NotificationService在didReceive得到可變內容

    bestAttemptContent =(request.content.mutableCopy()作爲?UNMutableNotificationContent)

  7. 添加您的類別,內容

    bestAttemptContent.categoryIdentifier =「您的類別「

  8. 呼叫contentHandler(bestAttemptContent)後,出現標準通知。

  9. 創建通知內容擴展目標。

  10. 在NSExtension下的info.plist中,將UNNotificationExtensionCategory添加爲Array,並添加一個您已爲該服務創建的名稱相同的類別。
  11. 根據您的設計更改MainInterface.storyboard中的設計。
  12. 在NotificationViewController中,自定義數據將在notification.request.content.userInfo["gcm.notification.data"]中。所以在NotificationViewController中用數據填充視圖。不要忘記preferredContentSize
  13. 在功能中添加應用程序組(應與主目標中的相同)。
  14. 主要目標AppDelegate工具UNUserNotificationCenterDelegate
  15. didFinishLaunchingWithOptions添加

    UNUserNotificationCenter.current()代表=自 UNUserNotificationCenter.current()requestAuthorization(選項:[.badge,.alert,.sound])。。{(授予,誤差) } application.registerForRemoteNotifications()

  16. 在AppDelegate中添加

    FUNC應用(_應用:UIApplication的,didRegisterForRemoteNotificationsWithDeviceToken deviceToken :數據){。 Messaging.messaging()apnsToken = deviceToken }

  17. 在userNotificationCenter willPresent檢查,如果您的應用程序沒有運行。我做這樣說:

    FUNC userNotificationCenter?(_中心:UNUserNotificationCenter,willPresent通知:未通知,withCompletionHandler completionHandler:@escaping(UNNotificationPresentationOptions) - >無效){ 如果self.window .rootViewController == {零 completionHandler ([.badge,.alert,.sound]) } UIApplication.shared.applicationIconBadgeNumber = UIApplication.shared.applicationIconBadgeNumber + 1 }

  18. 拉手無聲通知這裏:

    FUNC應用(_應用:UIApplication的,didReceiveRemoteNotification USERINFO:[AnyHashable:任何],fetchCompletionHandler completionHandler:@escaping(UIBackgroundFetchResult) - >空隙)

  19. 手柄上在通知中的抽頭在這裏:

FUNC userNotificationCenter(_中心:UNUserNotificationCenter,didReceive響應:UNNotificationResponse,withCompletionHandler completionHandler:@escaping() - >無效)

在這裏你可以自定義DAT一個用同樣的方式response.notification.request.content.userInfo["gcm.notification.data"]

  • 如果你有異步調用網絡加載數據/圖像不會忘記實現func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping() -> Void)
  • 似乎是所有:)。啊,擴展工作正在開始IOS 10。請糾正我,如果有什麼缺失或什麼是多餘的。