ios - 如何快速处理推送通知?

标签 ios swift cocoa apple-push-notifications

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

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
}

我可以在那里处理推送通知的功能是什么?

最佳答案

为了充分利用推送通知,处理到达您的 iOS 应用程序的推送通知是一个棘手的部分。

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

关闭状态——应用被杀死, 运行状态——应用程序处于前台, 暂停状态——应用程序在后台

到达时处理推送通知

让我们一一讨论如何在每个状态下处理它们

关闭状态:

当应用程序关闭时(一些其他应用程序正在运行或手机被锁定),推送通知到达并且您点击它以 打开应用程序。控制权将交给 appDelegate 的 方法,即 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 属性,您始终可以在此方法中发现您的应用程序是否从后台状态唤醒。在这种情况下,当应用程序通过推送通知从后台打开时,您可以做一些特殊的事情。

关于ios - 如何快速处理推送通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38265432/

相关文章:

ios - 用户通知请求始终带有默认操作标识符

ios - 如何以编程方式从 iPhone 收件箱读取短信

swift - 2个类之间的循环引用

ios - 观察WKWebview的backForwardList变化

objective-c - stringWithFormat 中的枚举引发不兼容的指针类型警告

ios - iPhone 在弹出窗口中出现滚动问题

ios - iOS 8上的墙纸

swift - UINavigationController 始终响应选择器 interactivePopGestureRecognizer?

macos - 如何设置NSPopUpButton的菜单位置?

objective-c - 注册 NSFileHandleReadToEndOfFileCompletionNotification