在iOS中集成FCM进行推送通知时是否使用了设备令牌?

在iOS中集成FCM进行推送通知时是否使用了设备令牌?,ios,firebase,swift3,push-notification,firebase-cloud-messaging,Ios,Firebase,Swift3,Push Notification,Firebase Cloud Messaging,我有以下几种情况 使用APN 用于接收本机iOS应用程序的远程通知。在使用它的同时,我们需要创建.p12证书,并且需要在注册推送通知时发送Appdelegate.m文件中生成的设备令牌。因此,我们遵循将设备ID发送到后端的方法,将通知发送到该特定设备 使用FCM时 我检查了FCM,还发现我们需要将.p12文件上传到他们的控制台。在这之前一切都很好。但说到设备令牌部分,我不清楚“设备令牌”的“Swizzling”过程。firebase是生成设备令牌还是需要设置在DidRegisterForRemo

我有以下几种情况

使用APN

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

使用FCM时

我检查了FCM,还发现我们需要将.p12文件上传到他们的控制台。在这之前一切都很好。但说到设备令牌部分,我不清楚“设备令牌”的“Swizzling”过程。firebase是生成设备令牌还是需要设置在DidRegisterForRemotonification中生成的设备令牌

    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)
}

根据Firebase文档中的说明,它说明:

在以下情况下,注册令牌可能会更改:

  • 应用程序已在新设备上还原

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

  • 用户清除应用程序数据

  • 和“Swizzling”。其概念是,如果禁用,则必须重写方法
    didRegisterForRemotonificationswithDeviceToken
    ,以检索APNs令牌,然后调用
    setAPNSToken
    。因为你已经在这么做了

    文档中关于启用/禁用方法滑动的说明 详情如下:

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

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


    希望你明白

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