先生.お辞儀を終える時間になりました!
25782 ワード
機能概要表
先生たちはよくボランティアリストを学生たちに教えるのを忘れます.このような場合、担任と生徒、生徒部の先生の間で不要な誤解が生じる可能性があります.😅 それを防ぐため、コードン先生は授業が終わる5分前(4時35分)に目覚まし時計で担任にリストを確認します.
n/a.計画
理想的な計画🤩
最も理想的なのは、サーバがプッシュで送信されることです.これにより、学校のスケジュールに応じて異なる時間に通知を送信したり、学生部が必要に応じて通知を送信したりすることができます.しかし、プッシュ通知は実施しにくい.また、iOSのプッシュ通知は、アップルのサーバで送信する必要があります.
現実的な計画🤔
そのため、今回の発表は計画を簡素化する.先生はいつソフトウェアを開けても、私は当日の4時35分に目覚まし時計を登録します.例えば、先生が朝学生簿アプリを開くと、その日の午後に鳴る目覚まし時計を登録する方法です.
実施(アラーム機能フレームワークの実施)
アラームを具体的に作成する前に、まずアラーム機能のフレームワークのみを実現します.
Alarmserviceの作成
他のサービスのように、モノトーンの目覚まし時計サービスも実現しました.
理想的な計画🤩
最も理想的なのは、サーバがプッシュで送信されることです.これにより、学校のスケジュールに応じて異なる時間に通知を送信したり、学生部が必要に応じて通知を送信したりすることができます.しかし、プッシュ通知は実施しにくい.また、iOSのプッシュ通知は、アップルのサーバで送信する必要があります.
現実的な計画🤔
そのため、今回の発表は計画を簡素化する.先生はいつソフトウェアを開けても、私は当日の4時35分に目覚まし時計を登録します.例えば、先生が朝学生簿アプリを開くと、その日の午後に鳴る目覚まし時計を登録する方法です.
実施(アラーム機能フレームワークの実施)
アラームを具体的に作成する前に、まずアラーム機能のフレームワークのみを実現します.
Alarmserviceの作成
他のサービスのように、モノトーンの目覚まし時計サービスも実現しました.
struct AlarmService {
//1️⃣
static let shared = AlarmService()
//2️⃣
func registerAlarm() {
let notiCenter = UNUserNotificationCenter.current()
notiCenter.requestAuthorization(options: [.alert, .sound, .badge]) { didAllow, err in
addAlarm()
}
}
private func addAlarm() {
let notiCenter = UNUserNotificationCenter.current()
let notiContents = UNMutableNotificationContent()
notiContents.title = "종례 시간 알림"
notiContents.sound = UNNotificationSound.default
notiContents.subtitle = "오늘 생활지도 학생은 3명입니다."
let notiTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 3, repeats: false)
let request = UNNotificationRequest(identifier: "teacherAlarm", content: notiContents, trigger: notiTrigger)
notiCenter.add(request) { err in
if let err = err {
print("DEBUG: Failed to addAlarm \(err)")
}
}
}
}
AppDelegate通知
AppDelegateのdidFinishLaunchingWithOptionsセクションにコードを追加し、アプリケーションの実行後すぐに通知を登録します.
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AlarmService.shared.registerAlarm()
return true
}
// 후략...
}
結果
アプリケーションを開き、バックグラウンドに送信すると、3秒後にプロンプトが表示されます.
インプリメンテーション(ダイナミックメッセージ)
動的メッセージのGuidenceService APIの実装
通常、学年とクラスをサーバに送信し、生活指導の学生数を受信するAPIを作成する必要があります.しかし、サーバの実装は簡単なので、クライアントから完全な生活指導リストを取得し、クラスに基づいてフィルタリングします.
リストを読み込み、ガイドオブジェクトに置き換える配列は同じです.
最後に,高次関数フィルタにより,1年生1組のみを選択し,countで数を数え,CompletionHandlerに入れて実行する.func fetchGuidanceNumOfHR(completionHandler: @escaping (Int) -> Void) {
AF.request("\(SERVER_BASE_URL)/guidances").responseDecodable(of: Response<[GuidanceRawData]>.self) { data in
guard let response = data.value else { return }
guard response.isSuccess == true else { return }
guard let rawdata = response.result else { return }
let guidances = rawdata.map { rawData in
return Guidance(rawData: rawData)
}
let guidanceCount = guidances.filter { guidance in
guidance.student.grade == 1 && guidance.student.classNumber == 1
}.count
completionHandler(guidanceCount)
}
}
動的メッセージAlarmserviceへの適用
完了ハンドラにメッセージを登録するためのコードを挿入しました.メッセージには、APIを介して受信された学生の数が反映される.private func addAlarm() {
GuidanceService.shared.fetchGuidanceNumOfHR { numOfGuidances in
let notiCenter = UNUserNotificationCenter.current()
let notiContents = UNMutableNotificationContent()
notiContents.title = "종례 시간 알림"
notiContents.sound = UNNotificationSound.default
notiContents.subtitle = "오늘 생활지도 학생은 \(numOfGuidances)명입니다."
let notiTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 3, repeats: false)
let request = UNNotificationRequest(identifier: "teacherAlarm", content: notiContents, trigger: notiTrigger)
notiCenter.add(request) { err in
if let err = err {
print("DEBUG: Failed to addAlarm \(err)")
}
}
}
}
実装(所要時間)
データ・コンポーネントの作成に使用するUtility関数の作成
フレームワークを構築するときに使用するNotificationTreggerは、一定時間後に通知を発行できるトリガです.しかし、私たちが望んでいるのは、特定の時間に通知をトリガーすることです.このトリガを使用するには、DateComponentsオブジェクトをパラメータとして配置する必要があります.
そこで、必要なデータコンポーネントを作成し、Utilitiesクラスに作成する関数を作成します.Date()を使用して今日の日付を取得し、DateComponentsオブジェクトに今日の日付と16:35の時刻を入力します.
途中でguardゲートを通って週末に登録しないでください!(週末は仕事に関するお知らせが好きではありませんが、ほほほ)🤬 )class Utilities {
// 오늘 알람이 울릴 dataComponents 만들기
func getTodayAlarmDateComponents() -> DateComponents? {
let date = Date()
let calendar = Calendar.current
// 주말이면 알림 등록 안함.
guard calendar.isDateInWeekend(date) == false else { return nil }
let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
var dateComponents = DateComponents()
dateComponents.timeZone = .current
dateComponents.year = year
dateComponents.month = month
dateComponents.day = day
dateComponents.hour = 16
dateComponents.minute = 35
return dateComponents
}
}
UNCalendarNotificationTreggerの使用
前述したように、UNCalendarNotificationTreggerは、特定の日付で通知をトリガすることを許可するトリガです.既存のトリガをUNCalendarNotificationTreggerに変換します.private func addAlarm() {
GuidanceService.shared.fetchGuidanceNumOfHR { numOfGuidances in
let notiCenter = UNUserNotificationCenter.current()
let notiContents = UNMutableNotificationContent()
notiContents.title = "종례 시간 알림"
notiContents.sound = UNNotificationSound.default
notiContents.subtitle = "오늘 생활지도 학생은 \(numOfGuidances)명입니다."
let dateComponents = Utilities().getTodayAlarmDateComponents()
let notiTrigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)
let request = UNNotificationRequest(identifier: "teacherAlarm", content: notiContents, trigger: notiTrigger)
notiCenter.add(request) { err in
if let err = err {
print("DEBUG: Failed to addAlarm \(err)")
}
}
}
}
結果
担任たちは今、毎日4時35分に自分のクラスで何人の学生が校門で指導を受けているかを知ることができます.
終了時..。
func fetchGuidanceNumOfHR(completionHandler: @escaping (Int) -> Void) {
AF.request("\(SERVER_BASE_URL)/guidances").responseDecodable(of: Response<[GuidanceRawData]>.self) { data in
guard let response = data.value else { return }
guard response.isSuccess == true else { return }
guard let rawdata = response.result else { return }
let guidances = rawdata.map { rawData in
return Guidance(rawData: rawData)
}
let guidanceCount = guidances.filter { guidance in
guidance.student.grade == 1 && guidance.student.classNumber == 1
}.count
completionHandler(guidanceCount)
}
}
private func addAlarm() {
GuidanceService.shared.fetchGuidanceNumOfHR { numOfGuidances in
let notiCenter = UNUserNotificationCenter.current()
let notiContents = UNMutableNotificationContent()
notiContents.title = "종례 시간 알림"
notiContents.sound = UNNotificationSound.default
notiContents.subtitle = "오늘 생활지도 학생은 \(numOfGuidances)명입니다."
let notiTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 3, repeats: false)
let request = UNNotificationRequest(identifier: "teacherAlarm", content: notiContents, trigger: notiTrigger)
notiCenter.add(request) { err in
if let err = err {
print("DEBUG: Failed to addAlarm \(err)")
}
}
}
}
データ・コンポーネントの作成に使用するUtility関数の作成
フレームワークを構築するときに使用するNotificationTreggerは、一定時間後に通知を発行できるトリガです.しかし、私たちが望んでいるのは、特定の時間に通知をトリガーすることです.このトリガを使用するには、DateComponentsオブジェクトをパラメータとして配置する必要があります.
そこで、必要なデータコンポーネントを作成し、Utilitiesクラスに作成する関数を作成します.Date()を使用して今日の日付を取得し、DateComponentsオブジェクトに今日の日付と16:35の時刻を入力します.
途中でguardゲートを通って週末に登録しないでください!(週末は仕事に関するお知らせが好きではありませんが、ほほほ)🤬 )
class Utilities {
// 오늘 알람이 울릴 dataComponents 만들기
func getTodayAlarmDateComponents() -> DateComponents? {
let date = Date()
let calendar = Calendar.current
// 주말이면 알림 등록 안함.
guard calendar.isDateInWeekend(date) == false else { return nil }
let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
var dateComponents = DateComponents()
dateComponents.timeZone = .current
dateComponents.year = year
dateComponents.month = month
dateComponents.day = day
dateComponents.hour = 16
dateComponents.minute = 35
return dateComponents
}
}
UNCalendarNotificationTreggerの使用
前述したように、UNCalendarNotificationTreggerは、特定の日付で通知をトリガすることを許可するトリガです.既存のトリガをUNCalendarNotificationTreggerに変換します.
private func addAlarm() {
GuidanceService.shared.fetchGuidanceNumOfHR { numOfGuidances in
let notiCenter = UNUserNotificationCenter.current()
let notiContents = UNMutableNotificationContent()
notiContents.title = "종례 시간 알림"
notiContents.sound = UNNotificationSound.default
notiContents.subtitle = "오늘 생활지도 학생은 \(numOfGuidances)명입니다."
let dateComponents = Utilities().getTodayAlarmDateComponents()
let notiTrigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)
let request = UNNotificationRequest(identifier: "teacherAlarm", content: notiContents, trigger: notiTrigger)
notiCenter.add(request) { err in
if let err = err {
print("DEBUG: Failed to addAlarm \(err)")
}
}
}
}
結果
担任たちは今、毎日4時35分に自分のクラスで何人の学生が校門で指導を受けているかを知ることができます.
終了時..。
Reference
この問題について(先生.お辞儀を終える時間になりました!), 我々は、より多くの情報をここで見つけました https://velog.io/@comdongsam/7.-선생님-종례할-시간입니다テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol