• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - Cloudkit 不发送推送通知

[复制链接]
菜鸟教程小白 发表于 2022-12-12 11:46:57 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

推送通知没有被发送(或接收)到我使用 CloudKit 订阅的应用程序,因为有很多方法可以解决这个问题,我将在下面列出我所做的事情,这可能会有所帮助其他人有同样的问题,并且(希望)会指出我做错了什么

具体来说,我正在尝试在记录插入时获得静默通知(无论是在后台还是前台),但我都没有收到。

项目设置我在功能下启用CloudKit,在仪表板中设置记录类型。我在功能下为应用程序启用推送通知。我启用了后台模式“远程通知”。

在启动时注册远程通知:

    // Register for push notification
    let settings = UIUserNotificationSettings(forTypes: [.Alert,.Badge,.Sound], categories: nil)
    application.registerUserNotificationSettings(settings)

    // Register for remote notification
    application.registerForRemoteNotifications()

监听推送通知注册成功(Succeeds)并创建订阅:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    NSLog("Remote notifications registered - %@",deviceToken)
    createSubscriptions()
}

创建我的订阅对象,并设置它的通知信息,并将其保存到服务器:

private func createSubscriptions(user : CKRecord, completion: (NSError?) -> ()) {
        let messageSubscription = CKSubscription(recordType: "Messages", predicate: NSPredicate(format:"TRUEPREDICATE"), subscriptionID: "Messages", options: .FiresOnRecordCreation)
        let notificationInfo = CKNotificationInfo()
        notificationInfo.shouldSendContentAvailable = true
        notificationInfo.soundName = ""
        messageSubscription.notificationInfo = notificationInfo
        CKContainer.defaultContainer().publicCloudDatabase.saveSubscription(subscription) { (_, error) in
            if let error = error {
                if error.domain == "CKErrorDomain" && error.code == 15 {
                    NSLog("Already set, ignoring dupe")
                }
                else
                {
                    completion(error)
                    return
                }
            }
            completion(nil)
        }
}

我可以在 CloudKit 仪表板中看到订阅确实创建成功。

然后我从第二个设备或仪表板创建一些记录(“消息”),看到它们是在查询或仪表板调用中添加的,但我必须获取通知的方法从未被调用:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
    // Crickets.  Never called
}

我了解通知不适用于模拟器。我已经在开发中使用设备进行了尝试,在生产中使用 testflight 和许多设备进行了尝试。我错过了什么明显的东西吗?



Best Answer-推荐答案


你似乎做的一切都是正确的。我能想到的两件事:

  1. 您确定要注册远程通知吗?我在任何地方都看不到对 application.registerForRemoteNotifications() 的调用。我假设您忘记在此处粘贴它。

  2. 您是否尝试在面板中删除订阅并重新创建?我遇到过使用不同的 notificationInfo 多次注册同一个订阅会破坏它并且它会停止触发的问题。

关于ios - Cloudkit 不发送推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38709940/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap