如何使用Apple的CloudKit进行推送通知

介绍

苹果在2014年与iOS 8一同推出了自己的CloudKit框架。尽管其主要目的是充当iOS应用程序的在线数据库,但CloudKit还提供了许多其他功能,包括推送通知。

本教程要求您至少将Swift 3与Xcode 8结合使用。您还需要具有用于测试的物理iOS设备和Apple开发人员帐户,以便您可以为应用程序启用CloudKit。

1.为什么要使用CloudKit?

首先,我们将研究为应用程序的推送通知使用CloudKit的优点(和缺点)。

在本教程中将看到,要使用CloudKit设置推送通知,您无需像其他云服务一样担心创建证书和置备配置文件。 由于一切都是由Apple制造的,因此您要做的就是为您的应用程序启用CloudKit,其余的都可以使用。

对于某些开发人员而言,CloudKit最好的事情之一就是您免费获得多少。 还有许多其他的后端即服务(BaaS)公司,它们为iOS应用提供推送通知,但是其中大多数公司都限制了可以免费发送多少个通知。 使用CloudKit,可以发送给用户的推送通知数量不受限制。 但是,CloudKit的免费套餐确实限制了数据存储,数据传输和每秒的用户请求数。

在您的应用程序中使用CloudKit的另一个优点是,由Apple提供的网络稳定性和维护将是您永远不必担心的事情。 Apple服务中断很少发生,并且需要立即解决。 这意味着您可以依靠CloudKit始终为您的用户正常工作。

2.设置CloudKit

首先,从iOS>应用程序> Single View Application模板在Xcode中创建一个新项目。

Xcode创建项目后,请转到项目导航器 ,然后单击“ 功能”选项卡。 在此屏幕上,单击开关以启用iCloud ,然后启用CloudKit复选框:

启用iCloud和CloudKit

启用CloudKit后,现在可以转到应用程序的CloudKit仪表板

为了向应用程序的用户发送推送通知,我们将创建一个GlobalNotification记录类型,该记录类型将在创建这种类型的新记录时通知所有用户。 如果登录后尚未为您打开CloudKit仪表板的“ 记录类型”部分,请在侧栏中单击它。

要创建新的记录类型,请点击+   屏幕顶部的按钮。 填写菜单,如以下屏幕截图所示:

全局通知记录类型

对于本教程,我们仅将单个内容字段添加到记录类型,但是对于您自己的应用程序,您可以根据需要添加任意多个。

完成后,单击右下角的“ 保存”按钮。

3.设置应用

返回Xcode,打开您的AppDelegate.swift文件,并在代码顶部添加以下import语句:

import CloudKit
import UserNotifications

接下来,编辑您的AppDelegate类定义,使其符合UNUserNotificationCenterDelegate协议:

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
    ...
}

现在,我们需要请求权限才能显示通知。 这样做,用以下替换您的application(_:didFinishLaunchingWithOptions:)方法:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    UNUserNotificationCenter.current().delegate = self
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: { authorized, error in
        if authorized {
            application.registerForRemoteNotifications()
        }
    })
    
    return true
}

使用此代码,我们要求用户获得显示通知的权限,如果他们接受,则注册该应用程序以获取推送通知。

现在,我们需要实现application(_:didRegisterForRemoteNotificationsWithDeviceToken:)方法。 将以下代码添加到您的AppDelegate类中:

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let subscription = CKQuerySubscription(recordType: "GlobalNotification", predicate: NSPredicate(format: "TRUEPREDICATE"), options: .firesOnRecordCreation)
    
    let info = CKNotificationInfo()
    info.alertBody = "A new notification has been posted!"
    info.shouldBadge = true
    info.soundName = "default"
    
    subscription.notificationInfo = info
    
    CKContainer.default().publicCloudDatabase.save(subscription, completionHandler: { subscription, error in
        if error == nil {
            // Subscription saved successfully
        } else {
            // An error occurred
        }
    })
}

使用此代码,我们首先创建一个CKQuerySubscription对象。 这个订阅对象告诉CloudKit它应该发送通知的内容。 初始化此订阅时,我们包括以下内容:

  • 要监视的记录类型的名称。
  • 谓词,可用于将预订限制为指定类型的特定记录。 在本教程中,我们希望订阅所有GlobalNotification记录,因此我们传入始终为真的谓词。
  • 一个或多个触发器告诉CloudKit应何时发送通知。 在此示例中,我们只希望在创建新记录时发出通知。 其他有效触发器包括何时更新或删除记录。

接下来,我们创建一个CKNotificationInfo对象,为其提供一些内容,然后将其分配给订阅对象。 CKNotificationInfo对象是您格式化传递给用户的推送通知的方式。 在此示例中,我们使用以下属性对其进行配置:

  • alertBody "A new notification has been posted!"
  • shouldBadge值为true 。 这将导致主屏幕上的应用程序图标针对收到的每个通知增加其编号。
  • soundName"default" 。 这只会为您的应用使用默认的iOS通知声音。 如果要使用自定义声音,则将需要使用声音文件的名称。
  • 具有单个值的desiredKeys数组。 对于您包含在此数组中的每个键,CloudKit将从触发通知的记录中加载相应的值,并将其包含在通知的用户信息字典中。

再往下,我们将通知信息分配给订阅,然后将其保存到您的应用程序的公共CloudKit数据库中。

为了在您的应用程序运行时可以看到通知,请在AppDelegate类中添加以下方法:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    completionHandler([.alert, .sound])
}

此代码使用UserNotifications框架来显示您的通知,就好像您的应用程序根本没有运行一样。

在运行您的应用程序之前,您需要通过转到设置来检查您的测试设备是否已登录到iCloud帐户。 否则,您将需要这样做,因为CloudKit API要求当前用户登录。

从Xcode构建并运行您的应用,并接受您的应用显示通知的请求。 完成此操作后,请返回您应用的CloudKit仪表板,然后单击左侧边栏中的“ 订阅类型 ”。 您应该看到带有INSERT触发器的GlobalNotification记录的新订阅:

订阅类型

4.发送通知

现在,剩下要做的就是发送通知! 仍在CloudKit仪表板中,单击左侧栏中公共数据下的默认区域 。 单击+按钮或“ 新建记录”以创建新的GlobalNotification记录。 随便填写内容 ,然后单击右下角的保存

保存记录后,您应该看到通知立即出现在测试设备上:

通知

结论

如您所见,您可以使用CloudKit轻松为iOS应用实现推送通知。 设置非常简单,仅需很少的步骤,并且提供的API允许您为应用程序可能需要的任何推送通知。

翻译自: https://code.tutsplus.com/tutorials/using-apples-cloudkit-for-push-notifications--cms-28125

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值