[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的最新方法。 验证码的优点:
- 无需每年重新生成推送证书
- 一个身份验证密钥可用于您的所有应用
但是您仍然可以使用旧方法:创建开发和生产SSL证书
ps。 下载Auth Key后,将无法从Developer Console重新下载。 因此,您应该备份它。
现在,我们将创建Firebase帐户。
- 在https://console.firebase.google.com/中创建Firebase帐户
- 在“增长”部分启用通知
- 下载GoogleService-Info.plist
- 转到设置->云邮件 。 上载您创建的身份验证密钥。
编码
设置非常简单:
- FirebaseApp.configure()
- application.registerForRemoteNotifications()
- 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中这并不复杂。 但是在处理通知时,您应该始终了解应用程序的状态 。