2016-09-08 14 views
4

iOS 10では、特定の日付/時刻から開始するローカル通知を分単位で繰り返すように設定する方法を教えてください。iOS 10 - 「x」分ごとに通知を繰り返す

たとえば、9月8日の午前11時から15分ごとにローカル通知をトリガーしますか?以下、dateTimeReminder.dateが09/08 11 AMであると仮定します。上記のコードで

let dateStart = self.dateTimeNotif.date 
let notifTrigger = UNCalendarNotificationTrigger.init(dateMatching: NSCalendar.current.dateComponents([.day, .month, .year, .hour, .minute], from: dateStart), repeats: true) 
let notificationRequest = UNNotificationRequest(identifier: "MYNOTIF", content: notifContent, trigger: notifTrigger) 

UNUserNotificationCenter.current().add(notificationRequest, withCompletionHandler: nil) 

、私は上の各日の特定の時間に、毎時間の特定の瞬間にスケジュールとする可能性があります。しかし、それをどのように「すべて」x「分」に変換するのですか?どんな助けもありがとうございます。

同様の質問 - How do I set an NSCalendarUnitMinute repeatInterval on iOS 10 UserNotifications?

+0

はちょっと同じタイプの質問:http://stackoverflow.com/questions/ 41845576/ios-10-how-to-show-incoming-voip-call-notification-background-in-background @DS。 :助けてください –

答えて

2

かなり検索した後、私はこの時点でSwift 3が、この機能をサポートしていません。この機能をお探しの皆様には、今のところUILocalNotificationを使用することをお勧めします(ただし、iOS 10では非推奨です)。後でこの機能をサポートするとUNUserNotificationに移行します。この結論に達するのに役立つ追加の質問とリソースがあります。また、このスレッドのすべての回答とコメントに従って、特定のシナリオについてより詳しく理解してください。

  • 廃止予定のAPIを使用することは、通常はお勧めできません。一般的な方法として、できるだけ早く新しいAPIに移行してください。上記の解決策は永久的な解決策として推奨されません。

Local Notification every 2 week

http://useyourloaf.com/blog/local-notifications-with-ios-10/

https://github.com/lionheart/openradar-mirror/issues/14941

+0

これを行う方法は今すぐ見つかります –

+0

@sivakrishnaいいえ、まだです。 –

0

私はこのスレッドがあなたが探しているものがあると思います。

Do something every x minutes in Swift

'60 .0' を実行しているコードの間の秒を表します。これをx分に変更するだけです* 60

+0

これは開始日を提供しません。これはすぐにスケジュールされ、x分ごとに繰り返されます。 –

+0

通知が実行されると、タイマーを開始できます。あなたが何を意味するかは完全にはわかりません。 – key9060

+1

私はそれを試みましたが、 "通知が実行されたときに起動できます"は実現不可能です。新しいAPIにはwillAppearとdidReceiveという2つのメソッドしかありません。アプリケーションがフォアグラウンドにある場合のみ、1つがトリガーされます。他のトリガーは、ユーザーが通知とやりとりする場合にのみトリガーされます。どちらも起こらない可能性があります。通知が表示され、通知センターにとどまります。あなたはどうやってタイマーを始めるのですか? –

3

ご存じのように、アプリごとに最大64件の通知をスケジュールできます。それ以上の値を追加すると、システムは最も早く64通知を発し、もう一方を破棄します。

すべての通知がスケジュールされるようにする1つの方法は、まず最初に64個の通知をスケジュールし、次に定期的な時間間隔で(アプリが起動するたびに、または通知が発生するたびに)スケジュールされ、64個未満の通知がある場合は、n個の通知を許可し、次の(64-n)通知をスケジュールします。

int n = [[[UIApplication sharedApplication] scheduledLocalNotifications] count]; 
int x = 64 - n; 
// Schedule the next 'x' notifications 

残りのために、X分のNSTimerを追加して通知を設定します。

override func viewDidLoad() { 
    super.viewDidLoad() 
    //Swift 2.2 selector syntax 
    var timer = NSTimer.scheduledTimerWithTimeInterval(60.0, target: self, selector: #selector(MyClass.update), userInfo: nil, repeats: true) 
    //Swift <2.2 selector syntax 
    var timer = NSTimer.scheduledTimerWithTimeInterval(60.0, target: self, selector: "update", userInfo: nil, repeats: true) 
} 

// must be internal or public. 
func setNotification() { 
    // Something cool 
} 

不要な通知を削除するようにしてください。

+0

これは開始日を提供しません。これはすぐにスケジュールされ、x分ごとに繰り返されます。編集 - クリアするには、今から60秒後に開始し、その後1分ごとに繰り返します。 –

+0

あなたのコードはsetNotification()に入ります – gurmandeep

+0

私の上記のコメントをご覧ください。また、ここでの議論を参照してください - http://stackoverflow.com/questions/37804287/how-do-i-set-an-nscalendarunitminute-repeatinterval-on-ios-10-usernotifications/37804344?noredirect=1#comment66109521_37804344 –

1

共有したリンクと追加した新しい情報は、通知がスケジュールされた最後の時間と分を保存する必要があります。タイマーは、次の分にダニ続いたときに、あなたが最初に特定の日に通知をトリガし、それが一度だけ通知するようにfalseにそのリピートプロパティを設定するためにUNCalendarNotificationTriggerを使用することができ、時間と分

var date = DateComponents() 
date.hour = 8 
date.minute = 30 

let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true) 
let content = UNNotificationContent() 
// edit your content 

let notification = UNNotificationRequest(identifier: "myNotification", content: content, trigger: trigger) 
+0

これは、Appleのマニュアルからまっすぐです。リスト1は、8:30に毎朝発生するトリガーを作成する例を示しています。時間と分の日付コンポーネントのみを指定し、トリガーを繰り返すように設定します。 https://developer.apple.com/reference/usernotifications/uncalendarnotificationtrigger –

+0

私のシナリオは - 「9月8日午前11時から15分ごとにローカル通知を行う」 –

+0

あなたはカスタムアルゴリズムを設定し、分、つまり8時から8時15分に開始されます。タイマーが役立ち、通知の使い方をよく知っている – gurmandeep

1

が変更。その通知を受け取ったら、UNTimeIntervalNotificationTrigger APIを使用して、ローカル通知をトリガーする時間間隔を設定します。

+1

これは、ユーザーが最初の通知に応答することを前提としています。ユーザーがそれを無視すると、アプリケーションは最初の通知を受け取りません! – ragnarius

1

スウィフト3/4とiOS 10/11

このbugによるにDateComponents()を使用する方法がないようですローカル通知を正しく繰り返します。あなたは(あなたが60秒よりも大きなあるインターバル場合、このメソッドは動作します)TimeIntervalであなたのトリガーを変更することができます代わりに、この方法の

let thisTime:TimeInterval = 60.0 // 1 minute = 60 seconds 

// Some examples: 
// 5 minutes = 300.0 
// 1 hour = 3600.0 
// 12 hours = 43200.0 
// 1 day = 86400.0 
// 1 week = 604800.0 

let trigger = UNTimeIntervalNotificationTrigger(
      timeInterval: thisTime, 
      repeats: true) 
関連する問題