[iOS]带Firebase教程的远程通知

我将向您展示如何使用Firebase在iOS中设置远程通知。 对于iOS而言,这不是新话题,而且API或新库总是有新变化。 如果您是初级开发人员,本教程可能会对您有所帮助。 如果您是高级学生,那么回顾一下也很不错。

我们走吧。

Environment: iOS 10 & 9, Swift 3.1, Xcode 8.3.3


安装Firebase

我希望使用CocoaPods安装Firebase

PodFile:

 源'https://github.com/CocoaPods/Specs.git'use_frameworks!platform:ios,'9.3'def base_pods
   pod“ Firebase / Core”
   pod“ Firebase /消息传递”
   pod“ Firebase / Crash”
最终目标“ RemoteNotificationDemo”做
   base_pods
结束 

pod install并运行您的Xcode工作区


准备证书

要为您的iOS应用启用推送通知:

  • 在目标->常规中设置您的团队,资料和证书
    或简单地使用Xcode 自动管理签名
  • 调整目标中的推送通知 ->功能

您应该看到两个刻度:

ps有时Xcode可能无法管理您的应用程序。 然后,您需要转到Apple Developer Console(https://developer.apple.com/)来打开应用程序的“推送通知”:

  • 密钥中创建APNs身份验证密钥

建议使用身份验证密钥进行配置,因为它们是将通知发送到iOS的最新方法。 验证码的优点:

  1. 无需每年重新生成推送证书
  2. 一个身份验证密钥可用于您的所有应用

但是您仍然可以使用旧方法:创建开发和生产SSL证书

ps。 下载Auth Key后,将无法从Developer Console重新下载。 因此,您应该备份它。


现在,我们将创建Firebase帐户。

  • 在https://console.firebase.google.com/中创建Firebase帐户
  • 在“增长”部分启用通知
  • 下载GoogleService-Info.plist
  • 转到设置->云邮件 。 上载您创建的身份验证密钥。

编码

设置非常简单:

  1. FirebaseApp.configure()
  2. application.registerForRemoteNotifications()
  3. requestNotificationAuthorization(应用程序:application)
    仅当用户知道您的应用为何需要其通知授权时,才可以调用此方法。

请记住,当您收到远程通知时,您应该始终知道应用程序的应用程序状态( 处于活动,后台或非活动状态 )。 在这种情况下,您应该以不同的方式处理它们。 同样,iOS9和iOS10使用了不同的回调。

iOS9:

  func应用程序(_应用程序:UIApplication,didReceiveRemoteNotification userInfo:[AnyHashable:Any]) 

这两种情况都将被调用:

  • 状态为活动时,会收到远程通知。
  • 状态为非活动时,将打开“远程通知”。

如果应用终止,并且用户打开了远程通知,则通知信息位于didFinishLaunchingWithOptions launchOptions内部。

  func application(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)->布尔{
     ...
    如果让userInfo = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] {
       NSLog(“ [[RemoteNotification] applicationState:\(applicationStateString)iOS9的didFinishLaunchingWithOptions:\(userInfo)”)
       // TODO:处理后台通知
     }
    返回真
   } 

笔记:

  • 当接收到处于活动状态的远程通知时,设备的通知中心将不会显示任何通知。 您可能需要以自己的方式显示通知。
  • 接收处于非活动状态的远程通知时,应用程序的UI尚未准备就绪。 如果您需要根据通知的内容显示或推送视图控制器。 您需要保存通知的内容并进行处理,直到UI就绪为止。

iOS10:

  // iOS10 +,在前台功能中显示通知时调用userNotificationCenter(_ center:UNUserNotificationCenter,willPresent通知:UNNotification,withCompletionHandlercompleteHandler:@escaping(UNNotificationPresentationOptions)->无效)// iOS10 +,在收到响应时调用(默认打开,关闭或自定义操作) )的通知功能userNotificationCenter(_ center:UNUserNotificationCenter,didReceive响应:UNNotificationResponse,withCompletionHandlercompleteHandler:@escaping()-> Void) 

在iOS10中,两种情况下使用两个回调。

笔记:

  • 当接收到处于活动状态的远程通知时, 通知将显示在设备的通知中心上。 因此,您无需添加UI即可处理这种情况。
  • 接收处于非活动状态的远程通知时,应用程序的UI尚未准备就绪。 如果您需要根据通知的内容显示或推送视图控制器。 您需要保存通知的内容并进行处理,直到UI就绪为止。

通知中的数据

这是使用Firebase发送的远程通知的示例。 在大多数情况下,需要处理通知的内容。

  [AnyHashable(“ google.cae”):1,AnyHashable(“ google.cats”):1500259554,AnyHashable(“ google.caudt”):0,AnyHashable(“ userId”):1234,AnyHashable(“ gcm.ne” ):1,AnyHashable(“ aps”):{
    警报= hi8;
 },AnyHashable(“ google.cac_id”):5530879855980421587,AnyHashable(“ gcm.message_id”):0:15002595552428880.000.00e + 00e9743a2ee9743a2] 

在此通知中,发送了自定义数据(userId = 1234)。 (在Firebase中的通知发送方中配置),通知消息位于aps.alert中


就这样。 在iOS中这并不复杂。 但是在处理通知时,您应该始终了解应用程序的状态