בניית אפליקציית Voice-Enable to-Do ב-iOS עם אינטגרציה של Siri

בקרת קול הפכה לציפייה מרכזית באפליקציות מודרניות של יעילות.על ידי כך שתאפשר למשתמשים לנהל משימות ללא ידיים, מפתחי iOS יכולים ליצור חוויה נגישה ויעילה יותר עבור יישום רשימת הפרודוקטיביות של Siri, העוזר הקולי האינטליגנטי של אפל, מספק מסגרת חזקה לשילוב פקודות קוליות ישירות לתוך האפליקציה שלך.מדריך זה הולך אותך בכל שלב של בניית אפליקציה קולית-מומנת, החל מפרויקט ראשוני ועד להגדרת כוונות מתקדמות ואסטרטגיות טובות יותר, אם אתה יכול להוסיף את ה- iOS שלך, או תכנות מחדש, או תכנות, או תכנות, או תכנות, או תכנות מחדש, או תכנות, תוכל להוסיף טכניקות חדשות, או תכנות, תוכל להוסיף, אם אתה יכול להוסיף טכניקות מחשבי תיבות של iOS.

הבנת SiriKit ותפקידה בניהול משימות

SiriKit היא מסגרת המאפשרת לאפליקציית שלך להרחיב את הפונקציונליות שלה ל-Siri. במקום לבנות ממשק קול נפרד, אתה מגדיר את הפעולות שמשתמשים יכולים לבצע באמצעות פקודות קוליות, ו-Siri מטפל בהכרה בדיבור ועיבוד שפה טבעי.

המסגרת משתמשת בכוונות מותאמות אישית עבור הפעולות הספציפיות שהיא תומכת בהן, כאשר משתמש מדבר על פקודה כמו "היי סירי, להוסיף חלב לרשימת הקניות שלי ב-MyToDoApp", Siri ממלאת את הביטוי לכוונות שלך, תמצית פרמטרים (כמו שם המשימה ורשימת המזההים), והכוונה לתגובתך של האפליקציה, לאחר מכן Siri, משתמשת בתגובתך כדי לאשר את התגובה שלך.

יתרונות מרכזיים בשימוש ב-SiriKit כוללים:

  • (FLT:0) תפעול ללא היורדים: משתמשים יכולים לנהל משימות בזמן נהיגה, בישול או פעילות גופנית.
  • (ב) גישה חופשית:0 (התחילה:0) בקרת קול מסייעת למשתמשים עם ליקויים מוטוריים או חזותיים.
  • (FLT:0) הסכמה עם אינטראקציות קוליות של מערכת: ההרחבה 1 (ראה: ⁇ 1) האפליקציה שלך מרגישה כמו אזרח iOS הראשון.
  • (FLT:0) אינטגרציה קצרה: משתמשים 1FLT יכולים ליצור קיצורי דרך מותאמים אישית של Siri עבור פעולות בשימוש לעתים קרובות.

פתרונות קול נוספים

ייתכן שת תוהים אם להשתמש ב-SiriKit, זיהוי דיבור מותאם אישית (באמצעות מסגרת הדיבור), או שירות צד שלישי כמו Google Speech-to-Text. SiriKit היא הגישה המומלצת לשילוב עם עוזר המערכת, משום שאין צורך בקלט אודיו נפרד, ללא הגדרה דיבורית, והוא פועל על פני מכשירי AppleK.המסגרת הדיבור מתאימה יותר לאפליקציות שצריכים תהליך שרירותי (למשל, רשימת אודיו, אם אתה צריך רק כדי לקבוע מראש).

הקמת הפרויקט לשילוב של Siri

יצירת אפליקציה קולית-הקודמת מתחילה עם תצורה סטנדרטית של פרויקט Xcode.You גם תצטרך לאפשר את יכולת סירי להוסיף הרחבה עקבית כדי להתמודד עם בקשות גם כאשר האפליקציה אינה פועלת.

שלב 1: יצירת פרויקט חדש

השקת Xcode ויצירה של פרויקט חדש באמצעות FLT:0AppveFLT (iOS) , תן לפרויקט שלך שם, כגון FLT:2קולודורל 3, ולהבטיח SwiftUI או UIKit נבחר על בסיס ההעדפה שלך.

שלב 2: אפשרות ל-Siri Capability

ב[[1875]] [[1924]]]]]] [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

שלב 3: הוספת הרחבה

(ב) אם לא יוצגו על ידי סירי, אם לא יוצגו, יש צורך ב[דרוש מקור] ב[[1924]], [[1924]], [[1924]], [[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]]]] ו[[1924]], [[1924]], [[1924]], [[1924]], [[1924]]]]]]]], [[1924]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

שלב 4: צור קובץ Intents Definition

בתכלית האפליקציה העיקרית שלך, צור קובץ חדש באמצעות ה-FLT:0 Intents DefinitionFOVAFLT:1תבנית (הנמצאת תחת תבניות משאבים) שם זה FLT:2 TodoIntents.indefinitions 3FLT:3 קובץ זה הוא המקום שבו אתה מגדיר את כוונותיך המותאמות אישית.

כדי להבטיח את קובץ ההגדרה זמין לשני המטרות, בחר את ה-FLT:0 (todointents.intentdefinitionFLT:1) קובץ הפרויקט navigator, ובמפקח קובץ, להוסיף הן את האפליקציה העיקרית שלך ואת ה- Intents הרחבה ל-FLT:2Target חברויות FLT 3.

Defining Custom Intents for to-Do Operations

עם קובץ Intents Definition מוכן, תוכל כעת ליצור את הכוונות הספציפיות אשר יחזקו את פקודות הקול שלך עבור יישום רשימה בסיסית של do, אתה רוצה לפחות שלוש כוונות:FLT:0AddTaskintentpher 1,FLT:2 RemoveskintentFLT 3, ו-FLT:4 מראה:

יצירת תוספת

  1. (ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  2. שם הספר בלועזית : The Meaning of the Meaning
  3. (ב) ,0) ,(ב) , כרך חדש בשם "FLT:2" (ב) ,2StringtureFLT) , להוסיף פרמטר חדש בשם "FLT 3:2" אם האפליקציה שלך תומכת ברשימות מרובות.
  4. (הופנה מהדף ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  5. ב[[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]
  6. (ב) עיין ב[[המאה ה-1]] ו[[1924]], ו[[1924]]

יצירת הסרט-Taskintent

(ה) חזור על התהליך לפרמטר 6 (התשובה יכולה להיות "הופנה מהדף "השם ה-Vtask" או "(taskname) לא נמצא" (התשובה היא גם תוספת של כפל:0FailureureFLT:1) סוג התגובה של כאשר המשימה אינה קיימת.

יצירת המופעTasks Intent

(ב) (ב) בפרשת ה[[1924]], ייתכן שלא תזדקקו ל[[1924]], אך לא לצורך [[המאה ה-20]], [[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

יצירת כיתות בלתי עקביות

לאחר הגדרת כל הכוונות, בניית הפרויקט שלך. Xcode תייצר באופן אוטומטי כיתות Swift לכל כוונה ותגובה שלה.הקורסים האלה חיים ב-FLT:0Derived DataofLT:1, אך הם גלויים בעורך.

יישום Intent Handling in Your App and Extension

עכשיו, כי הכוונה מוגדרת, אתה צריך לכתוב את הקוד שמטפל בהם כאשר Siri משתמשת באפליקציה שלך.

עקביות ב-Intents Extension

יעד הארכה עקבי כולל קובץ ברירת מחדל של FLT:9 , פתח אותו ולהחליף את התוכן שלו עם מעמד התואם לפרוטוקולים של טיפול מכוונת.

import Intents

class IntentHandler: INExtension, AddTaskIntentHandling, RemoveTaskIntentHandling, ShowTasksIntentHandling {

 override func handler(for intent: INIntent) -> Any? {
 return self
 }

 // MARK: - Add Task
 func handle(intent: AddTaskIntent, completion: @escaping (AddTaskIntentResponse) -> Void) {
 guard let taskName = intent.taskName else {
 completion(AddTaskIntentResponse.failure(taskName: "unknown"))
 return
 }
 // Persist the task to your data store (Core Data, UserDefaults, etc.)
 // For simplicity, we'll assume a shared data manager
 TaskDataManager.shared.addTask(taskName: taskName, listName: intent.listName ?? "Default")
 completion(AddTaskIntentResponse.success(taskName: taskName))
 }

 func resolveTaskName(for intent: AddTaskIntent, with completion: @escaping (INStringResolutionResult) -> Void) {
 if let taskName = intent.taskName, !taskName.isEmpty {
 completion(.success(with: taskName))
 } else {
 // Prompt user for a task name
 completion(.needsValue())
 }
 }

 // MARK: - Remove Task
 func handle(intent: RemoveTaskIntent, completion: @escaping (RemoveTaskIntentResponse) -> Void) {
 guard let taskName = intent.taskName else {
 completion(.failure(taskName: "unknown"))
 return
 }
 let removed = TaskDataManager.shared.removeTask(taskName: taskName)
 if removed {
 completion(.success(taskName: taskName))
 } else {
 completion(.notFound(taskName: taskName))
 }
 }

 // MARK: - Show Tasks
 func handle(intent: ShowTasksIntent, completion: @escaping (ShowTasksIntentResponse) -> Void) {
 let tasks = TaskDataManager.shared.allTasks()
 let taskList = tasks.map { $0.name }.joined(separator: ", ")
 let count = tasks.count
 let response = ShowTasksIntentResponse.success(count: count, content: taskList)
 completion(response)
 }
}

חנות נתונים משותפת

הקוד לעיל מתייחס למודל הנתונים הראשי של האפליקציה שלך (FLT:11 כי הרחבת אי עקביים פועלת בתהליך נפרד, אתה לא יכול לגשת ישירות למודל הנתונים הראשי של היישום שלך.You צריך להשתמש מיכל משותף (App Group) כדי לאחסן משימות במיקום משותף כגון משותף FLT:0UserDefaultsFLT:1 או חנות נתונים הליבה חי בקבוצה Appy להגדיר את יכולות התוספתן, לזהות את אותן משימות בפועל.

עקבו אחרי Main App

כאשר האפליקציה שלך היא הקדמית והמשתמש מפעיל קיצור דרך של Siri, ייתכן גם רוצה לטפל בכוונות ישירות ביישום הראשי (ללא הרחבה) אתה יכול להתאים את נציג האפליקציה או את נציג הסצינה שלך לאותו פרוטוקולים הכוונה.עם זאת, עבור רוב המקרים השימושיים, הסיומת מספיקה כי זה עובד ללא קשר אם האפליקציה נמצאת בחזית.

הגשמה: אישור, לאנדו ו-Prameters

טיפול בסיסי הוא רק ההתחלה.כדי להפוך את רשימת קולך ל-do חזק, להוסיף תמיכה עבור הודעות אישור ופתרון פרמטרים.

שיטות החלטה

לכל פרמטר, ניתן ליישם שיטה שתאמת או לבקש הבהרה.לדוגמה, אם המשתמש אומר "הוספת ביצים" מבלי לציין איזו רשימה, שיטת ה-FLT:13 שלך יכולה להוביל: "איזה רשימה אתה רוצה להוסיף ביצים?", אם יש לך רק רשימה אחת, לפתור אוטומטית לרשימה זו.

תגובה

ניתן לסירי לבקש מהמשתמש לאשר פעולה לפני ביצועה, זה שימושי עבור פעולות הרסניות כמו הסרת משימות.בשיעור התגובה שלך, להוסיף FLT:0;0) אישורים מסוג תגובה 1 (כאשר טיפול בהכוונה, תוכל להחזיר תגובה אישור הכולל את הפרטים.

כתובת: Deep Linking

לאחר ביצוע פעולה, ייתכן שתרצה לפתוח את האפליקציה שלך כדי להציג את הרשימה המעודכנת, המטפלת שלך יכולה לקרוא ל-FLT:15 אם זמין, או האפליקציה העיקרית שלך יכולה להגיב תוכניות כתובות.

בדיקת האפליקציה הקולית-האפשרית

שילוב Siri דורש כמה הגדרה כי פקודות המדוברות לא ניתן לדמות ישירות. השתמש בגישות הבאות:

שימוש ב-Siri Simulator ב-Xcode

הפעל את האפליקציה העיקרית שלך על סימולטור, ולאחר מכן לעצור את היישום. הבא, להפעיל את יעד הארכה Intents באמצעות תוכנית מוגדרת עבור סימולטור. Xcode יפעיל ממשק מדמיינת Siri שבו אתה יכול להקליד את הפקודה שלך.זו הדרך המהירה ביותר לבדוק ללא מכשיר פיזי.

בדיקה עם מכשיר אמיתי

לקבלת הכרה מדויקת של כוונותיך הספציפיות, לבדוק את מכשיר iOS אמיתי פועל iOS 14 או מאוחר יותר.לאחר התקנת האפליקציה שלך, הגדרות פתוחות ו-gt; Siri & חיפוש > MyToDoApp ולהבטיח את הכוונות להיעלמות על.

בעיות נפוצות ווויכוח

  • (ב) ,0) לא ניתן לזהות: (ב) עיין כי המידע של הארכה כולל את שמות המעמדיים המכוונים מתחת ל-FLT:2 IntentssssupportedFLT 3.
  • (ב) [15] מידע שאינו משותף: 1:1 , ודא כי שני המטרות שייכות לאותה קבוצת App והדרך של חנות נתונים נכונה.
  • (ב) לא נאמר: (ב) בפסוקים (ב"ג): "הדברים" (ב"ב) הם לא נאמרו: "הרבי" (במדבר כ"ד)
  • (ב) [15] , [15] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

המונחים: app Store Considerations

בעת הגשת האפליקציה שלך לחנות App, עליך להכריז על יכולת Siri. ב-App Store Connect, להוסיף הערה בהערות הסקירה המסבירות מה כוונתך לעשות ולספק פקודות מבחן.אפל תבחן עם מכשיר אמיתי, כך להבטיח שהכל עובד כראוי.

כדי למקסם את אימוץ המשתמשים, שקול את הפעולות הטובות ביותר הבאות:

  • (ב) ,0) משתמשים: ההרחבה: (FLT:1) הראו מדריך קצר על פקודות קוליות זמינות כאשר האפליקציה הושקה לראשונה.
  • (ב) ,0) ,4 ,5 ,5 ,5 ,5 , , , , , , , , , , , , , , , , , , , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ,0) , תקנו את כוונתכם: FLT:103) מספק הנחיות מקומיות ותבניות תגובה לשפות שונות.
  • (ב) [15] שגיאות בחסד: "החלל 1: תמיד להחזיר תגובה משמעותית - גם אם המשימה נכשלת - להנחות את המשתמש.

תכונות מתקדמות וצעדים הבאים

ברגע שיש לך את הבסיס קול-הקודש לעבוד, אתה יכול להרחיב אותו עם:

  • (ב) ,0) תאריך שפה רוויית: ההרחבה 1 (Let Users say "Add buy חלב למחר" ובאופן אוטומטי קבע תאריך בשל השימוש ב-FLT:20).
  • (ב) ,021 ו-[[1924]]]]
  • (ב) אינטגרציה בין-החל: 1 (ב) 1 (ב) ,5) שימוש ב-SiriKit's (FLT:2WorkoutFLT 3:, FLT:4, 4MediacioFLT:5) או תחומים אחרים אם האפליקציה שלך מתרחבת מעבר לרשימות של ביצוע.
  • (ב) ,0) אוצר המילים: FLT:1 לספק רשימת אוצר מילים לאמן את סירי כדי לזהות ביטויים ספציפיים אפליקציה כגון "רשימת המכולת שלי" או "משימות עבודה".

מסקנה

בניית אפליקציה של רשימת ה-do- עם שילוב של Siri היא דרך מעשית לשפר את הפרודוקטיביות של המשתמשים ואת הנגישות. על ידי הגדרת כוונות מותאמות אישית, יישומים בהרחבה ייעודית, ושימוש בחנות נתונים משותפת, אתה יכול ליצור חוויה ללא ידיים חלקה.הצעדים המתוארים במדריך זה - מפרויקט לבדיקות והגשה - לתת לך בסיס מוצק.

(ב) [ה]] [ה]] [ה]] [ה]] [ה]], [ה], [ה]]], [ה]], [ה]]]ה'[ה]']'[ה']'[ה']'[ה']'[ה']'[ה']']''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''