2017-09-14 12 views
1

アプリケーションにfirebaseメッセージを実装しようとしていますが、アプリケーションがアクティブなときに通知を受信して​​います(コンソールで表示できます。アプリがアクティブな状態です。閉じている場合は、アプリが再びアクティブになるまで表示されません)。Firebaseアプリケーションがアクティブでないときに表示されない

私はバックグラウンド通知をオンにしています。また、p12証明書をfirebase設定にロードしました。

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

    Fabric.with([Crashlytics.self]) 

    FirebaseApp.configure() 


    Messaging.messaging().delegate = self 
    Messaging.messaging().shouldEstablishDirectChannel = true 

    if #available(iOS 11.0, *){ 
     print("IOS 11") 
     UNUserNotificationCenter.current().delegate = self 

     let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] 
     UNUserNotificationCenter.current().requestAuthorization(
      options: authOptions, 
      completionHandler: {_, _ in }) 
    }else if #available(iOS 10.0, *){ 
     // For iOS 10 display notification (sent via APNS) 
     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 messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) { 
    print("Firebase registration token: \(fcmToken)") 
} 

@nonobjc func application(application: UIApplication, 
       didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
    Messaging.messaging().apnsToken = deviceToken as Data 
} 

func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) { 
    // Convert to pretty-print JSON 
    guard let data = 
     try? JSONSerialization.data(withJSONObject: remoteMessage.appData, options: .prettyPrinted), 
     let prettyPrinted = String(data: data, encoding: .utf8) else { 
      return 
    } 
    print("Received direct channel message:\n\(prettyPrinted)") 
} 

func application(received remoteMessage: MessagingRemoteMessage){ 

    print("Received Remote Message") 
    guard let data = 
     try? JSONSerialization.data(withJSONObject: remoteMessage.appData, options: .prettyPrinted), 
     let prettyPrinted = String(data: data, encoding: .utf8) else { 
      return 
    } 
    print("Received direct channel message:\n\(prettyPrinted)") 

} 

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

編集1: 、ここでは、コンソールに私が受け取るサンプル通知である

{ 
    "from" : "480981200252", 
    "notification" : { 
    "e" : "1", 
    "body" : "hey" 
    }, 
    "collapse_key" : "com.amplesftwr.thelifeofcarl" 
} 

編集2: ここでは写真である。ここ

は私のアプリデリゲートのコードがありますの背景モードの設定:

+0

これはiOS 10では有効ですが、11では動作しませんか? – Honey

+0

わかりません10で動作する場合は11を使用しています。 –

+0

アップデート:ios 10と同じ結果 –

答えて

2

[機能]の[ 「プッシュ通知」だけでなく、「背景モード」もオンになっていることを確認してください。

.plistファイルには、「必須バックグラウンドモード」のキーも必要です。また、プロジェクトには.entitlementsファイルもあることを確認してください。

Firebug Consoleに移動すると、この特定のユーザのトークンだけに通知するのではなく、このオプションを使用してアプリケーションのすべてのユーザにメッセージを送信してみてくださいFirebaseコンソールで起動します。

問題が解決した場合、問題はFCMトークンと関係する可能性があります。

まだ動作しない場合は、キーチェーンとアップルデベロッパーアカウントのすべての証明書をチェックして、すべてがすべて緑色であることを確認するか、重複がないことを確認してください。

私は残念なことにあなたの投稿をコメントできませんでしたので、私はここで回答として追加しました。うまくいけば、あなたの問題を解決するのに役立ちますが、うまくいけば、私に知らせてくださいと私は私のベストを試します:)

+0

アレックス、すべての提案のための上記の元の投稿にバックグラウンドモードの写真をアップロードしました。プッシュ通知が有効になっています。 plistはバックグラウンドモードを必要としています。私はすでに一人のユーザーではなく、アプリケーション全体にプッシュしています。悲しいことに私は投稿する前にそれらの事柄をすべて試しました:/ –

+0

更新:私は証明書を取り消そうとしていて、それを(ファイアベースにも)再追加しましたが、それでも同じ問題 –

+0

アップデートのおかげでBenjamin!私は明日の朝にあなたに戻ってきます。多分、良い睡眠の後に物事はより明確になります:) – Alex

関連する問題