tvOS push-уведомление - PullRequest
       6

tvOS push-уведомление

0 голосов
/ 18 февраля 2019

Мне трудно заставить push-уведомления работать в tvOS.У меня есть приложение для iOS, которое обновляет базу данных облачного набора.У меня также есть приложение tvOS, которое подписывается на эту базу данных для обновления.Это обновление должно быть тихим.Однако подписка для приложения tvOS не получает push-уведомление.Я пробовал несколько разных настроек.

Вот представитель приложения.Зачеркнуто то, что я пробовал раньше.

func application(_ application: UIApplication, 
didFinishLaunchingWithOptions launchOptions: 
[UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()
    window?.rootViewController = 
UINavigationController(rootViewController: ViewController() )
    let center = UNUserNotificationCenter.current()
    center.delegate = self
//        center.requestAuthorization(options: [.provisional]) { 
(granted , error) in
//            guard error == nil else {return}
//            guard granted else {return}
//            DispatchQueue.main.async {
//                application.registerForRemoteNotifications()
//            }
//        }
    application.registerForRemoteNotifications()

    return true
}

Я также добавил эти методы делегатов, но также пытался их запускать без них, потому что я считаю, что облачный комплект должен позаботиться о регистрации токена устройства.

func application(_ application: UIApplication, 
didReceiveRemoteNotification userInfo: [AnyHashable : Any], 
fetchCompletionHandler completionHandler: @escaping 
(UIBackgroundFetchResult) -> Void) {

    print("received remote notification")
    let notification = 
CKQueryNotification(fromRemoteNotificationDictionary: userInfo)
    if notification.queryNotificationReason == .recordUpdated {
        //update the word with local notification
        NotificationCenter.default.post(name: name, object: nil)
    }
}

func application(_ application: UIApplication, 
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 
{
    print("device token:  \(deviceToken)")
}

func application(_ application: UIApplication, 
didFailToRegisterForRemoteNotificationsWithError error: Error) {
    print("error: \(error)")
}

Здесь я настраиваю подписку облачного комплекта

func setUpCloudKitSubscription() {
    let alreadySaved = UserDefaults.standard.bool(forKey: 
subscriptionSaved)
    guard !alreadySaved else {print("slready saved")
        return
    }

    let predicate = NSPredicate(value: true)
    let subscription = CKQuerySubscription(recordType: "Word", 
predicate: predicate, subscriptionID: subscriptionID, options: 
[.firesOnRecordUpdate, .firesOnRecordCreation])
    let info = CKSubscription.NotificationInfo()
    info.shouldSendContentAvailable = true

    subscription.notificationInfo = info

    publicDatabase.save(subscription) { (subscription, error) in
        guard error == nil else {return}
        UserDefaults.standard.set(true, forKey: 
self.subscriptionSaved)
        print("subscription saved")

    }

 }

У меня также есть фоновый режим с удаленными уведомлениями и выборкой фона, но я также пробовал его без выделения фона.

Код, который я написал, также работает, когда я использую его в приложении для iOS.По какой-то причине код не обновляет пользовательский интерфейс в tvOS.

Any help would be greatly appreciated.

Best,
Ryan
...