Table of Contents
מבוא לתזכורת מבוססת מיקום ב- iOS
[התזכורת מבוססת מיקום הופכת יישום סלולרי סטנדרטי לתוך עוזר קונטקסט-מודע המספק הודעות בזמן בדיוק כאשר משתמש נכנס או משאיר אזור גיאוגרפי מוגדר, מתזכורת למשתמש לאסוף מרשם כאשר ליד בית מרקחת כדי להודיע להם להגדיר אזעקה ביתית כאשר עוזב את הבית, תכונה זו משפרת את הפרודוקטיביות היומית והמעורבות.
הבנת מיקום הליבה והודעות המשתמש
שתי מסגרות iOS העיקריות המעורבות הן FLT:0 ⁇ מיקום: 1:1 ו- (FLT:2 UserNotificationssssveFLT 3: 3 ). מיקום הליבה מטפל בכל המעקב הגיאוגרפי, כולל ניטור אזור (גיליות), שירותי מיקום שינוי משמעותי, ועדכונים סטנדרטיים של GPS מיקום.לאifications לנהל את התזמון, המצגת, וניהול הודעות מקומיות ומרוחקות עבור מיקום, כי אנחנו דורשים הודעות אינטרנט מקומי, כי הם דורשים לחלוטין, כי הם דורשים שימוש, כי הם דורשים הודעות שירות חיצוני, כי הם לא דורשים שימוש, כי הם לחלוטין, כי הם דורשים הודעות שירות פרטי, כי הם לחלוטין, כי הם דורשים הודעות שירות, כי הם דורשים הודעות שירות.
ניטור אזור עם (FLT:0) הוא הגישה הפשוטה ביותר.אתה מגדיר אזור מעגלי (מרכז לתאם רדיוס) ו להורות מיקום הליבה להודיע לאפליקציית שלך כאשר המכשיר חוצה את הגבול.לקבל את האירועים האלה בעוד היישום נמצא ברקע או מסתיים, עליך לבקש בקשה FLT:0 "דרכי"FLT:1 מיקום אישור מיקום (לא רק כאשר בשימוש) הוא נשלט על ידי יישום קפדני וחייב להיות מוצדק על ידי ההנחיות של UpIp.
קביעת הרשאות
מבקש אישור מיקום
לפני כל ניטור מיקום יכול להתחיל, האפליקציה שלך חייבת לקבל את רשותו המפורשת של המשתמש.iOS מציגה מערכת הכוללת את מחרוזת המטרה של ה-FLT:1 עבור ניטור אזור רקע, אתה צריך FLT:2 (iOS 11+) או (FLT 3: הקוד צריך להתקשר ראשון FLT:4 על FLT:5 למשל:
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
אפל מעודדת מפתחים להפריש את הבקשה לרשומה עד שהמשתמש יש קשר.Do (FLT:0notcioFLT:1) בקשה תמיד-אישור על ההשקה הראשונה; במקום זאת, להסביר את התועלת לפני הצגת הבקשה.
בקשה להודעה
באופן פשטני, עליך לבקש אישור להציג הודעות.
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
// Handle response
}
אם המשתמש מכחיש אישור הודעה, שקול להציע אלטרנטיבה (למשל, התראות בתוך האפליקציה) או להסביר כיצד הודעות משפרות את החוויה.שני הרשאות הן עצמאיות - משתמש עשוי לאפשר מיקום אך לא ניתן להבחין, או להיפך.
פיקוח גיאוגרפי ותחנות פיקוח אזורי
Defining a Circular Zone
גיאוספירה מיושמת באמצעות ההרחבה (FLT:9 ).You מספקים קואורדינט מרכז (גישה וארוכות) ורדיוס במ"ר מינימלית iOS תומך באופן אמין הוא כ -100 מטרים, אם כי בדיקות במכשירים עם GPS טוב יכול להניב רדיוני קטן יותר. ציין אם אתה רוצה להיות מודע לכניסה, יציאה או שניהם:
let center = CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194)
let region = CLCircularRegion(center: center, radius: 150, identifier: "OfficeRegion")
region.notifyOnEntry = true
region.notifyOnExit = true
locationManager.startMonitoring(for: region)
המחרוזת של ה-FLT:11 חייבת להיות ייחודית לאזור; היא משמשת כדי להתאים את האירועים הקרובים. iOS תומך מקסימום של 20 אזורים בו זמנית במעקב אחר אפליקציה.אם אתה צריך יותר, לשקול שילוב אזורים או שימוש במיקום שינוי משמעותי כדי לגרום לבדיקה גרנורית יותר.
ניטור אזורים מרובים
לעתים קרובות יהיו לך תזכורות רבות (למשל, ג'אונס שנוצר על ידי משתמשים) מזהה אזור החנות במסד נתונים מקומי (Core Data, Realm, או UserDefaults) כאשר האפליקציה משיקה, reregister את כל האזורים הפעילים.
// Remove regions when no longer needed
locationManager.stopMonitoring(for: region)
עקוב אחר שיטת הציר של ה-FLT:13 כדי לתפוס מקרים שבהם ניטור אזור אינו נתמך (למשל, על מכשירים מבוגרים יותר) או מוגבל על ידי הגדרות מערכת.
אירועים אזוריים
כאשר מכשיר חוצה גבול גאומטריה, מיקום הליבה קורא לאחד משתי שיטות הציר: (FLT:14 או FLT:15) יישום שלך צריך לאמת את המזה האזור ואז לקבוע הודעה מקומית:
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
guard region.identifier == "OfficeRegion" else { return }
scheduleNotification(title: "Welcome to Office", body: "Don't forget to scan your badge.")
}
שימו לב כי שיטות הציר הללו נקראות גם אם האפליקציה שלכם מושעה; iOS יעיר את האפליקציה שלכם ברקע בקצרה.יש לכם כ-30 שניות לבצע קוד לפני שהמערכת תעכב שוב. השתמש באותו זמן כדי לקבוע את ההודעה (או לטפל בהגיון אחר) מהר ככל האפשר.
שיקום המדינה לאחר נספח
לאחר שהאפליקציית מסתיימת (למשל, דרישות כוח המשתמש או המערכת מחזירות את הזיכרון), אזורים עדיין במעקב על ידי המערכת.עם זאת, כאשר אירוע מתרחש והאפליקציית אינה פועלת, iOS מחזר את האפליקציה שלך אל הרקע ומספק את אותו המסר נציג.עליכם להבטיח את קוד ההסמכה הראשוני של האפליקציה שלך מגדיר כראוי את הצירים של FLT:17 ו-Revenating כל מידע הכרחי כדי לטפל בממשק מתמיד של המשתמש.
שליחת הודעות מקומיות
יצירת תוכן Notification
השתמש ב-FLT 18 כדי להגדיר את הכותרת, הגוף, הקול והמידע המותאמים אישית:
let content = UNMutableNotificationContent()
content.title = "Reminder"
content.body = "You're near the store! Don't forget to buy groceries."
content.sound = .default
content.userInfo = ["regionID": "StoreRegion"]
ניתן גם לכלול את ה-FLT:20 כדי לאפשר פעולות מותאמות אישית (למשל, "Snooze" או "Mark as Done").
טריגר ובקשה
מכיוון שאנו רוצים שההודעה תירה מיד לאחר האירוע באזור, אנו משתמשים בגורם של זמן עם עיכוב קצר מאוד (1 שניות) לחזור על עצמו צריך להיות שקר:
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) { error in
if let error = error {
// Log error (e.g., notification not added)
}
}
באמצעות מזהה ייחודי בכל פעם למנוע כתב הודעות קודמות.אם אתה רוצה להחליף הודעה מתקרבת (למשל, לעדכן את ההודעה), השתמש באותו המזהה.
עקבו אחרי Sound and Badge
ניתן לספק קובץ קול מותאם אישית בחבילה שלך (חייב להיות פחות מ -30 שניות) על ידי הגדרת מספרי FLT:22 (מספרים רעים נקבעים באמצעות FLT:23 (או עלייה על בסיס UIApplication.shared.applicationIconBadge Number) לזכור כי התג הוא ברור רק כאשר המשתמש פותח את האפליקציה או שאתה מאמת אותו באופן ידני.
טעויות ושיקולי סוללה
טעויות נפוצות
ניטור אזורי יכול להיכשל מסיבות רבות:
- (ב) [15] לא תמכו במכשירים של ה-iPoalFLT:1 - כמה אייפדים גדולים יותר או iPod נוגעים ללא שבב סלולרי/GPS.
- (ב) ,0) שירותי מילואים (ב) ,(ה-FLT:25) עשויים לחזור שקר.
- (ב) ,ב[[1924]], [[1924]]
- (ב) ,0) , מגבלת אזור ה- 1 (הראשונה ל- 10) אם תנסה לפקח על יותר מ-20 אזורים, FLT:29 לא ייכשל.
יישום ה-FLT:30 יציר בטעינת המשתמש (למשל, "לא ניתן לפקח על המיקום הזה").
סוללה Optimisation
ניטור מיקום הוא כוח-רגיש.המערכת כבר אופטימיזציה ניטור אזור על ידי שימוש במגדל תאים ו- Wi-Fi מיקום במידת האפשר, אבל אתה יכול להפחית את ההשפעה נוספת:
- עקבו אחרי כמה שיותר אזורים (מעל 20).
- השתמש בקרוני גדול יותר כאשר הדיוק אינו קריטי (למשל, 500 מ' לעומת 50m).
- ניטור אזור דיסable כאשר האפליקציה נכנסת לרקע למשימות שאינן קשורות (שימוש ב-FLT:31) במקראות מחזור חיים מתאימות.
- עבור תזכורות לא קריטיות, לשקול שימוש בשירות מיקום של FLT:0 החלפה משמעותית 1 (ראה:FLT:32) אשר מספק עדכונים רק כאשר ההתקן נע באופן משמעותי (500m או יותר) ונצרך פחות כוח.
בדיקות תזכורות מבוססות מיקום
מיקום סימולט ב Xcode
הסימול של Xcode מאפשר לך לדמות שינויים במיקום. השתמש בתכונה "Simulate Location" (Debug > Simulate Location) ובחר קובץ GPX או כונן חינם.You יכול גם להגדיר באופן ידני לתאם באמצעות כפתור "Location" בבר debug. עם זאת, שימו לב כי ניטור אזור אינו עובד סימולטור עבור כל התרחישים; מומלץ לבדוק על מכשיר פיזי.
מבחן יחידת כתיבה עבור האזור לוגיקה
סוללת את שיטות הציר וקביעת לוח הזמנים לרכיבים הניתנים לבדיקה.Mock the FLT:33 ו-(FLT:34) באמצעות פרוטוקולים.
protocol RegionHandler {
func didEnterRegion(with identifier: String)
}
class MockNotificationCenter: UNUserNotificationCenter {
var addedRequest: UNNotificationRequest?
override func add(_ request: UNNotificationRequest, withCompletionHandler: (Error?) -> Void) {
addedRequest = request
}
}
בדיקות שנכנסות לאזור מייצרות את הכותרת הנכונה ואת הגוף, וטעויות אלה מטופלים.
בדיקה אחרונה ב-World Testing Checklist
- מבחן כניסה ויציאה אירועים בעוד האפליקציה נמצאת בחזית, ברקע, וסיום.
- בדוק כי אזורים חופפים מרובים גורמים הודעות עצמאיות.
- בדוק סוללה ניקוז במשך כמה שעות של ניטור.
- בדוק עם שירותי מיקום מוגבלים, Wi-Fi כבוי, והנתונים התאיים.
- ודא כי הודעות הודעות הודעות אינן חוזרות על עצמן אם המשתמש נכנס מחדש לאותו אזור בתוך זמן קצר - ליישם תקופת "קולול-למטה" באמצעות דגימות משתמשות.
פרטיות וחווית המשתמש הטובה ביותר
שקיפות והסכמה
משתמשים רגישים יותר ויותר למעקב אחר מיקום.תמיד מבקשים את רמת הגישה המינימלית הנדרשת.עבור רוב התזכורת מבוססת המיקום, אישור "תמיד" נחוץ למעקב רקע, אך עדיין ניתן להסביר מדוע לספק מסך ללא תשלום לפני שהמערכת תסביר את התכונה וכיצד משתמשים בנתונים המיקום (למשל, "אנו רק עוקבים אחר המיקום שלך כדי לשלוח לך תזכורות בעת כניסה או עזיבה של המיקום שלך לעולם לא יעלה לשרתי נתונים שלנו".
לאפשר למשתמשים לנהל תזכורות
להציע UI שבו משתמשים יכולים להציג את כל התזכורת הפעילה, לראות את האזור הגיאו-מעודכן במפה, ולמחוק תזכורות באופן אישי.
מזון ואווירות ריקות
כאשר אין תזכורות מוגדרות, מציגות מצב ריק ברור עם שיחה לפעולה ("Tap + כדי להוסיף תזכורת למיקום") אם הרשאות נשללה, להציג הודעה המסבירה מה חסר למשתמש ולחיצת כפתור המקשרת להגדרות.
אל תפריעו ותערומים קריטיים
הודעות מבוססות מיקום לא צריכות להיות אובססיביות.כבדות את מצב המיקוד הנוכחי של המשתמש (Do Not Disturb) - המערכת מדכאת באופן אוטומטי הודעות כאשר מופעלת.אל תבקשו רשות "אזהרה ביקורתית" אלא אם כן התזכורת היא באמת דחופה (למשל, תרופות) ואושרה על ידי אפל.
שיפור
iBeacon-based Triggers
עבור דיוק מקורה, לשקול שימוש ב-iBeacon s (FLT:37) במקום גיאוגרפיה. Beacons לספק דיוק עד כמה מטרים.ההגדרה דומה: להגדיר אזור משואה על ידי UUUID, ערכים גדולים וקטנים, ולאחר מכן לפקח על כניסה /exit וגם טווח עבור קרבה. iBeacon ניטור לא דורש תמיד מסמכות (כאשר שימוש הוא מספיק) אבל השפעה דומה היא סוללות.
שילוב עם מיקום שינוי משמעותי
עדכונים משמעותיים של מיקום שינויים מופעלים על ידי מגדל תאים שינויים בערך 500 מטרים.אפשר להשתמש בהם כדי לרענן את רשימת הגיאו-פנטנס הסמוכים גם כאשר המכשיר נע במהירות (למשל, במכונית) עם זאת, אירועים כניסה / אקסטציה הם לאחר מכן מקובעים על ידי ההיגיון שלך ולא על ידי ניטור אזור ייעודי של המערכת.זה שימושי אם אתה צריך לפקח על מאות אזורים - אתה יכול לשמור על תת-קבוצה על בסיס הזיכרון הנוכחי של האזור הנוכחי.
שימוש במשימות רקע ל-Pre-fetching
אם תזכורותיך דורשות נתוני רשת (למשל, שעות פתיחה בחנות), באפשרותך לקבוע את לוח הזמנים של FLT:38 (התקבל ב- iOS 13) כדי לרענן נתונים באופן ⁇ סטי.אבל להיזהר לא לשלב אותם עם אירועים מיקום כדי למנוע להופיע לעקוב אחר המשתמש ברקע למטרות שאינן מיקום.
מספר רב של מובנים מאותו אזור
אם משתמש מתעכב על גבול אזור, הם עשויים לקבל אירועים חוזרים / אקסטציה. ליישם את זמנם של קירור (למשל, "אל תגרור הודעה נוספת לאזור זה לפחות 5 דקות") לאחסן את הפטפטפט האחרון ב- UserDefaults per המזהה של אזור.
מסקנה
יישום תזכורות מבוססות מיקום ב- iOS הוא דרך עוצמתית לספק חוויות קונטקסט-מודעות.על ידי שילוב של אזור המיקום של Core ניטור עם הסמכת משתמש, אתה יכול ליצור תכונות שמרגישות אינטואיטיביות ועוזרות.המפתח להצלחה הוא לכבד פרטיות משתמשים, אופטימיזציה לשימוש סוללות, טיפול שגיאות בחסד, ומספק ממשק נקי לניהול תזכורות.
לקריאה נוספת, מומלץ להתייעץ עם מסמכי Apple הרשמי:
- (ב) ◄ ⁇ ⁇
- (ב) ◄ ⁇ ⁇ ⁇
- (ב) ◄ ⁇ ⁇ ⁇
- (ב) ◄ ⁇ ⁇ ⁇
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇