背景故障中的Swift静音远程通知

时间:2017-10-08 09:12:53

标签: ios swift notifications

感谢Alex,我现在知道它因iOS 11中的错误而失败,预期的解决方案将随iOS 11.2一起提供。

我不知道当我编写它时,问题显示了使静默通知工作的必要步骤。

在撰写本文时,它缺少在开发人员控制台的AppId中启用的服务,必须启用推送通知及其证书,以便进行开发和分发(视情况而定)。

来自服务器的有效负载如下:

$body = array( 
        'aps' => array( // Create the payload body
            'content-available' => 1,
        )
    ); 

不会在应用程序中生成任何内容(我的意思是致电代表)

appDelegate:

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

未调用哪个fn,didReceiveRemoteNotification, 并且也没有调用UNUserNotificationCenter didReceive fn。

Fn didfinishlaunch ...包括:

var center = UNUserNotificationCenter.current()
center.delegate = self
center.setNotificationCategories([loadActionAndCategoriesForNotifications()])

appDelegate中的通知注册如下,也是在didfinishlaunch ... fn:

if #available(iOS 10.0, *)
    {
        let options: UNAuthorizationOptions = [.alert, .badge, .sound]
        // request authorization
        center.requestAuthorization(options: options) {
            (granted, error) in
            if !granted {
                l.i(self.TAG, "registerNotifications: request for authorization went wrong")
            }
            if granted {
                l.i(self.TAG, "registerNotifications: request for authorization GRANTED.")
                DispatchQueue.main.async {
                    l.i(self.TAG, "registerNotifications NOW WILL DO REMOTE REGISTRATION.")
                    UIApplication.shared.registerForRemoteNotifications()
                }
            }
            if error != nil{
                l.i(self.TAG, "registerForLocalNotification ERROR: \(error!.localizedDescription)")
            }
        }

    } else {
        // Fallback on earlier versions
        UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.sound, .alert, .badge], categories: nil))
        UIApplication.shared.registerForRemoteNotifications()
    }

注册工作正常,我总是收到didRegisterNotif ...相应的deviceToken。

在Target功能上,推送通知已开启,后台模式已选中后台提取和远程通知。

如果我添加"'徽章' => 3,"到aps有效载荷,前景willPresent fn被调用,所以我可以进一步处理通知数据。

在背景中,好奇地,(宽度'徽章' => 3,在aps中)徽章已更新!但我期待didReceiveRemoteNotification或didReceive来处理它,所以我可以处理并发送本地通知,但它不会发生,它们永远不会被调用...

我读完之后我的想法已经用完了几乎我发现的任何问题......

0 个答案:

没有答案