2016-12-21 16 views
0

アプリケーションをバックグラウンドに入力した後、60秒ごとに通知を送信します。しかし、背景を入力するとすぐに通知が送信され、その後60秒ごとに通知が送信されます。私はすぐに通知を送信したくない、どうすればいい?ここでUNUserNotificationがiosで瞬時に通知を送信しています

が私のコードで、

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 
    let center = UNUserNotificationCenter.current() 
    center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in 
     // Enable or disable features based on authorization. 
    } 
    return true 
} 

func applicationDidEnterBackground(_ application: UIApplication) { 
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 

    let content = UNMutableNotificationContent() 
    content.title = NSString.localizedUserNotificationString(forKey: "Hello,", arguments: nil) 
    content.body = NSString.localizedUserNotificationString(forKey: "Some", arguments: nil) 
    content.sound = UNNotificationSound.default() 
    content.badge = NSNumber(value: UIApplication.shared.applicationIconBadgeNumber + 1) 
    content.categoryIdentifier = "com.mahmut.localNotification" 

    let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 60.0, repeats: true) 
    let request = UNNotificationRequest.init(identifier: "60Sec", content: content, trigger: trigger) 

    let center = UNUserNotificationCenter.current() 
    center.add(request) 

} 
+0

私の意見では、アプリケーションが背景60を入力した後にUNNotificationRequestを追加するためにdispatch_afterを使用することができます。 – nynohu

+0

発送は本当に機能しませんでした。私のコードを DispatchQueue.main.asyncAfter(期限:.now()+ 60.0){ }に入れてください。 通知は4秒後、時には40秒後に送信されます。 –

+0

あなたのコードを試しましたが、うまく機能しているようです。 – Matt

答えて

0

は、あなた自身の時間を使用することができます...と後で機能であなたが送信するためにタイマー概念を使用することができ、このようにそれを使用してみてください...の代わりに4 60秒ごとに通知されます。

let triggerTime = (Int64(NSEC_PER_SEC) * 4) 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, triggerTime), dispatch_get_main_queue(), {() -> Void in 
     self.callYourFunction() 
    }) 
+0

こんにちは、swift3を使用しています。私は試しました DispatchQueue.main.asyncAfter(期限:.now()+ 60.0) {self.myfunction}それは動作しませんでした。 –

+0

私はswift 2.3でこれを使用しています....私のシナリオは、このviewDidLoad関数を使用したことです。私は現在の場所の座標を取得する特定の関数を遅らせたい。シミュレータには場所がないので、私は4秒前に位置をシミュレートしていました。後で私は10秒ごとに私の座標を更新しなければならないとそれのためにタイマコンセプトを使用した – SaiPavanParanam

+0

それは正確にスウィフト3のコードですが、正確なコードを試しましたか? – SaiPavanParanam

関連する問題