2017-08-02 9 views
0

IOS開発の新機能です。Swift3はバックグラウンドのFCMプッシュ通知を受け取ることができません

私はGoogleの2daysを検索しました。

FCMによるバックグラウンドプッシュ通知を受信できません。

フォアグラウンドでは受信されましたが、バックグラウンドでは、デリゲートと呼ばれませんでした。

checked capabilities-> Push Notifications、Background Modes。

優先度をhigh、content_availableをtrueに設定しました。

swift3、ios10.3、firebaseを使用しています。

ここに私のコードです。あなたの関数で

import UIKit 
import UserNotifications 
import Firebase 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
    let gcmMessageIDKey = "gcm.message_id" 

func application(_ application: UIApplication, 
       didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    FirebaseApp.configure() 

    Messaging.messaging().delegate = self 
    if #available(iOS 10.0, *) { 
     UNUserNotificationCenter.current().delegate = self 

     let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] 
     UNUserNotificationCenter.current().requestAuthorization(
      options: authOptions, 
      completionHandler: {_, _ in }) 
    } else { 
     let settings: UIUserNotificationSettings = 
      UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) 
     application.registerUserNotificationSettings(settings) 
    } 

    application.registerForRemoteNotifications() 
    return true 
} 
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { 
    if let messageID = userInfo[gcmMessageIDKey] { 
     print("Message ID: \(messageID)") 
    } 

    print(userInfo) 
} 
    func applicationDidBecomeActive(_ application: UIApplication) 
    { 
     Messaging.messaging().shouldEstablishDirectChannel = true 

     application.applicationIconBadgeNumber = 0; 
    } 

    func applicationDidEnterBackground(_ application: UIApplication) 
    { 
     Messaging.messaging().shouldEstablishDirectChannel = false 
     print("Disconnected from FCM.") 
    } 
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], 
       fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { 
    if let messageID = userInfo[gcmMessageIDKey] { 
     print("Message ID: \(messageID)") 
    } 

    print(userInfo) 

    completionHandler(UIBackgroundFetchResult.newData) 
} 
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { 
    print("Unable to register for remote notifications: \(error.localizedDescription)") 
} 

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 
    print("APNs token retrieved: \(deviceToken)") 

} 
} 

@available(iOS 10, *) 
extension AppDelegate : UNUserNotificationCenterDelegate { 

func userNotificationCenter(_ center: UNUserNotificationCenter, 
          willPresent notification: UNNotification, 
          withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 
    let userInfo = notification.request.content.userInfo 

    if let messageID = userInfo[gcmMessageIDKey] { 
     print("Message ID: \(messageID)") 
    } 

    print(userInfo) 

    completionHandler([]) 
} 

func userNotificationCenter(_ center: UNUserNotificationCenter, 
          didReceive response: UNNotificationResponse, 
          withCompletionHandler completionHandler: @escaping() -> Void) { 
    let userInfo = response.notification.request.content.userInfo 
    if let messageID = userInfo[gcmMessageIDKey] { 
     print("Message ID: \(messageID)") 
    } 

    print(userInfo) 

    completionHandler() 
} 
} 

extension AppDelegate : MessagingDelegate { 
func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) { 
    print("Firebase registration token: \(fcmToken)") 
} 
func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) { 
    print("Received data message: \(remoteMessage.appData)") 
} 
} 

答えて

0

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 

あなたはdeviceTokenを受けたが、それを何もしないで、あなたはFirebaseにそれを送信する必要があります。

インポートインスタンスID:

import FirebaseInstanceID 

そして、これを試してみてください。

func application(
    _ application:UIApplication, 
    didRegisterForRemoteNotificationsWithDeviceToken deviceToken:Data) 
{ 
    FIRInstanceID.instanceID().setAPNSToken(
     deviceToken as Data, 
     type:.unknown) 
} 
0

appdelegateに追加します。

func application(_ application: UIApplication, 
        didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 
    Messaging.messaging().apnsToken = deviceToken as Data 
    } 
関連する問題