如何在swift中处理推送通知?

时间:2016-07-08 11:23:18

标签: ios swift cocoa apple-push-notifications

我有一个ios应用程序,我使用apns发送推送。我需要处理推送消息,如果正确则显示消息。我怎样才能迅速实现它? 这是我的代码:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions:
    [NSObject: AnyObject]?) -> Bool {
    registerForPushNotifications(application)
    return true
}

func registerForPushNotifications(application: UIApplication) {
    let notificationSettings = UIUserNotificationSettings(
        forTypes: [.Badge, .Sound, .Alert], categories: nil)
    application.registerUserNotificationSettings(notificationSettings)
}

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
    if notificationSettings.types != .None {
        application.registerForRemoteNotifications()
    }
}

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
    var tokenString = ""

    for i in 0..<deviceToken.length {
        tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
    }

    print("Device Token:", tokenString)
}

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
    print("Failed to register:", error)
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {



}

func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {

}

func applicationDidBecomeActive(application: UIApplication) {
    UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}

我可以在哪个功能处理推送通知?

2 个答案:

答案 0 :(得分:17)

当到达您的iOS应用程序时处理推送通知是一件棘手的事情,以便充分利用它。

当推送通知到达时,您的应用程序可以在

关闭状态 - 应用已被杀死, 运行状态 - 应用程序在前景中, 暂停状态 - 应用程序在后台

到达时处理推送通知

让我们逐一讨论如何在每个州处理它们

关闭状态:

当应用程序关闭(某些其他应用程序正在运行或手机已锁定)时,推送通知已到达,您点击它即可 打开应用程序。将控制appDelegate’s方法,即didFinishLaunchingWithOptions: 请注意,当您通常通过在手机上点按其图标来启动应用时。 didFinishLaunchingWithOptions:首先使用launchOptions == nil调用。如果您通过单击收到的推送通知didFinishLaunchingWithOptions:使用其launchOptions!=nil调用来启动应用程序。 关键点如果您想在点击推送通知启动应用程序时执行某些特殊操作,则需要在didFinishLaunchingWithOptions中添加代码:

像这样

if (launchOptions != nil)
{
   //do some thing special e.g. display particular ViewController or Set some notification badge value.
}

正在运行状态

如果您的应用程序正在运行(在前台)并且收到推送通知,则屏幕上将不显示与该通知相关的任何内容 - 没有警报,没有消息,没有声音。相反,将调用appDelegate的方法

   func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
}

您可以根据需要实施此方法,了解您希望如何回复通知。

暂停状态

如果您的应用程序处于后台(手机已锁定或某些其他应用程序正在运行)并且已收到推送通知,则会显示声音通知,并且点击该通知应用程序将启动以下appDelegate方法称为

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
}

与在运行状态下收到通知时调用的相同。请注意,通过使用UIApplication的applicationState属性,您始终可以在此方法中找到您的应用是否从背景状态唤醒。在这种情况下,当通过推送通知从后台打开应用程序时,您可以执行一些特殊操作。

答案 1 :(得分:0)

根据您的问题,

无法切换通知在设备上收到后的可见性。

这种功能/功能仅适用于Android。在收到通知时,Android开发人员可以决定是否呈现视图。

因此,请尝试从服务器端控制它。