【问题标题】:didReceivelocalNotification is never called从未调用 didReceivelocalNotification
【发布时间】:2016-08-22 07:34:05
【问题描述】:

我厌倦了这样做。让我告诉你发生了什么。我正在使用 iOS 9.0 和 Xcode 7.3.1。

情况一:

我已经像这样在didFinishLaunchingWithOptions 注册了本地通知设置。

let settings = UIUserNotificationSettings(forTypes: [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound] , categories: nil)
application.registerUserNotificationSettings(settings)

我的项目中有几个控制器,用户将按下其中一个按钮,我将通过调用App Delegate 中的函数来安排通知。函数如下。

func activatingUserLocalNotification(timeIntervalSinceNow : NSDate?, alertBody : String, userInfo : [NSObject : AnyObject], region : CLRegion?)
{
    let localNotification = UILocalNotification()
    localNotification.fireDate = timeIntervalSinceNow
    localNotification.timeZone = NSTimeZone.defaultTimeZone()
    localNotification.alertBody = alertBody
    localNotification.region = region
    localNotification.regionTriggersOnce = false
    localNotification.soundName = UILocalNotificationDefaultSoundName
    localNotification.userInfo = userInfo
    localNotification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1

    UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
}

现在我通过按下一个按钮设置了一个通知,它调用了上面的函数,它成功地安排了通知。

我在所有这些方法中都设置了断点。

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

func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler: () -> Void) {

    // Break Point
    }

    func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, completionHandler: () -> Void) {

    // Break Point
    }

 func application(application: UIApplication, didReceivelocalNotification notification: UILocalNotification)
    {
    // Break Point
    }

在应用程序位于Foreground 时等待了一段时间,又等了一段时间。没啥事儿。我认为应用程序会启动通知并调用其中一个方法,以便我可以在应用程序内显示通知。但是什么也没发生。

情况2:

现在我已经尝试了相同的方法,现在我通过转到另一个应用程序并使用它一段时间来最小化应用程序 [应用程序处于后台状态]。现在通知正常触发了,就像我告诉过你的一样,我在几乎所有方法中都设置了断点,但是当我单击通知时没有调用它们。但是它叫applicationWillEnterForeground,如果没有launchOptions,这个方法该怎么办。

这两天我一直在和这个作斗争,不知道发生了什么。

虽然 [ 应用程序内外 ] 推送通知工作正常

让我知道你的想法?请。

我如何从控制器调用此函数activatingUserLocalNotification

 func setLocalNotificationForDistance(id : String, name : String, location : CLLocationCoordinate2D, radius : Double)
    {
        let alertBody = "Hello \(name)"
        let dict : [NSObject : AnyObject] = ["aps" : ["alert" : alertBody], “id” : id]
        let region = CLCircularRegion(center: location, radius: radius, identifier: id)

        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        appDelegate.activatingUserLocalNotification(nil, alertBody: alertBody, userInfo: dict, region: region)
    }

应用代理

//
//  AppDelegate.swift
//
//

import UIKit
import FBSDKCoreKit
import SVProgressHUD
import Alamofire
import GoogleMaps

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    //MARK: Local Variables

    var window: UIWindow?

    static let UpdateRootNotification = "UpdateRootNotification"
    static let ShowMainUINotification = "ShowMainUINotification"

    //MARK: Application Life Cycle

    // Did Finish Launching

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

  let settings = UIUserNotificationSettings(forTypes: [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound] , categories: nil)
        application.registerUserNotificationSettings(settings)

        return true
    }

    // Foreground

    func applicationWillEnterForeground(application: UIApplication) {


    }

    // Did Become Active

    func applicationDidBecomeActive(application: UIApplication) {
        FBSDKAppEvents.activateApp()
        application.applicationIconBadgeNumber = 0 // clear badge icon
    }

    // Did Enter Background

    func applicationDidEnterBackground(application: UIApplication) {
    }

    // Opened Via Shortcut

    func application(application: UIApplication, performActionForShortcutItem
        shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {

    }

    // Continue User Activity

    func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity,
                     restorationHandler: ([AnyObject]?) -> Void) -> Bool {

        return true
    }



    //MARK: Local Notification

    func activatingUserLocalNotification(timeIntervalSinceNow : NSDate?, alertBody : String, userInfo : [NSObject : AnyObject], region : CLRegion?)
    {
        let localNotification = UILocalNotification()
        localNotification.fireDate = timeIntervalSinceNow
        localNotification.timeZone = NSTimeZone.defaultTimeZone()
        localNotification.alertBody = alertBody
        localNotification.region = region
        localNotification.regionTriggersOnce = false
        localNotification.soundName = UILocalNotificationDefaultSoundName
        localNotification.userInfo = userInfo
        localNotification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1

        UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
    }

    func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler: () -> Void) {


    }

    func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, completionHandler: () -> Void) {


    }

    func application(application: UIApplication, didReceivelocalNotification notification: UILocalNotification)
    {
        application.applicationIconBadgeNumber = 0

         UIApplication.sharedApplication().presentLocalNotificationNow(notification)

    }

    // MARK: Push Notification

    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

        if API.sharedInstance.isLoggedIn() {
            NSUserDefaults.standardUserDefaults().setObject(deviceToken, forKey: "push_token")
            NSUserDefaults.standardUserDefaults().synchronize()

            API.sharedInstance.registerDeviceToken(deviceToken)
        }
    }

    func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
        application.registerForRemoteNotifications()
    }

    func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
        EventTracker.trackEventWithCategory("APN", action: "Registraion", label: "Failed")
    }

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
        APNSManager.sharedInstance.handlePushNotification(userInfo)
    }

    //MARK: Open URL

    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(application, openURL:url,sourceApplication:sourceApplication,annotation:annotation)
    }

}

【问题讨论】:

  • 请按原样分享您的应用委托 swift 文件代码。
  • 谢谢,请显示调用“activatingUserLocalNotification”的代码

标签: ios objective-c swift uilocalnotification


【解决方案1】:

这有点好笑,不过换个方式:

func application(application: UIApplication, didReceivelocalNotification notification: UILocalNotification)

收件人:

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

注意大写 L。来自文档:

另外:希望只有在您的应用处于活动状态时才调用此委托方法。由于您的应用程序处于活动状态,因此在这种情况下不应看到任何通知。您可以使用 didReceiveLocalNotification 委托方法来处理它。

【讨论】:

  • 让我检查并回来。
  • 你是男人 :) 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多