毎日特定の時刻に通知を発信できるようにローカル通知システムをセットアップしました。この時間はユーザーによって決定され、私はそれをストリングとして保管します。私はコードに従って行ったすべてのステップを打ち破りますが、基本的に私の問題は通知が発生しないということです。カレンダーベースのローカル通知が機能しない - スウィフト3
ステップ1:このステップIのセットアップで 通知を送信する許可を依頼する警告:
let center = UNUserNotificationCenter.current()
let options: UNAuthorizationOptions = [.alert, .badge, .sound]
center.requestAuthorization(options: options) { (granted, error) in
if granted {
application.registerForRemoteNotifications()
}
}
ステップ2:このステップIのセットアップで 私は通知を送信するために呼び出す機能:
static func sendNotification(stringDate: String) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
let content = UNMutableNotificationContent()
content.title = "Title"
content.body = "Detail"
content.badge = 1
if let date = dateFormatter.date(from: stringDate) {
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minute = calendar.component(.minute, from: date)
var dateComponents = DateComponents()
dateComponents.hour = hour
dateComponents.minute = minute
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
let request = UNNotificationRequest(identifier: "dateDone", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}
}
ステップ3: 私はそのようにように私のアプリデリゲートファイルでこの関数を呼び出す:
func applicationDidEnterBackground(_ application: UIApplication) {
let defaults = UserDefaults.standard
if defaults.object(forKey: "currentUser") != nil {
if User.current.desiredTimeForNews.characters.contains("A") {
let stringToBeConverted = User.current.desiredTimeForNews.replacingOccurrences(of: "AM", with: "")
HelperFunctions.sendNotification(stringDate: stringToBeConverted)
} else {
let stringToBeConverted = User.current.desiredTimeForNews.replacingOccurrences(of: "PM", with: "")
HelperFunctions.sendNotification(stringDate: stringToBeConverted)
}
}
}
重要::私の機能でわかるように、私は "stringDate"パラメータを取ります。この変数の文字列値はmy dateです。これを日付の値に変換します。ブレークポイントと印刷ステートメントを使用することで、私の日付、時間、分などのすべての値はすべてゼロではないことがわかりました。
私の問題は、通知が送信されないことです。しかし、私はそれを証明するためにブレークポイントを使用したので、それが呼び出されるという事実を知っています。どんな助けもありがとう!
通知を追加した後、あなたは 'UNUserNotificationCenter.current()を呼び出す必要がありgetPendingRequests'とあなたの通知は、実際に次のチェックと一緒に追加されているかどうかを確認します。通知の銃撃戦。 –
これが追加されました。それが正しい時と分の値で私に正しい要求情報を示したことを追加した後。問題は私がシミュレータ上でこれを実行していることでしょうか? –
私はSimulatorで多くのテストを実行しましたが、動作しますが、断続的に動作しません。明確にするには、設定アプリの通知設定は何ですか? – AlexK