そのため、新しいUNUserNotificationCenterに通知を追加しようとしましたが、取得できないようです。
私のView Controllerにはアクションがあります:
@IBAction func sendPressed(_ sender: AnyObject) {
let content = UNMutableNotificationContent()
content.title = "Hello"
content.body = "What up?"
content.sound = UNNotificationSound.default()
// Deliver the notification in five seconds.
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false)
let request = UNNotificationRequest.init(identifier: "FiveSecond", content: content, trigger: trigger)
// Schedule the notification.
let center = UNUserNotificationCenter.current()
center.add(request) { (error) in
print(error)
}
print("should have been added")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let center = UNUserNotificationCenter.current()
center.requestAuthorization([.alert, .sound]) { (granted, error) in
}
}
そして、プロジェクトにもNotification Content Extension
がありますが、まったくトリガーされていないようです。何か不足しているアイデアはありますか?ユーザードキュメントの例を試していますが、それ以上のことを言っていないか、見逃しています。
ここ: https://developer.Apple.com/reference/usernotifications/unmutablenotificationcontent
また: https://developer.Apple.com/reference/usernotificationsuihttps://developer.Apple.com/reference/usernotifications
編集:
そのため、アプリをバックグラウンドに配置することでうまくいきました。
あなたは通知に登録する必要があります...私は試しましたが、これは動作します。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
let center = UNUserNotificationCenter.current()
center.requestAuthorization([.alert, .sound]) { (granted, error) in
// Enable or disable features based on authorization.
}
return true
}
編集:iOS 10以降の通知を表示するために、アプリをバックグラウンドに配置する必要はありません。
フォアグラウンドで表示する通知を構成するには、以下のコールバックを使用します。
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
ここ はサンプルプロジェクトです。
Objective-C実装の場合:
ここにデモプロジェクトを作成しました: iOS10AdaptationTips .
userNotificationsのインポート
///Notification become independent from Foundation
@import UserNotifications;
localNotificationの承認をリクエストする
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
NSLog(@"request authorization succeeded!");
[self showAlert];
}
}];
スケジュールlocalNotification
アプリケーションアイコンのバッジ番号を更新する
// //Deliver the notification at 08:30 everyday
// NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
// dateComponents.hour = 8;
// dateComponents.minute = 30;
// UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:dateComponents repeats:YES];
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = [NSString localizedUserNotificationStringForKey:@"Elon said:" arguments:nil];
content.body = [NSString localizedUserNotificationStringForKey:@"Hello Tom!Get up, let's play with Jerry!"
arguments:nil];
content.sound = [UNNotificationSound defaultSound];
/// 4. update application icon badge number
content.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);
// Deliver the notification in five seconds.
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger
triggerWithTimeInterval:5.f repeats:NO];
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"FiveSecond"
content:content trigger:trigger];
/// 3. schedule localNotification
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (!error) {
NSLog(@"add NotificationRequest succeeded!");
}
}];
次のように表示されます。
デフォルトでRepeatが1つだけ表示される場合 iOS9のロック画面に多くを表示する代わりに: http://i67.tinypic.com/98t75s.jpg また、3Dタッチを自動的にサポートします http:// a67。 tinypic.com/dorw3b.jpg
ここにデモを書きます: iOS10AdaptationTips .
以下にいくつかの手順を示します。
許可があることを確認してください。そうでない場合は、UNUserNotificationCenter.current()。requestAuthorizationを使用して取得します。または、リクエストポップアップを複数回表示する場合は、 answer に従います。
通知foregroundを表示する場合は、UNUserNotificationCenterDelegateをどこかに割り当てる必要があります。
コードを見せて
@IBAction func sendPressed(_ sender: AnyObject) {
let content = UNMutableNotificationContent()
content.title = "Hello"
content.body = "What up?"
content.sound = UNNotificationSound.default()
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false)
let request = UNNotificationRequest.init(identifier: "FiveSecond", content: content, trigger: trigger)
let center = UNUserNotificationCenter.current()
center.add(request) { (error) in
print(error)
}
}
override func viewDidLoad(_ animated: Bool) {
super.viewDidLoad(animated)
// Assign the delegate
UNUserNotificationCenter.current().delegate = self
// Ask the permission
let center = UNUserNotificationCenter.current()
center.requestAuthorization([.alert, .sound]) { (granted, error) in
if granted {
// do something
}
}
}
// Remember to add UNUserNotificationCenterDelegate to your view controller
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print("Got the msg...")
completionHandler([.badge, .sound, .alert])
}
次のように問題を解決しました(Firebase、Swift 3):
AppDelegateでこのメソッドを見つける:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
この行を見つける:
completionHandler()
セットの終了:
completionHandler([.alert,.sound,.badge])
プレゼンテーションオプションをcompletionHandlerメソッドに渡さないと、通知は発生しません。
私はSwift 3の実装を作成しましたが、ここで確認できます。 https://stackoverflow.com/a/45381380/22966