
واحدة من الميزات المفيدة (في رأيي) iOS 12 التي تم تقديمها في WWDC 2018 هي Siri Shortcuts .
اختصار ( اختصار ) - أمر سريع ، طريقة قصيرة لتنفيذ أي إجراء يتجاوز النص القياسي.
في تطبيقاتك ، يمكنك التقاط اختصارات لبعض الإجراءات. تعلم كيف ومتى يقوم المستخدم بتنفيذها ، يبدأ Siri بذكاء ، في الوقت والمكان المناسبين ، ليقدم له هذه الاختصارات ، والأفضل من ذلك كله ، سيتمكن المستخدم من الاتصال بها بعبارات سيعلقها عليها! تحت القط أكثر.
كيف يعمل
نحن نستخدم تطبيقات تقوم ، من خلال إجراءات معينة ، بإنشاء اختصارات للنظام وتسليمها.
يمكنك عرض هذه الاختصارات في الإعدادات → Siri و Search .

تُظهر لقطة الشاشة أعلاه الاختصارات الثلاثة الأخيرة التي اكتشفها النظام من تطبيقات مختلفة. إذا نقرنا على زر "المزيد من الاختصارات" ، فسوف نرى كل الاختصارات التي يتم تسليمها إلى النظام بواسطة كل تطبيق.
باستخدام إعدادات معينة في رمز إنشاء الاختصار ، سيقدم Siri هذه الاختصارات للمستخدم على شاشة مقفلة ، في مركز الإشعارات والبحث ، مع التركيز على عدد مرات استخدام هذه الإجراءات ، في أي وقت ، وفي أي أيام الأسبوع ، وأين وللعوامل الأخرى.
على سبيل المثال ، إذا كنت تبحث عادةً عن أجهزة الصراف الآلي في ليلة الجمعة ، فعندما تتدرب ، سيقدم لك Siri اختصارًا لهذا الإجراء في أمسيات الجمعة.

يمكننا إضافة أمرنا الصوتي إلى كل اختصار إذا نقرنا على أيقونة " + ".
نقول أمرًا صوتيًا ، اضغط على "تم" ، والآن يمكننا تنفيذ الإجراء وراء الاختصار باستخدام الصوت عبر Siri. اتضح أن المستخدم سيكون قادرًا على أداء وظائف تطبيقك من خلال Siri دون فتح التطبيق نفسه. يتم حفظ الاختصار مع العبارة في "اختصاراتي".
إنشاء اختصارات
للتطوير ، سنحتاج إلى Xcode 10 و iOS 12. في وقت الكتابة ، كلاهما في مرحلة بيتا .
يمكن إنشاء اختصار إما من خلال NSUserActivity
أو من خلال Intent
.
الحالة الأولى:
ينقر المستخدم على الاختصار ، الذي يمرر الأمر مع المعلمات ( NSUserActivity
) إلى تطبيقنا ، ويقرر كيفية معالجة هذا الأمر (افتح نافذة سعر الدولار الأمريكي الحالي ، أو نافذة طلب البيتزا المفضلة لدينا). هذا هو اختصار Spotlight القديم الجيد الذي نعرفه جميعًا ، ولكن يقدمه Siri بذكاء.
الحالة الثانية:
تعد الاختصارات التي تم إنشاؤها من خلال Intent
أكثر إثارة للاهتمام - فهي تسمح لك بتنفيذ أمر على الفور في واجهة Siri بدون تشغيل التطبيق الخاص بك. في السابق ، كانت مجموعة Intent
صعبة على Apple: تحويل الأموال وإرسال الرسائل وغيرها . الآن ، لدينا المطورين الفرصة لخلق نيتنا!
بغض النظر عن كيفية إنشاء الاختصار ، فإنه يمر عبر 3 مراحل من دورة الحياة:
- إعلان ( تعريف )
- التوصيل للنظام ( تبرع )
- المعالجة حسب التطبيق ( المقبض )

أظهر بحثي أن تطبيقًا واحدًا لا يمكنه تقديم أكثر من 20 اختصارًا للنظام.
علاوة على ذلك ، سننظر في كيفية منح تطبيقنا القدرة على إنشاء اختصارات وكيفية العمل معها داخله.
إنشاء اختصارات من خلال NSUserActivity
لنحلل النوع الأول والبسيط من الاختصارات التي تفتح من خلال NSUserActivity
.
على سبيل المثال ، في تطبيق بنك الهاتف المحمول ، لدينا شاشة بحث عن أجهزة الصراف الآلي وغالباً ما أبحث عنها. من أجل الوصول إلى الشاشة باستخدام بطاقة الصراف الآلي ، يجب أن أقوم بتشغيل التطبيق ، انتقل إلى علامة التبويب "المزيد" في علامة التبويب ، حدد قسم "المعلومات" وانقر على زر "أجهزة الصراف الآلي" هناك.
إذا أنشأنا اختصارًا يؤدي على الفور إلى هذه الشاشة ، فسيكون المستخدم قادرًا على الدخول إليها بلمسة واحدة عندما يعرضه Siri عليه ، على سبيل المثال ، على شاشة مقفلة.
أعلن اختصار
الخطوة الأولى هي الإعلان عن نوع مثل NSUserActivity
(يمكننا القول أن هذا هو معرفه) في info.playlist :
<key>NSUserActivityTypes</key> <array> <string>ru.tinkoff.demo.show-cashMachine</string> </array>
أعلن.
تسليم الاختصار للنظام (تبرع)
بعد الإعلان ، يمكننا إنشاء NSUserActivity
في رمز تطبيقنا بالنوع الذي حددناه أعلاه في info.playlist :
let activity = NSUserActivity(activityType: "ru.tinkoff.demo.show-cashMachine")
لكي يدخل النشاط إلى قائمة اختصارات النظام ، يجب تعيينه على title
وتعيين خاصية isEligibleForSearch
إلى true
. الخصائص الأخرى ليست ضرورية للإضافة إلى الاختصارات ، ولكن وجودها يجعل الاختصار أكثر قابلية للقراءة وسهل الاستخدام.
أطلق! NSUserActivity
، لتسليمها إلى النظام ، يبقى اتخاذ الخطوة الأخيرة.
لدى userActivity
خاصية userActivity
، والتي نحتاج إليها لتعيين activity
تم إنشاؤه أعلاه:
self.userActivity = activity
بمجرد تنفيذ هذا الخط ، سيتم إنشاء اختصار من هذا النشاط. سيتم تسليمه إلى النظام وعرضه في إعدادات Siri ( الإعدادات → Siri والبحث ). بعد ذلك ، سيتمكن Siri من عرضه على المستخدم ، وسيتمكن المستخدم من تعيين أمره الصوتي له.
ملاحظة : تشير وثائق Apple إلى أنه بدلاً من تعيين نشاط becomeCurrent()
التحكم في العرض ، يكفي استدعاء الأسلوب becomeCurrent()
في becomeCurrent()
. ومع ذلك ، لم يقدم هذا الإجراء أي نشاط لنظامي ولم يظهر الاختصار في القائمة
بعد ذلك ، قم باستدعاء الأسلوب becomeCurrent()
في كائن نشاط المستخدم لوضع علامة عليه becomeCurrent()
، والذي يتبرع بالنشاط إلى Siri. بدلاً من ذلك ، يمكنك إرفاق الكائن بكائن UIViewController أو UIResponder ، والذي يصنف أيضًا النشاط على أنه حالي.
للتحقق من عمل كل شيء ، افتح الإعدادات> Siri والبحث - يجب أن يكون الاختصار بناءً على نشاطنا في القائمة.
معالجة الاختصارات بالتطبيق (المقبض)
عندما يتنقل المستخدم عبر الاختصار من مركز الإشعارات أو ينشطه بالصوت ، يبدأ التطبيق ، ويجب علينا معالجة هذا الاختصار.
activity
طرح activity
لنا في AppDelegate
'طريقة:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { if userActivity.activityType == "ru.tinkoff.demo.show-cashMachine" {
المجموع
يتم إنشاء NSUserActivity
NSUserActivity كما يلي:
- قم بتعريف نوع (معرف)
NSUserActivity
في NSUserActivity
. - نقوم بإنشاء
NSUserActivity
في التعليمات البرمجية وتكوينها viewController'
.
إنشاء أوامر صوتية من تطبيق
لذا ، إذا فتح المستخدم الإعدادات> Siri والبحث ، فسوف يرى قائمة بالاختصارات التي تم إنشاؤها بواسطة تطبيقات مختلفة ، بما في ذلك تطبيقاتنا. من خلال النقر على " + " ، يمكن للمستخدم إنشاء أي أمر صوتي وربطه بالاختصار المحدد. ومع ذلك ، في كل مرة يكون دخول الإعدادات غير ملائم للمستخدم ، لا يدرك الكثيرون حتى عن هذا الاحتمال.
من الرائع أنه يمكنك إرفاق أمر صوتي بإجراء محدد مباشرةً داخل التطبيق.
لنفترض أن المستخدم يقوم ببعض الإجراءات ، يتم تسليمها إلى النظام ، ويريد حفظها. يمكننا إضافة الزر " إضافة إجراء إلى Siri " (يمكنك تسمية الزر ورسمه كما تريد) على شاشة تطبيقنا ، ثم سيتمكن المستخدم ، من خلال النقر عليه ، من ربط هذا الإجراء بأمر صوتي من داخل التطبيق دون الدخول إلى الإعدادات.
بالضغط على الزر ، يجب أن تفتح الشاشة بشكل مشروط لإضافة أمر صوتي إلى اختصار في Siri INUIAddVoiceShortcutViewController
، أو شاشة تحرير أمر صوتي INUIEditVoiceShortcutViewController
، إذا تم إنشاء أمر بالفعل. سيكون action
غير المتفاعل لهذا الزر تقريبًا على النحو التالي:
@IBAction func addToSiriAction() { // 1. , INVoiceShortcutCenter.shared.getAllVoiceShortcuts { (shortcuts, error) in guard error == nil, let shortcuts = shortcuts else { // TODO: Handle error return } // 2. , let donatedShortcut: INVoiceShortcut? = shortcuts.first(where: { (shorcut) -> Bool in return shorcut.__shortcut.userActivity?.activityType == "com.ba" }) if let shortcut = donatedShortcut { // 3. - . // let editVoiceShortcutViewController = INUIEditVoiceShortcutViewController(voiceShortcut: shortcut) editVoiceShortcutViewController.delegate = self self.present(editVoiceShortcutViewController, animated: true, completion: nil) } else { // 4. let shortcut = INShortcut(userActivity: self.userActivity!) let addVoiceShortcutViewController = INUIAddVoiceShortcutViewController(shortcut: shortcut) addVoiceShortcutViewController.delegate = self } } }
لذا ، فإن شاشات إضافة الأوامر الصوتية وتحريرها لمظهر اختصار Siri:

يجب علينا أيضًا تنفيذ طرق التفويض الخاصة بـ viewControllers ، والتي يحتاجون فيها إلى إخفاء dismiss(animated: true, completion: nil)
، وإذا لزم الأمر ، تحديث الشاشة الحالية. على سبيل المثال ، إذا كان هناك زر "إضافة أمر صوتي" على الشاشة في وقت سابق ، فبعد إضافة أمر صوتي يجب أن يختفي هذا الزر أو يتغير إلى "تحرير الأمر الصوتي".
اختصارات النية
حتى الآن ، تحدثنا فقط عن الاختصارات التي تفتح تطبيقًا وتمرر بيانات NSUserActivity
هناك إلى NSUserActivity
.
ولكن عد إلى الاختصارات التي تم إنشاؤها من خلال Intent
، والتي تسمح لك بتنفيذ بعض الإجراءات دون فتح التطبيق. هنا يبدأ المرح.
تخيل أن مستخدمًا يطلب البيتزا المفضلة لديه. سيطلبها عدة مرات وقتما يشاء ، بل أضاف أمرًا صوتيًا إلى اختصار هذه البيتزا - وهذا يبسط حياته. ولكن يمكننا أن نفعل المزيد من أجله - يمكننا التأكد من أنه من خلال إصدار أمر Siri الصوتي ، فإن النظام لا يرميها في التطبيق ، ولكنه يعرض معلومات الطلب والطلبات البيتزا على الفور في واجهة Siri! هذه هي الحالة فقط عندما لا يحتاج المستخدم إلى فتح التطبيق نفسه من أجل تنفيذ بعض الإجراءات.
أولاً ، انتقل إلى إعدادات المشروع ، وحدد الهدف الرئيسي ، وعلامة التبويب Capabilities
وتمكين الوصول إلى Siri.
يمكن أن يتفاعل تطبيقنا مع Siri ، ولكن هذا لا يحدث في الرمز الرئيسي للتطبيق ، ولكن في ملحق هدف منفصل منفصل
للبدء ، يجب إنشاء هذا الهدف: File → New → Target ، حدد Intents Extensions . سيعرض Xcode إنشاء ملحق هدف آخر للنافذة يعرض إجراءاتك في Siri ، إذا كانت هناك حاجة لذلك ، فإننا نوافق على ذلك.

أعلن اختصار
الابتكار الرئيسي لـ SiriKit في iOS 12 هو القدرة على إنشاء Inetnts
الخاص بك ، إلى تلك التي كانت في السابق.

للقيام بذلك ، قم بإنشاء ملف جديد: File → New → File ، مع تحديد SiriKit Intent Definition File من قسم Resource .

ونتيجة لذلك ، يظهر ملف بامتداد .intentdefinition ، حيث يمكنك إنشاء أهدافك الخاصة. نفتح الملف ، وحيث يوجد " لا نوايا " في الأسفل يوجد رمز " + " - انقر عليه. " نية جديدة ". ستظهر نية في القائمة التي يمكنك إضافة معلمات إليها. في حالة طلب البيتزا ، يمكنك إضافة عدد البيتزا ونوع البيتزا حسب الطلب كمعلمات. بالنسبة للكمية ، نختار النوع Integer
، ونوع البيتزا ، نختار النوع Custom
، الذي سيتم تمثيله في الكود بواسطة فئة INObject
.
الآن خطان من الإحباط:
لن يتمكن المستخدم من إرسال معلمات مختلفة إلى نفس الأمر الصوتي المحفوظ. للأسف!

ما هي معلمات:
لنفترض أنك أنشأت كيانًا "إظهار سعر النسبة %currency
" ، حيث تكون currency
معلمة كيان. هذا لا يعني أنه يمكن للمستخدم أن يقول عبارات "إظهار سعر صرف الدولار" ، "إظهار سعر صرف البيتكوين" ، إلخ. خارج الصندوق ، لن يعمل هذا على هذا النحو. ولكن هذا يعني أنه إذا نظر المستخدم إلى سعر صرف الدولار ، فقد تم إنشاء اختصار "إظهار سعر الدولار الأمريكي" ، ثم عندما نظر إلى سعر صرف Bitcoin ، تم إنشاء اختصار "إظهار سعر BTC" ، إلخ. وبعبارة أخرى ، قد يكون لديه العديد من الشورقات التي تعتمد على نفس النية ، ولكن مع معلمات مختلفة. في كل اختصار ، سيتمكن المستخدم من طلب أمره الصوتي.
حسنًا ، من خلال إنشاء intent في ملف .intentdefinition ، سينشئ Xcode تلقائيًا فئة لهذا الهدف (ملاحظة: لن يظهر في ملفات المشروع ، ولكنه سيكون متاحًا للاستخدام). سيكون هذا الملف الذي تم إنشاؤه تلقائيًا في تلك الأهداف التي تحتوي على ملف .intentdefinition .
بعد إنشاء intent في ملف .intentdefinition ، يمكننا إنشاء نوايانا في التعليمات البرمجية.
let intent = OrderPizzaIntent()
تسليم الاختصار للنظام (تبرع)
لكي يتم تضمين هذا الكيان في قائمة الاختصارات ، يجب عليك تضمينه. للقيام بذلك ، يتم إنشاء كائن INInteraction
مع مثيل من نيتك ، ويتم استدعاء طريقة .donate على هذا .donate
let intent = OrderPizzaIntentf() // ... let interaction = INInteraction(intent: intent, response: nil) interaction.donate { (error) in // ... / }
بعد تنفيذ هذا الرمز ، سيتم تسليم الاختصار القائم على النية إلى النظام وعرضه في إعدادات Siri.
نقوم بمعالجة تطبيق الاختصار (المقبض)
الخطوة التالية هي معالجة الهدف عندما ينقر عليه المستخدم في sirjest من Siri أو يسميه باستخدام أمر صوتي.
لقد أنشأنا بالفعل ملحق هدف لـ Siri ولديه فئة IntentHandler تم إنشاؤها مسبقًا ، والتي تحتوي على طريقة واحدة - `` مقبض (للقصد) "
class IntentHandler: INExtension { override func handler(for intent: INIntent) -> Any { guard intent is OrderPizzaIntent else { fatalError("Unhandled intent type: \(intent)") } return OrderPizzaIntentHandler() } }
ملاحظة: إذا كان المترجم لا يرى فئة هدفك ، فأنت لم تقم بإضافة ملف ملحق الهدف .intentdefinition لـ Siri.
في هذه الطريقة ، نحدد نوع القصد الوارد ولكل نوع نقوم بإنشاء كائن معالج يعالج هذه القصد. قم بإنشاء معالج لـ OrderPizzaIntent
الخاص بنا ، وقم بتنفيذ بروتوكول OrderPizzaIntentHandling
فيه ، والذي تم إنشاؤه تلقائيًا بعد إنشاء Intent في .intentdefinition .
يحتوي البروتوكول على طريقتين confirm
handle
. أولاً ، يتم استدعاء confirm
حيث يتم التحقق من جميع البيانات ويتم التحقق من توفر الإجراء. ثم سيعمل handle
في إجراء قصير ليتم تنفيذه.
public class OrderPizzaIntentHandler: NSObject, OrderPizzaIntentHandling { public func confirm(intent: OrderPizzaIntent, completion: @escaping (OrderPizzaIntentResponse) -> Void) {
يجب أن تستدعي كلتا الطريقتين بالتأكيد completion
مع الاستجابة OrderPizzaIntentResponse
(يتم إنشاؤه تلقائيًا أيضًا) ، وإلا سينتظر Siri وقتًا طويلاً ثم يعطي خطأ.
إجابات أكثر تفصيلاً من Siri
هناك مجموعة قياسية من رموز الاستجابة التي يتم إنشاؤها تلقائيًا - enum OrderPizzaIntentResponseCode
، ولكنها قد لا تكون كافية لواجهة سهلة الاستخدام. على سبيل المثال ، في مرحلة confirm
، قد تحدث العديد من الأخطاء المختلفة - لقد نفدت البيتزا ، ولا تعمل البيتزا في الوقت الحالي ، وما إلى ذلك. ويجب على المستخدم التعرف على هذه الحقائق ، بدلاً من الرسالة القياسية "خطأ التطبيق". هل تذكر أننا أنشأنا Intent
في ملف .intentdefinition ؟ إلى جانب الهدف نفسه ، Response
حيث يمكنك إضافة خياراتك الخاصة للأخطاء والإجابات الناجحة ، وتكوينها بالمعلمات:

الآن يمكننا إخبار المستخدم بأخطاء وإجابات أكثر إفادة:
public func confirm(intent: OrderPizzaIntent, completion: @escaping (OrderPizzaIntentResponse) -> Void) { guard let pizzaKindId = intent.kind?.identifier else { // - completion(OrderPizzaIntentResponse(code: .failure, userActivity: nil)) return } if pizzeriaManager.isPizzeriaClosed == true { /// - completion(OrderPizzaIntentResponse(code: .failurePizzeriaClosed, userActivity: nil)) return } else if pizzeriaManager.menu.isPizzaUnavailable(identifier: pizzaKindId) { /// - completion(OrderPizzaIntentResponse(code: .failurePizzaUnavailable(kind: intent.kind), userActivity: nil)) return } // - completion(OrderPizzaIntentResponse(code: .ready, userActivity: nil)) }
تجسيد Intent
إذا أنشأنا ملحق هدف Intent Extension UI ، فيمكننا رسم عرض مخصص في Siri للأهداف التي نحتاجها. لدينا MainInterface.storyboard
و IntentViewController
حيث يمكننا رسم تصميمهم. تقوم وحدة تحكم العرض هذه بتنفيذ بروتوكول INUIHostedViewControlling ويتم configureView
طريقة العرض في طريقة configView
// Prepare your view controller for the interaction to handle. func configureView(for parameters: Set<INParameter>, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set<INParameter>, CGSize) -> Void) { // Do configuration here, including preparing views and calculating a desired size for presentation. completion(true, parameters, self.desiredSize) } var desiredSize: CGSize { return self.extensionContext!.hostedViewMaximumAllowedSize }
لكي يتم استدعاء هذه الطريقة ، من الضروري إضافة اسم نيتنا إلى الصفيف NSExtension
-> NSExtensionAttributes
-> IntentsSupported
، الذي يشير إلى ملحق الهدف Intents UI
<key>NSExtension</key> <dict> <key>NSExtensionAttributes</key> <dict> <key>IntentsSupported</key> <array> <string>OrderPizzaIntent</string> </array> </dict>
اعتمادًا على تصميم العرض الخاص بك في Siri interaction.intent
القصد الذي دخل في الطريقة ، يمكنك رسم هذا العرض بالطريقة التي تريدها. فيما يلي لقطات شاشة لكيفية ظهور نيتنا في Siri ، في البحث وعلى شاشة مقفلة.

تجدر الإشارة إلى أن المستخدم لن يكون قادرًا على التفاعل مع الأزرار والتمرير وعناصر التحكم الأخرى في طريقة العرض الخاصة بك ، حيث يتم استدعاء الطريقة مع المعلمة interactiveBehavior = .none
، وهذا يفرض بالتأكيد عددًا من القيود.
المجموع
يمكن عرض اختصار قائم على Intent
في واجهة siri أو في مركز الإعلام وتنفيذ إجراء دون فتح التطبيق. لإنشائه تحتاج:
- تمكين القدرات لاستخدام سيري
- إنشاء ملحقات Intents و Inti Extensions UI
- إنشاء ملف تعريف SiriKit Intent
- ننشئ هدفنا في هذا الملف ونعين معلمات له.
- قم بإنشاء
IntentHandler
حيث نقوم بتطبيق hanlde
confirm
و hanlde
التوصيات
كود عام في هدف ملحق سيري والتطبيق الرئيسي
إذا كان لديك رمز يُستخدم في الهدف لـ Siri وفي هدف المشروع الرئيسي - فهناك طريقتان لحل هذه المشكلة:
- قم بتمييز الفئات الشائعة لإضافتها إلى كلا المستهدفين. ( عرض ← Utilites ← عرض ملف مفتش الملفات ، في قسم عضوية الهدف ، أضف علامات اختيار للأهداف التي تحتاج إلى الوصول إلى الملف المحدد)
- قم بإنشاء إطار عمل هدف واحد أو أكثر وأخذ الرمز العام هناك.
الطريقة الأخيرة هي الأفضل ، لأنه يمكنك بعد ذلك استخدام هذه الأطر في ملحقات ومشاريع أخرى. تجدر الإشارة أيضًا إلى أنه بالنسبة لهذه الأطر ، يُنصح بتعيين علامة Allow app extension API only
، ثم ، عند تطوير إطار العمل ، سيقسم المترجم إذا حاولت استخدام واجهة برمجة تطبيقات غير قانونية في تطوير الإضافات (على سبيل المثال ، UIApplication
).
يمكن تفحص الموارد المشتركة بين الأهداف من خلال مجموعات التطبيقات
تصحيح الأخطاء
سيساعد اختبار الاختصارات في:
- إعدادات إعدادات الهاتف → المطور : عرض الاختصارات الأخيرة وتبرعات العرض على مفاتيح قفل الشاشة :

- لاختبار Intens ، يمكنك على الفور تشغيل امتداد الهدف عن طريق تحديد العبارة التي يفتحها Siri في Xcode. للقيام بذلك ، حدد مخطط ملحق الهدف سيري

انقر فوق هذا الهدف ، انقر فوق تحرير المخطط ...

في حقل استعلام Siri Intent Query ، أدخل عبارة سيبدأ بها Siri بالفعل ، كما لو كنت قد قلتها بالفعل.
المجموع
أقترح أن أوقف ونلخص ما قمنا به:
- يمكن إنشاء اختصارات من خلال
NSUserActivity
أو من خلال INIntent
- يجب الإعلان عن (الاختصارات) وإبلاغ النظام (التبرع) ومعالجتها (المقبض).
- يمكنك إضافة زر " إضافة إلى Siri " إلى التطبيق ، عن طريق النقر على المستخدم الذي يمكن أن يضيف عبارة للإجراء ومن ثم يطلق عليه بصوته.
- يمكنك إنشاء أهدافك الخاصة بالإضافة إلى العناصر المضمنة.
- من خلال
Intents
القائمة على Intents Intents
يمكنك إنشاء الإجراءات التي سيتم تنفيذها من خلال واجهة Siri (إما على شاشة مقفلة أو في البحث) دون الحاجة إلى فتح التطبيق نفسه.
في وثائق Apple ، هناك رابط لمشروع تجريبي ، وهو مفيد للتنزيل والتركيز عليه أثناء التطوير.
أود أن أؤكد أنه في وقت كتابة هذا المقال كانت واجهة برمجة التطبيقات في المرحلة beta
. وكثيرا ما أصاب المشاكل والأخطاء. أثناء العمل ، جئت بشكل دوري عبر ما يلي:
- , Intent Siri, .
- Siri .
- Siri.
المراجع
- WWDC 2018, session 211: Introduction to Siri Shortcuts
- WWDC 2018, session 214: Building for Voice with Siri Shortcuts
- Apple Developer: SiriKit
- Apple Developer: INUIHostedViewControlling
- Demo Soup Chef Apple