FCM ios配置

时间:2018-10-05 09:42:38

标签: ios swift firebase firebase-cloud-messaging

我正在尝试使用FCM进行推送通知。我遵循文档,并尝试使用:

InstanceID.instanceID().instanceID { (result, error) in
    if let error = error {
        print("Error fetching remote instange ID: \(error)")
    } else if let result = result {
        print("Remote instance ID token: \(result.token)")
        self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
    }
}

如文档中所指定,但是我不确定应该放在哪里,应该放在didFinishLaunchingWithOptions内吗?

我收到此编译错误:

  

静态成员'instanceID'不能用于类型的实例   “ InstanceID”

2 个答案:

答案 0 :(得分:1)

didFinishLaunchingWithOptions中添加观察者。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    NotificationCenter.default.addObserver(self, selector: #selector(self.tokenRefreshNotification), name: NSNotification.Name.InstanceIDTokenRefresh, object: nil)
}

didRegisterForRemoteNotificationsWithDeviceToken内调用

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    self.connectToFcm()
}

方法

@objc func tokenRefreshNotification(_ notification: Notification) {
    self.connectToFcm()
}

创建1个函数。

func connectToFcm() {
    InstanceID.instanceID().instanceID { (result, error) in
        if let error = error {
            print("Error fetching remote instange ID: \(error)")
        }
        else {
            print("FCM Token = \(String(describing: result?.token))")
            print("Remote instance ID token: \(result.token)")
            self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
        }
    }
}

答案 1 :(得分:1)

我敢肯定,经过这里并遇到此问题的一些人并没有通过Kuldeep提供的解决方案解决他们的问题。

我有同样的问题。

didRegisterForRemoteNotificationsWithDeviceToken内部,而不要像capacitor guide所建议的那样使用InstanceID.instanceID().instanceID

  func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidRegisterForRemoteNotificationsWithDeviceToken.name()), object: Messaging.messaging().fcmToken )
  }

与标准didRegisterForRemoteNotificationsWithDeviceToken的唯一区别是我们正在使用Messaging.messaging().fcmToken

medium上找到了解决方案。您可能希望此版本或至少可以使用的版本会出现在电容器文档中...由您决定要遵循的指南,我使用了所有电容器指南,但需要使用此指南来测试fcmToken的通知。中型指南包含有关fcmToken的更多信息,因此,根据您的使用情况,研究本指南可能是一个好主意。