2

私は自分のアプリにgoogleアカウントを作成し、Googleアプリを作成し、APNSの認証をアップロードし(別のサービスで働いています)、コンソールからプッシュ通知を送信します。それを受け取る。 Firebaseコンソールでは、私はデバイスのステータスを完全しかし、おおよその数が表示さ「 - 」firebase iOSはプッシュ通知を受け取りません

もちろんI更新条項プロファイルとAPNSの証明書

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    // Register for remote notifications 
    if #available(iOS 8.0, *) { 
     let settings: UIUserNotificationSettings = 
      UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) 
     application.registerUserNotificationSettings(settings) 
     application.registerForRemoteNotifications() 
    } else { 
     // Fallback 
     let types: UIRemoteNotificationType = [.Alert, .Badge, .Sound] 
     application.registerForRemoteNotificationTypes(types) 
    } 


    FIRApp.configure() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotificaiton), 
                name: kFIRInstanceIDTokenRefreshNotification, object: nil) 
}  

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], 
       fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 

    print(userInfo) 
} 

func tokenRefreshNotificaiton(notification: NSNotification) { 
    if let refreshedToken = FIRInstanceID.instanceID().token() { 
     print("InstanceID token: \(refreshedToken)") 

     User.sharedUser.googleUID = refreshedToken 
    } 
} 


func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler:() -> Void) { 

    print(userInfo) 
} 

    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 

    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Prod) 
} 

func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler:() -> Void) { 

    print(userInfo) 
} 

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], 
       fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 


    print(userInfo) 
} 

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { 

    print("ошибка") 
    print(error) 
    print(error.description) 

} 
+0

ポストあなたの 'アプリケーション:didRegisterForRemoteNotificationsWithDeviceToken:' 'とアプリケーション:didFailToRegisterForRemoteNotificationsWithError:'コード。 – redent84

+0

編集してコードを追加 –

+1

Frank、このコードの目的は何ですか?FIRInstanceID.instanceID()。setAPNSToken(deviceToken、type:FIRInstanceIDAPNSTokenType.Prod) '? Firebaseの例では、それが必要であるとは言いません。 – justColbs

答えて

9

私が見る最初の事はFIRMessagingに接続するために何の呼び出しはありませんです。これをあなたのAppDelegateに追加してみてください:

func applicationDidBecomeActive(application: UIApplication) { 
    FIRMessaging.messaging().connectWithCompletion { error in 
     print(error) 
    } 
} 
+0

ありがとう:)それは完璧な仕事です、私は私の証明書を更新し、このコードを追加 –

5

次のコードを使用してください。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
{ 
    if #available(iOS 10.0, *) 
    { 
     // For iOS 10 display notification (sent via APNS) 
     UNUserNotificationCenter.currentNotificationCenter().delegate = self 
     UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions([.Badge, .Sound, .Alert])   { (granted, error) in 
       if granted 
       { 
       //self.registerCategory() 
      } 
     } 
     // For iOS 10 data message (sent via FCM) 
     FIRMessaging.messaging().remoteMessageDelegate = self 
    } 
    else 
    { 
     let settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: [.Alert,.Badge,.Sound], categories: nil) 
     application.registerUserNotificationSettings(settings) 
    }   
    application.registerForRemoteNotifications()   
    //Configuring Firebase 
    FIRApp.configure() 
    // Add observer for InstanceID token refresh callback. 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotification), name: kFIRInstanceIDTokenRefreshNotification, object: nil)  
    return true 
} 

//Receive Remote Notification on Background 
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 
{ 
    FIRMessaging.messaging().appDidReceiveMessage(userInfo) 
} 

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) 
{ 
    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox) 
    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Prod) 
} 

func tokenRefreshNotification(notification: NSNotification) 
{ 
    if let refreshedToken = FIRInstanceID.instanceID().token() 
    { 
      print("InstanceID token: \(refreshedToken)") 
    } 
    // Connect to FCM since connection may have failed when attempted before having a token. 
    connectToFcm() 
} 

func connectToFcm() 
{ 
    FIRMessaging.messaging().connectWithCompletion { (error) in 
      if (error != nil) 
      { 
       print("Unable to connect with FCM. \(error)") 
      } 
      else 
      { 
       print("Connected to FCM.") 
      } 
    } 
} 

func applicationDidBecomeActive(application: UIApplication) 
{    
    connectToFcm() 
} 
関連する問題