【问题标题】:Is there any use of Device Token while integrating FCM for push notification in iOS?在 iOS 中集成 FCM 以进行推送通知时,是否使用了 Device Token?
【发布时间】:2017-05-30 11:08:06
【问题描述】:

我有以下场景

使用 APNS

用于接收我的原生 iOS 应用程序的远程通知。在使用它时,我们需要创建 .p12 证书,并且我们需要在注册推送通知时发送在 Appdelegate.m 文件中生成的设备令牌。因此,我们采用了将设备 ID 发送到后端的方法,将通知发送到该特定设备。

使用 FCM 时

我查看了 FCM,还得知我们需要将 .p12 文件上传到他们的控制台。到此为止一切都很好。但是当谈到设备令牌部分时,我不清楚“设备令牌”的“Swizzling”过程。 firebase 是生成设备令牌还是我们需要设置在 didRegisterforRemoteNotification 中生成的设备令牌?

    import FirebaseMessaging

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

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

// NOTE: Need to use this when swizzling is disabled
public func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

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

func tokenRefreshNotification(notification: NSNotification) {
  // NOTE: It can be nil here
  let refreshedToken = FIRInstanceID.instanceID().token()
  print("InstanceID token: \(refreshedToken)")

  connectToFcm()
}

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

public func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
  print(userInfo)
}

【问题讨论】:

  • 是的,instanceID 是您的令牌,您的后端需要它向启用了 Firebase 通知的特定设备发送通知。
  • 它不是在firebase中生成的,您可以在didRegisterforRemoteNotification函数中获取设备的设备令牌。
  • @PraveenKumar 是的,一般来说你是对的,但是对于firebase通知,我们应该使用firebase生成的instanceID。
  • 是的,你是对的。现在,这是您的设备令牌。
  • @AnuragSharma instanceID 是否不断刷新?如果是,如何处理?我们是否需要单独的 API 调用来发送刷新的令牌。

标签: ios firebase swift3 push-notification firebase-cloud-messaging


【解决方案1】:

根据 Firebase 文档 here,它告诉我们:

注册令牌可能会在以下情况下发生变化:

  1. 应用在新设备上恢复

  2. 用户卸载/重新安装应用程序

  3. 用户清除应用数据。

对于“Swizzling”。这个概念是,如果它被禁用,那么您必须覆盖方法didRegisterForRemoteNotificationsWithDeviceToken 以检索 APNs 令牌,然后调用 setAPNSToken。因为你已经在这样做了。

Here 文档中关于启用/禁用方法混合的内容 如下:

FCM 提供的方法调配可简化您的客户端代码。 但是,对于不喜欢使用它的开发人员,FCM 允许您 通过添加禁用方法混合 应用程序的 Info.plist 文件中的 FirebaseAppDelegateProxyEnabledflag 和 将其值设置为 NO(布尔值)。

FCM swizzling 会影响您处理默认注册令牌的方式, 以及如何处理下游消息回调。在适用的情况下, 本指南提供了使用方法和不使用方法的迁移示例 启用混合。

希望你清楚!

【讨论】:

    猜你喜欢
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多