2016-09-08 3 views
0

안녕하세요 저는 Google의 Firebase를 통해 푸시 알림을 보내는 iPhone 앱을 만들고 있습니다. 나는 프로그래밍을 위해 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 (code = EXC_I386_INVOP, subcode = 0x0) 런타임 오류가 있고이 코드 줄을 빨간색으로 표시합니다 : 'print ("MessageID : \ (userInfo ["gcm_message_id "]!) ")' 아이디어가 있으십니까? –

+0

'print ("MessageID : \ (userInfo ["gcm.message_id "]!)")'여야합니다. – Callam

관련 문제