2016-09-08 79 views
0

您好,我正在制作iPhone应用,并通过Google的Firebase发送推送通知。我正在使用Swift和Xcode进行编程。当我打开应用程序时,系统会要求我提供推送通知,但是我从Firebase控制台发送它们时没有收到任何推送通知。我想知道你能否帮我解决问题。我正在使用Ad Hoc导出功能将.isa文件传输到我朋友的iPhone,并以此方式进行测试。我完全遵循了Firebase教程 - 添加了.plist,可可豆和我在项目设置中上传了一个证书。我有一个付费的苹果开发者帐户。通过Firebase无法正常工作的iOS推送通知

import UIKit 
import CoreData 
import Firebase 
import FirebaseMessaging 


@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

var window: UIWindow? 


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

    let notificationTypes: UIUserNotificationType = [UIUserNotificationType.Alert,UIUserNotificationType.Badge,UIUserNotificationType.Sound] 

    let notificationSettings = UIUserNotificationSettings(forTypes:notificationTypes, categories:nil) 

    application.registerForRemoteNotifications() 
    application.registerUserNotificationSettings(notificationSettings) 
    return true 
} 


func applicationWillResignActive(application: UIApplication) { 
} 

func applicationDidEnterBackground(application: UIApplication) { 
} 

func applicationWillEnterForeground(application: UIApplication) { 
} 

func applicationDidBecomeActive(application: UIApplication) { 
} 

func applicationWillTerminate(application: UIApplication) { 
} 

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], 
       fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
    print("MessageID : \(userInfo["gcm_message_id"]!)") 
    print("%@", userInfo) 

    } 
} 
+0

遵循这一切http://shubhank101.github.io/iOSAndroidChaosOverFlow/2016/07/Push-Notification-in-iOS-using-FCM-(Swift) – Shubhank

回答

0

还有一些事情你需要做。当您使用registerForRemoteNotifications时,您将收到需要提供给Firebase的APNS令牌。这在application didRegisterForRemoteNotificationsWithDeviceToken完成。

import UIKit 
import CoreData 
import Firebase 
import FirebaseMessaging 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 

    override init() { 

     super.init() 

     FIRApp.configure() 
    } 

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

     application.registerForRemoteNotifications() 
     application.registerUserNotificationSettings(
      UIUserNotificationSettings(
       forTypes: [.Alert, .Badge, .Sound], 
       categories: nil 
      ) 
     ) 

     NSNotificationCenter.defaultCenter().addObserver(self, 
      selector: #selector(tokenRefreshNotification), 
      name: kFIRInstanceIDTokenRefreshNotification, 
      object: nil 
     ) 

     return true 
    } 

    func applicationDidEnterBackground(application: UIApplication) { 

     FIRMessaging.messaging().disconnect() 
    } 

    func applicationDidBecomeActive(application: UIApplication) { 

     FIRMessaging.messaging().connectWithCompletion { (error) in 

      switch error { 
      case .Some: 
       print("Unable to connect with FCM. \(error)") 
      case .None: 
       print("Connected to FCM.") 
      } 
     } 
    } 

    func applicationWillResignActive(application: UIApplication) {} 

    func applicationWillEnterForeground(application: UIApplication) {} 

    func applicationWillTerminate(application: UIApplication) {} 

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

     FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .Sandbox) 
    } 

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

     print("MessageID : \(userInfo["gcm.message_id"]!)") 
     print("%@", userInfo) 
    } 

    func tokenRefreshNotification(notification: NSNotification) { 

     if let refreshedToken = FIRInstanceID.instanceID().token() { 
      print("Instance ID token: \(refreshedToken)") 
     } 

     applicationDidBecomeActive(UIApplication.sharedApplication()) 
    } 
} 
+0

谢谢你的答案。试过你的解决方案,我得到了一个运行时错误线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0),它将这行代码标记为红色: 'print(“MessageID:\(userInfo [”gcm_message_id“]!) “)' 有什么想法? –

+0

它应该是'print(“MessageID:\(userInfo [”gcm.message_id“]!)”)' – Callam