Apple Push Notifications in tvOS

雨燕双飞 提交于 2020-01-23 01:55:29

问题


Hi i am a newbie to tvOS. I have an TV application which is registered for APNS.

But while i push a notification i am not able to get the notifications. i am getting the device token but not the notification.

While i try with the Mobile Devices i am getting the notifications,But not in the tvOS why is it so...?

How can i solve this..?

   let center = UNUserNotificationCenter.current()
    center.requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in


        if granted == true
        {
            print("Allow")
            UIApplication.shared.registerForRemoteNotifications()
        }
        else
        {
            print("Don't Allow")
        }
    }

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
      let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
     print("DEVICE TOKEN = \(deviceTokenString)")
}


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

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
    print(userInfo)
}

回答1:


tvOS supports only 2 types of notifications: badges and content-available. So you need to send one of these two types to APNS. Any of these types notification only changes badge number on App Icon. And only the lastest notification will be delivered to your application when you open the app. There is no visual presentation of notification as it was on iOS How it looks see on presentation from WWDC 2016/Session 206/tvOS, start watching from 21:20

UPDATE: On tvOS 11 appeared Silent notifications which wakes the application up and allow to refresh content in background

WWDC 2017 watch from 7:50




回答2:


This is my solution for Notifications in tvOS.

in AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    // set self (AppDelegate) to handle notification
    UNUserNotificationCenter.current().delegate = self

    // Request permission from user to send notification

    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: { authorized, error in
      if authorized {
        DispatchQueue.main.async(execute: {
          application.registerForRemoteNotifications()
        })
      }
    })


    return true
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
    //print(userInfo)
    print("Notification Received")
    let nc = NotificationCenter.default
    nc.post(name: Notification.Name("foo"), object: nil) 

}

The first function provide the permission necessary for notification.

And the second function received the notification and send a notification to the current viewcontroller and make the magic happpend.

This is the viewcontroller

//viewload  NotificationCenter.default.addObserver(self, selector: #selector(updateTable(_ :)), name: Notification.Name("foo"), object: nil)


来源:https://stackoverflow.com/questions/43139057/apple-push-notifications-in-tvos

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!