액션이 있는 알림 만들기
14723 단어 XcodeSwiftNotification아이폰
소개
알림에 대한 조치를 구현하고 싶습니다.
LI◯E나 MESSE◯GER의 통지를 3D 터치했을 때 나오는 것을 상상해 주시면 대략 맞습니다. 기본적으로 로컬 알림 구현과 함께 사용됩니다.
알림 권한 요청
우선 UserNotifications의 import
AppDelegate.swift
import UserNotifications
iOS9, iOS10 이상으로 나누어 요청
알림 권한 대화 상자 표시
AppDelegate.swift
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if #available(iOS 10.0, *) {
// iOS 10
let center = UNUserNotificationCenter.current()
// optionsでバッジ,サウンド,アラートを設定
// アラートだけにすれば上から降りてくるやつだけになる
center.requestAuthorization(options: [.badge, .sound, .alert], completionHandler: { (granted, error) in
if error != nil {
return
}
if granted {
debugPrint("通知許可")
} else {
debugPrint("通知拒否")
}
})
} else {
// iOS 9
let settings = UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)
}
return true
}
여기까지는 로컬 통지와 함께합니다.
다음에 구체적인 액션의 설정과, 통지로부터 액션을 선택했을 때의 동작을 기입합니다.
이번에는 액션과 라벨을 2개 준비해, 대응한 액션으로 카운트 업시킵니다.
ViewController
import UIKit
import UserNotifications
// アクションをenumで宣言
enum ActionIdentifier: String {
case actionOne
case actionTwo
}
// Delegateの宣言を忘れずにする
class ViewController: UIViewController, UNUserNotificationCenterDelegate {
var one: Int = 0
var two: Int = 0
@IBOutlet var label1: UILabel!
@IBOutlet var label2: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// アクション設定
let actionOne = UNNotificationAction(identifier: ActionIdentifier.actionOne.rawValue,
title: "アクション1",
options: [.foreground])
let actionTwo = UNNotificationAction(identifier: ActionIdentifier.actionTwo.rawValue,
title: "アクション2",
options: [.foreground])
let category = UNNotificationCategory(identifier: "category_select",
actions: [actionOne, actionTwo],
intentIdentifiers: [],
options: [])
UNUserNotificationCenter.current().setNotificationCategories([category])
UNUserNotificationCenter.current().delegate = self
let content = UNMutableNotificationContent()
content.title = "こんにちわ!"
content.body = "アクションを選択してください!"
content.sound = UNNotificationSound.default
// categoryIdentifierを設定
content.categoryIdentifier = "category_select"
// 60秒ごとに繰り返し通知
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)
let request = UNNotificationRequest(identifier: "notification",
content: content,
trigger: trigger)
// 通知登録
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}
// アクションを選択した際に呼び出されるメソッド
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: () -> Swift.Void) {
// 選択されたアクションごとに処理を分岐
switch response.actionIdentifier {
case ActionIdentifier.actionOne.rawValue:
// 具体的な処理をここに記入
// 変数oneをカウントアップしてラベルに表示
one = one + 1
label1.text = String(one)
case ActionIdentifier.actionTwo.rawValue:
// 具体的な処理をここに記入
two = two + 1
label2.text = String(two)
default:
()
}
completionHandler()
}
}
완성도
참고 기사
iOS 10 User Notifications Framework 구현 요약
Reference
이 문제에 관하여(액션이 있는 알림 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tomoyuki_HAYAKAWA/items/7313281cc79368540006텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)