قبل أسبوع شرحتُ كيف يعمل NFC Tap Counter: الشريحة تَعُدّ عمليات مسحها بنفسها، والتطبيق يُضمّن بايتات نائبة، والوسم يستبدل بها العدّاد الحيّ ومعرّف الوسم داخل أيّ محتوى يحمله في كل لمسة. يتوقف ذلك المقال حيث يتوقف الوسم نفسه، أي عند اللحظة التي تصل فيها القيم إلى هاتفك.
والسؤال الذي ما انفكّ يصلني منذ ذلك الحين هو السؤال التالي البديهي: «رائع، الوسم يسلّمني 049F50824F1390x000007 - وماذا الآن؟» إن كنت تستخدم iPhone وتريد التعامل مع هذه القيم داخل اختصار، فعليك تحليلها. وهذا عمل بسيط لكنه مُرهِق قليلًا في معالجة النصوص، وأنا أفضّل ألّا تضطر إلى كتابته بنفسك.
لذلك بنيتُ اختصارين وأشاركهما كروابط iCloud. أحدهما هو العقل المدبّر. والآخر عرض توضيحي يستخدم ذلك العقل.
ما الذي يسلّمه إليك الوسم
قبل الاختصارات: تذكير سريع بما تتلقّاه فعليًا، لأن ذلك مهم لكيفية استخدامها.
في شاشة إعداد Tap Counter تختار نوع محتوى للوسم: URL أو Email أو SMS أو Shortcut. وعند تفعيل مفتاحَي Tap Counter و/أو Tag ID، يُضمّن التطبيق بايتات نائبة داخل ذلك المحتوى، وتستبدل بها الشريحة القيمَ الحيّة في كل قراءة. وباستخدام 049F50824F1390 كمعرّف للوسم و000007 كعدّاد، تبدو أنواع المحتوى الأربعة على النحو التالي:
URL: يتحوّل
https://nfc.cool/tap-counter/إلىhttps://nfc.cool/tap-counter/?nfc=049F50824F1390x000007نص البريد: يتحوّل
Hi, here's my card.إلىHi, here's my card. 049F50824F1390x000007نص الرسالة النصية: يتحوّل
Order confirmed!إلىOrder confirmed! 049F50824F1390x000007مُدخَل الاختصار: يتحوّل
log-entryإلىlog-entry 049F50824F1390x000007
إن الرابط أعلاه حقيقي. صفحة اختبار عدّاد اللمس الحيّة لدينا مُهيّأة لقراءة قيمة ?nfc= مباشرةً من شريط عنوانها، لذا إن أردت أن ترى الاستبدال يحدث قبل كتابة أتمتتك الخاصة، فاكتب وسمًا يشير إلى https://nfc.cool/tap-counter/ مع تفعيل المفتاحين، والمسه، وستعرض لك الصفحة معرّف الوسم والعدّاد الذي تلقّته للتوّ.
عندما يكون نوع المحتوى Shortcut، يشغّل NFC.cool الاختصار المختار عبر shortcuts://run-shortcut?name=Your%20Shortcut&input=text&text=<payload>، مع قيم NFC المُلحَقة الموجودة أصلًا في النص. ومُدخَل اختصارك عبارة عن سلسلة نصية عادية. ومهمتك الوحيدة هي استخراج معرّف الوسم والعدّاد منها.
وبحسب المفاتيح التي كانت مفعّلة عند كتابتك للوسم، قد تحصل على النمط الكامل (١٤ خانة سداسية عشرية، ثم x، ثم ٦ خانات)، أو على معرّف الوسم المكوّن من ١٤ خانة فقط، أو على العدّاد المكوّن من ٦ خانات فقط. والمُحلِّل يتعامل مع الحالات الثلاث جميعها.
Parse NFC Tap Counter - المُحلِّل القابل لإعادة الاستخدام
هذا هو العقل المدبّر. لا واجهة له، يأخذ مُدخَلًا نصيًا واحدًا، ويُعيد قاموسًا (Dictionary). وهذا مقصود: فالاختصار الخدمي الذي لا واجهة له يندمج بسلاسة داخل أيّ شيء آخر تبنيه، والقاموس أسهل ما يمكن لاختصار آخر أن يستهلكه عبر إجراء Get Dictionary Value.
وإليك ما يحتويه القاموس:
tagID- معرّف الوسم السداسي العشري المكوّن من ١٤ خانة، أو سلسلة فارغة إن كان المفتاح مُعطَّلًا.count- عدّاد المسح كرقم عشري (فيخرج000007على شكل7، و00000Aعلى شكل10)، أو فارغ إن كان المفتاح مُعطَّلًا.countHex- العدّاد السداسي العشري الأصلي المكوّن من ٦ خانات، تحسّبًا لرغبتك في استخدامه حرفيًا. فارغ إن لم يكن موجودًا.hasTagIDوhasCount- قيمتان منطقيتان للتفريع، فيمكنك كتابة If hasCount is true دون الحاجة إلى فحص السلسلة بنفسك.content- المُدخَل بعد إزالة حمولة NFC منه بالكامل، بحيث ترى بقية اختصارك المُدخَل كما كان قبل أن يزيّنه الوسم. فإن كان المُدخَل عنوان URL يحمل?nfc=...، فستستعيد العنوان من دونها. وإن كان نص بريد إلكتروني مُلحقًا به معرّف الوسم، فستستعيد النص من دونه.raw- المُدخَل الأصلي دون تعديل، تحسّبًا لرغبتك في تسجيله أو العودة إليه.
ولاستدعائه من اختصارك الخاص، فالوصفة ثلاثة إجراءات:
Receive Shortcut Input كنص (تصل حمولة NFC هنا).
Run Shortcut، واختر Parse NFC Tap Counter، مع تمرير ذلك النص كمُدخَل. عطّل خيار «Show When Run» ليبقى غير مرئي.
Get Dictionary Value، واختر
tagIDأوcountأوcontentأو أيّ المفاتيح تهتمّ بها.
وهذا كل شيء. اعتبارًا من الخطوة ٣ فصاعدًا يمكنك فعل ما تشاء بالقيم: التفريع بناءً على hasTagID، أو تسجيل count في ملاحظة، أو إطلاق webhook مع بيانات JSON، أو أيّ شيء. لا يفترض المُحلِّل ما يريد اختصارك فعله بالنتيجة، وهذا بالضبط سبب صِغَره وقابليته لإعادة الاستخدام.
ملاحظة بشأن العدّاد: إنه رقم حقيقي (من نوع Number) في القاموس، لا سلسلة نصية، لذا يمكنك تمريره مباشرةً إلى مقارنة Calculate أو If دون الحاجة إلى تحويله من جديد. فخطوة التحويل من السداسي العشري إلى العشري قد تمّت بالفعل.
NFC Tag Alert - العرض التوضيحي
هذا عرض توضيحي كنتُ لأثبّته من اليوم الأول، حتى لو لم تكن تنوي استخدام التنبيهات في الإنتاج. يأخذ مُدخَل اختصار نصيًا، ويشغّل المُحلِّل، ويعرض تنبيهًا واحدًا عنوانه NFC Tag Scanned بسطرين:
Tag ID: 049F50824F1390
Scans: 7والسبب في أنني كنتُ لأثبّته أولًا هو أنه أسرع فحص ممكن للتأكد من سلامة وسم مُفعّل عليه العدّاد. اكتب وسمًا من NFC.cool Tools بنوع محتوى Shortcut وباسم NFC Tag Alert، وفعّل مفتاحَي Tap Counter وTag ID، واكتبه، والمسه. سيظهر تنبيه يحمل القيم الحقيقية من وسمك المادّي.
إن عرض التنبيه القيمَ التي توقّعتها، فوسمك يؤدّي مهمته ويمكنك الانتقال إلى بناء شيء أكثر تعقيدًا. وإن كان العدّاد خاطئًا أو معرّف الوسم مفقودًا، فأنت تعلم أن المشكلة في الوسم (أو في المفاتيح التي اخترتها عند كتابته) لا في اختصارك أنت. والتخلّص من فئة كاملة من تصحيح الأخطاء من نوع «هل الشريحة هي المُلامة أصلًا؟» يستحق تثبيت اختصار من ٥ إجراءات.
وإن تساءلتَ يومًا عن كيفية استدعاء المُحلِّل على نحو صحيح، فهذا الاختصار أيضًا هو أصغر مثال عملي ممكن. افتحه، وانظر إلى الإجراءات الخمسة، وانسخ البنية إلى اختصارك الخاص.
ربطه باختصارك الخاص
هناك طريقتان يُوجَّه بهما محتوى الوسم إلى اختصارك. والمُحلِّل يتقبّل كلتيهما.
مدفوع بالوسم (حمولة Shortcut). اكتب الوسم بنوع محتوى Shortcut، واختر اختصارك بالاسم، وفعّل ما تشاء من المفاتيح. من الآن فصاعدًا تُطلِق كل لمسة اختصارك وحمولة NFC موجودة أصلًا في المُدخَل. وداخل اختصارك، استدعِ Parse NFC Tap Counter على ذلك المُدخَل ليصبح لديك tagID وcount جاهزَين للاستخدام.
مدفوع بالـURL (حمولة URL). وهذه الحالة الأكثر شيوعًا. يحمل الوسم عنوان URL، ويفتح هاتفك ذلك العنوان عند اللمس، ويرافقه العدّاد على شكل ?nfc=.... وإن أردت أن يتولّى اختصارٌ اللمسة بدلًا من المتصفح (أو إلى جانبه)، فيمكنك ذلك: مرّر عنوان URL عبر اختصار يتعامل مع مُدخَل صفحة ويب من Safari، ثم شغّل Parse NFC Tap Counter على العنوان. يزيل المُحلِّل مقطع ?nfc= بنظافة ويعيد إليك العنوان من دونه في content، فيمكنك تمريره إلى متصفح أو استدعاء API أو أيّ مكان آخر يتوقّع عنوان URL عاديًا.
وإليك مثالًا من ٤ إجراءات لـ«تسجيل كل عملية مسح في ملاحظة داخل Apple Notes»:
Receive Shortcut Input كنص.
Run Shortcut، واختر Parse NFC Tap Counter، مع تمرير المُدخَل كنص.
Get Dictionary Value، ثلاث عمليات بحث متتالية عن
tagIDوcountوcontent. خزّن كلًّا منها في متغيّر.Append to Note، سطر واحد مثل
[Current Date] tag=<tagID> count=<count> url=<content>.
أصبح لديك الآن سجل لمسات متواصل يكتبه الوسم نفسه. لا خادم خلفي، ولا تحليلات من طرف ثالث، ولا حساب في أيّ مكان.
بضع أفكار للبناء عليها
حفنة من الأمور الصغيرة التي يفتح المُحلِّل بابها، دوّنتُها كي لا تضطر إلى اختراعها من الصفر:
التفريع بناءً على معرّف الوسم. اختصار واحد، وسوم كثيرة. أضِف إجراء If لكل معرّف وسم معروف: إن مُسِح وسم باب المكتب، فاكتم الإشعارات؛ وإن مُسِح وسم الأستوديو، فاضبط وضع تركيز؛ وإن مُسِح وسم المطبخ، فابدأ مؤقّتًا. يُعرّف معرّف الوسم الوسمَ المادّي لا المحتوى، لذا يمكنك منح كل وسم العنوان نفسه والتفاعل مع كل واحد منها على حِدَة.
اختر فائزًا عند المسح رقم N. اجمع بين
hasCountومقارنة. إن كانcountيساوي ١٠٠، فأطلِق رسالة تأكيد؛ ولكل عملية مسح أخرى، نفّذ المعالجة المعتادة. الشريحة تفرض الترتيب؛ واختصارك يكتفي بقراءته.أرسِلها إلى webhook. اقرِن هذا بـميزة Webhooks من NFC.cool إن أردت معالجة من جهة الخادم دون كتابة تطبيق iOS: انشر القيم المُحلَّلة على شكل JSON، ودع الخادم يتولّى الأمر من هناك. إجراءان في iOS ويصبح وسمك موصولًا بأيّ شيء يتحدّث بروتوكول HTTP.
سجّل في ملف أو ملاحظة. أبسطها ومفيد على نحو مفاجئ. ألحِق
timestamp, tagID, countبملف متواصل في iCloud Drive أو بملاحظة واحدة، فيصبح لديك سجل لمسات يمكنك تصفّحه أو رسمه بيانيًا لاحقًا. مناسب لتتبّع التفاعل على وسم واحد دون إقامة بنية تحتية.
وإن بنيتَ شيئًا رائعًا بها، فسيسعدني حقًا أن أراه.
شكر سريع
بُني كلا الاختصارين باستخدام Shortcuts Playground، وهو إضافة Federico Viticci لتوليد اختصارات iOS من لغة طبيعية. إنها أداة رائعة، وأودّ أن أشكره على إطلاقها - فلولاها لاستغرق إعداد هذين الاختصارين وقتًا أطول بكثير.
ملاحظة سريعة لمستخدمي Android
تطبيق الاختصارات تطبيق من Apple، لذا لا يعمل هذان الاختصاران إلا على iPhone. لكن ميزة Tap Counter نفسها تعمل على المنصّتين، لأن الاستبدال يحدث داخل الشريحة ولا يعنيه أيّ هاتف يقرأ الوسم. وعلى Android، تتصرّف أنواع الحمولة URL وEmail وSMS بالطريقة نفسها التي تتصرف بها على iOS؛ وإن أردت أتمتة مشابهة هناك، فبإمكان تطبيقات مثل Tasker أو MacroDroid أخذ عنوان URL يحمل ?nfc=... واستخراج القيم منه عبر إجراءات معالجة النصوص الخاصة بها. وصيغة البيانات المنقولة واحدة.
جرّبه
إن أردت الشرح الأعمق لكيفية عمل ميزة Tap Counter فعليًا خلف الكواليس، فستجده في المقال السابق. وإن أردت أن ترى وسمًا مُفعّلًا عليه العدّاد وهو يعمل قبل إعداد أتمتتك الخاصة، فإن صفحة العرض الحيّ للعدّاد لدينا تقرأ قيمة ?nfc= مباشرةً من عنوانها: اكتب وسمًا يشير إليها، والمسه، وراقب ظهور العدّاد ومعرّف الوسم.
وميزة NFC Tap Counter نفسها موجودة في NFC.cool Tools، على iPhone وAndroid. وللاطّلاع على المجموعة الكاملة من الأدوات التي بنيتُها حول NFC، ألقِ نظرة على ميزة قراءة وكتابة NFC.