1.
¸ÅÊö
Æ»¹ûÔÚ iOS 10 ¿ª·ÅÁË SiriKit ½Ó¿Ú¸øµÚÈý·½Ó¦Óá£Ä¿Ç°£¬QQ ÒѾÂÊÏÈÊÊÅäÁË Siri
µÄ·¢ÏûÏ¢ºÍ´òµç»°¹¦ÄÜ¡£ÕâÒâζ×ÅÔÚ iOS 10 ÖÐÄã¿ÉÒÔÖ±½Ó¸æËß Siri ÈÃËü°ïÄã·¢ QQ ÏûÏ¢ºÍ´ò
QQ µç»°ÁË£¬ÌýÆðÀ´ÊDz»ÊǺܿáìÅ£¿
ÄÇôµÚÈý·½Ó¦ÓÃʹÓà Siri µÄÌåÑ龿¾¹ÈçºÎ£¿ÄÄЩӦÓÿÉÒÔ½ÓÈë SiriKit£¿½ÓÈë
SiriKit ÓÖÐèÒª×öÄÄЩ¹¤×÷ÄØ£¿ÕâÆªÎÄÕ»áΪÄãÒ»Ò»½â´ðÕâЩÒÉ»ó¡£

ͼ1 Óà Siri ·¢ QQ ÏûϢЧ¹ûչʾ
2. SiriKit ¼ò½é
ÎÒÃǶ¼ÖªµÀ Siri ÊÇ iPhone ÊÖ»úÖеÄÖÇÄÜÓïÒôÖúÊÖ£¬ÄÇôʲôÊÇ SiriKit ÄØ£¿SiriKit
ÊÇÆ»¹ûΪµÚÈý·½Ó¦ÓÃÖ§³Ö Siri ÌṩµÄ¿ª·¢¿ò¼Ü¡£ÔÚ¹Ù·½ÎĵµÖУ¬SiriKit ½«¶Ô²»Í¬³¡¾°µÄÓïÒôÖ§³Ö»®·ÖΪ²»Í¬µÄ
domain£¬Ä¿Ç°£¬SiriKit Ö§³ÖµÄ domain °üÀ¨£ºVoIP µç»°¡¢·¢ÏûÏ¢¡¢×ªÕË¡¢Í¼Æ¬ËÑË÷¡¢ÍøÔ¼³µ¶©³µ¡¢CarPlay
ºÍ²ÍÌüÔ¤¶¨£¬Ò²¾ÍÊÇ˵Èç¹ûÄãµÄÓ¦ÓÃÖаüº¬ÓÐÕâЩ¹¦ÄÜÖ®Ò»£¬¾Í¿ÉÒÔ¿¼Âǽ«ÕâЩ¹¦ÄܽÓÈëµ½ SiriKit ÖÐÀ²¡£
ʵÏÖ SiriKit Ïà¹Ø¹¦ÄÜʱ£¬ÎÒÃDz¢²»ÐèÒªÕæÕý¶ÔÓïÒô½øÐÐʶ±ð£¬ÓïÒôµÄʶ±ð¹¤×÷»áÓÉ Siri Íê³É¡£Siri
ʶ±ðÍêÓïÒôºó£¬»á½«ÓïÒôÒªÍê³ÉµÄ¹¦ÄܳéÏó³É Intent ¶ÔÏ󴫵ݸøÎÒÃÇ£¬¶øÎÒÃǵĽÓÈ빤×÷Ö÷ÒªÊÇÓëÕâЩ Intent
¶ÔÏó´ò½»µÀ£¬²¢²»»áÉæ¼°µ½×ÔÈ»ÓïÑÔ´¦Àí£¨NLP£©µÄ¼¼Êõ¡£
¹ØÓÚ SiriKit µÄ¿ª·¢ÍøÉÏÒÑÓÐһЩÎÄÕÂ(±ÈÈç¡¶SiriKit ³õ̽
¡ª¡ª WWDC 2016 ¼¼ÊõÉÍÎö¡·)£¬Ò²¿É²Î¿¼Æ»¹ûµÄ¹Ù·½Îĵµ SiriKit Programming
Guide£¬±¾ÎÄ×ÅÖØ½éÉÜ QQ µÄÊÊÅä¾Ñé¡£

ͼ2 SiriKit ÔÀí
3. SiriKit ½ÓÈë
ҪʵÏÖ SiriKit µÄ¹¦ÄÜÐèÒªÔÚ Xcode ¹¤³ÌÖÐÌí¼Ó Intents Extension µÄ
target£¬ºÍÆäËû extension Ò»Ñù£¬Intents Extension ÊÇÒ»¸ö¶ÀÁ¢ÓÚ Containing
App ½ø³ÌÔËÐеIJå¼þ£¬Ö÷ÒªÓÃÓÚ´¦ÀíºÍÈ·ÈÏÀ´×Ô Siri µÄ intent ÇëÇó¡£Èç¹ûÏëÈà Siri ÔÚ´¦Àí
App Ïà¹Ø intent ʱÌṩһЩ×Ô¶¨ÒåµÄ½çÃæ£¬ÄÇôÄã¾ÍÐèÒªÔÙÌí¼Ó Intents UI Extension
µÄ target£¬Intents UI Extension Ò²ÊÇÒ»¸ö¶ÀÁ¢ÔËÐеIJå¼þ£¨ËùÒÔÒªÍêÕûµÄÖ§³Ö SiriKit
ÆäʵÊÇÐèÒªÌí¼ÓÁ½¸ö target£¬Óе㵰ÌÛ£©¡£¹ØÓÚ App Extension µÄ¿ª·¢¿ÉÒԲο¼Æ»¹ûµÄ App
Extension Programming Guide¡£
ÎÒÃÇÒÔ QQ Öеķ¢ÏûÏ¢¹¦ÄÜΪÀý˵Ã÷һϠSiriKit µÄ½ÓÈë·½·¨£º
Ê×ÏÈ£¬ÎÒÃÇÐèÒªÔÚ Intents Extentsion µÄ info.plist
ÎļþÖÐÅäÖÃÐëÖ§³ÖµÄ Siri Intents£¬ÔÚ IntentsSupported ÖмÓÈë INSendMessageIntent£¬Èç¹ûÐèÒªÔÚËøÆÁʱ½ûÓÃij¸ö¹¦ÄÜ£¬ÔòÔÙÔÚ
IntentsRestrictedWhileLocked ÖмÓÈëÏàÓ¦ÏîµÄ Intent£¬Èçͼ3Ëùʾ¡£

ͼ3 Intent Extentsion
info.plist ÅäÖÃ
SiriKit µÄ½ÓÈëÖ÷Òª·ÖΪ Intents Extension ºÍ Intents UI Extension
Á½²¿·Ö£¬ÏÂÃæ·Ö±ð½øÐнéÉÜ¡£
Intents Extension
µ±ÎÒÃÇ¶Ô Siri ˵¡°Óà QQ ·¢ÏûÏ¢¸øÍõһȻ˵ÄãºÃ¡±Ê±£¬ÓïÒôµÄʶ±ð½«»áÓÉ Siri ×Ô¶¯Íê³É£¬Siri
»á½«Ê¶±ðºÃµÄÄÚÈÝչʾÔÚ Siri µÄ½çÃæ¡£Èçͼ4Ëùʾ£¬ÎÒÃÇ¿ÉÒÔ¿´µ½Ò»¸öÍêÕûµÄ·¢ÏûÏ¢Óï¾äÖ÷ÒªÓÉËIJ¿·Ö×é³É£º
Ó¦ÓÃÃû£º¸æËß Siri ҪʹÓÃÄĸö App£¬Siri »á¸ù¾Ý App µÄ bundle displayname
×Ô¶¯Ê¶±ð App µÄÃû³Æ£¬ÎÞÐè¶îÍâ×¢²á¡£
·¢ÏûÏ¢ Intent£º¸æËß Siri ҪʹÓ÷¢ÏûÏ¢µÄ¹¦ÄÜ£¬ÎÒÃÇʵ²â·¢ÏÖ˵·¢ÐÅÏ¢Ò²ÊÇÄÜʶ±ð£¬¾ßÌ廹ÓÐÄÄЩ´Ê»ã»áʶ±ðΪ·¢ÏûÏ¢µÄ
intent Æ»¹ûûÓÐÔÚÎĵµÖÐ˵Ã÷¡£
ÏûÏ¢½ÓÊÕÕߣº¸æËß Siri ÏûÏ¢µÄ½ÓÊÕÕßÊÇË£¬¡°ÍõһȻ¡±ÊÇÎÒ QQ ºÃÓѵÄêdzơ£
ÏûÏ¢ÄÚÈÝ£º¸æËß Siri ÄãÒª·¢µÄÏûÏ¢ÄÚÈÝÊÇʲô£¬ÕâÀïµÄÏûÏ¢ÄÚÈÝΪ¡°ÎÒºÜÉúÆø¡±¡£

ͼ4 È·ÈÏ·¢ËÍÏûÏ¢½çÃæ
ÆäÖÐÓ¦ÓÃÃûºÍ Intent ÊDZØÐëµÄ£¬²»È» Siri ÎÞ·¨³éÏó³öÄãµÄ¡°Intent¡±¡£ºóÁ½ÏîÈç¹ûȱʡµÄ»°£¬ÎÒÃÇ¿ÉÒÔÔÚʵÏÖÖÐÒªÇóÓû§½øÒ»²½ÌṩÊý¾Ý»òÕߺöÂÔ¡£ÔÚʶ±ðÍê³Éºó
Siri »á½«ÏûÏ¢ÄÚÈݺͽÓÊÕÕß³éÏó³ÉÒ»¸ö INSendMessageIntent ´«µÝ¸ø QQ µÄ Intent
Extension¡£
ÎÒÃÇ´Óͼ4»¹¿ÉÒÔ¿´µ½ Siri ׼ȷ´ÓÎÒµÄÓïÒôÖÐʶ±ð³öÎÒ QQ ºÃÓÑÖÐêdzÆÎª¡°ÍõһȻ¡±µÄºÃÓÑ£¬È»¶ø¡°ÍõһȻ¡±²¢²»ÊÇÒ»¸öͨÓõĶÌÓÄÇôÕâÊÇÔõô×öµ½µÄÄØ£¿°ÂÃØ¾ÍÔÚÓÚÔÚ
QQ ÔËÐÐʱÎÒÃǰÑËùÓÐ QQ ºÃÓѵÄêdzÆÍ¬²½µ½ÁË Siri ÔÆ¶Ë£¬ÕâÑù Siri ¾Í¿ÉÒÔʶ±ð³öÌØ¶¨Óû§ÒªÊ¹ÓõÄÌØ¶¨¶ÌÓÏêϸͬ²½·½·¨¿É²Î¿¼
INVocabulary µÄsetVocabularyStrings:ofType:·½·¨¡£
ÿ¸ö domain µÄ¹¦ÄÜÔÚ Siri Öж¼ÓжÔÓ¦µÄ Intents£¬¶øÃ¿¸ö
intents ¶¼¶ÔÓ¦Ò»¸öÌØ¶¨µÄ handler ÐÒé¡£¶ÔÓÚ·¢ÏûÏ¢À´½²£¬¶ÔÓ¦µÄ Intent ºÍ handler
ÐÒé·Ö±ðΪINSendMessageIntentºÍINSendMessageIntentHandling¡£Ö»ÒªÊµÏÖINSendMessageIntentHandlingÐÒéÖеÄÏà¹Ø·½·¨£¬²¢ÔÚ
Siri ½âÎö³öINSendMessageIntentÇëÇóʱÓÃÎÒÃǵÄINSendMessageIntentHandling¶ÔÏóÈ¥´¦ÀíÏà¹ØµÄ·¢ÏûÏ¢ÇëÇó¡£¾ßÌåµÄÁ÷³ÌÈçͼ5£º

ͼ5 Siri ·¢ QQ ÏûÏ¢Á÷³Ì
1£©ResolveRecipientsForSendMessage
¶Ô Siri ´ÓIntentÖд«µÝ¹ýÀ´µÄ½ÓÊÕÕßÃû³Æ½øÐд¦ÀíºÍÈ·ÈÏ£¬±ÈÈç¿ÉÒÔÈ·ÈϸÃÃû³Æµ±Ç°ÊÇ·ñÔÚ
QQ ºÃÓÑÁбíÖУ¬²¢½« resolution result ·´À¡¸ø Siri¡£Resolution result
´ú±íÁËÓ¦ÓÃ¶Ô intent ´¦ÀíºóµÄ½á¹û£¬¶ÔÓÚ·¢ÏûÏ¢À´Ëµ£¬±í1ÁоÙÁ˼¸ÖÖ¿ÉÄÜµÄ resolution results¡£

±í1 send resolution result
2£©ResolveContent
Óë½ÓÊÕÕߵĴ¦ÀíÀàËÆ£¬ÔÚÕâ¸ö·½·¨ÖпÉÒÔ¶Ô Siri ʶ±ð³öµÄÏûÏ¢ÄÚÈݽøÐС°ÐÞÊΡ±£¬²¢ÇÒ½« resolution
result ·´À¡¸ø Siri£¬±ÈÈç QQ ¶ÔһЩÏûÏ¢ÀïÃæµÄÌØÊâ´Ê»ãÈç¡°ÉúÆø¡±×öÁË emoji ÊÊÅä¡£
3£©ConfirmSendMessage
Õâ¸ö·½·¨µÄ×÷ÓÃÊÇÈ·ÈÏÊÇ·ñÒª·¢Ë͸ÃÏûÏ¢£¬¿ÉÒÔÔÚÕâÒ»²½½øÐÐһЩ¼øÈ¨¹¤×÷£¬¼øÈ¨Í¨¹ýºóÔÙÈ·ÈÏ·¢ËÍ£¬·ñÔòÈ¡Ïû¡£È·ÈÏ¿ÉÒÔ·¢Ëͺó»áµ÷ÆðÈ·ÈÏ·¢ËͽçÃæ£¬Èçͼ4Ëùʾ¡£Èç¹ûÐèÒª´ÓContaining
App¹²ÏíÊý¾Ý£¬¾ßÌåµÄʵÏÖ·½°¸²Î¿¼ App Group µÄ Shared Container¡£
4£©HandleSendMessage
Èçͼ4£¬µ±Óû§µã»÷ÁË¡°·¢ËÍ¡±°´Å¥»òÕßÓÃÓïÒô¸ø³öÁË·¢ËÍÖ¸Áîʱ»á×îÖÕ½øÈëµ½Õâ¸ö·½·¨£¬ÔÚÕâ¸ö·½·¨ÀïÎÒÃÇÐèҪʵÏÖ·¢ÏûÏ¢µÄÂß¼£¬·¢Ëͳɹ¦ºó¿ÉÒÔµ÷ÆðÏûÏ¢·¢Ëͳɹ¦µÄ½çÃæ£¬Èçͼ6¡£

ͼ6 ÏûÏ¢·¢Ëͳɹ¦½çÃæ
Intents UI Extension
¶ÔÓÚÖ§³Ö×Ô¶¨Òå½çÃæµÄ Intent ÀàÐÍ£¬¿ÉÒÔÔÚ Intents UI Extension ÖÐÌṩ¸üÃÀ¹ÛµÄ×Ô¶¨Òå½çÃæ¡£
Custom UI µÄʵÏÖÏà¶Ô½Ï¼òµ¥£¬ºÍ iOS App µÄ¿ª·¢Ò»Ñù£¬¶¼ÊÇͨ¹ý UIViewController
µÄ×ÓÀàʵÏÖ¡£ÎÒÃÇÐèÒªÔÚ Intents UI Extension µÄ info.plist ÎļþÖÐÉèÖÃ
initial viewcontroller »òÕßÉèÖà main storyboard£¬¶ÔÓÚ²»Í¬ÀàÐ͵Ä
Intent µÄ½çÃæÕ¹Ê¾£¬Í¨¹ý Child Viewcontrollers µÄ·½Ê½ÊµÏÖ²îÒ컯½çÃæÕ¹Ê¾¡£
Èçͼ7Ëùʾ£¬µ±½ÓÊÕµ½À´×Ô Intents Extension µÄ response ʱ£¬ÏµÍ³»á»½Æð Intents
UI Extension ²¢¼ÓÔØ initial viewcontroller£¬Í¨¹ýINUIHostedViewSiriProvidingÐÒéµÄconfigureWithInteraction:context:completion:·½·¨¿ÉÒÔ»ñÈ¡
intent£¬±ÈÈçÔÚ·¢ÏûÏ¢¹¦ÄÜÖУ¬ÔÚÏûϢȷÈÏ·¢Ëͺͷ¢Ëͳɹ¦ºó¶¼»á»Øµ÷Ò»´ÎÕâ¸ö·½·¨¡£¸ù¾Ý Intent ¶ÔÏóµÄÀàÐͺÍ״̬£¬ÔÚÊÕµ½Ïà¹Ø
Intent µÄ»Øµ÷ʱ present ¶ÔÓ¦µÄ Child Viewcontroller ¼´¿ÉʵÏÖ¶¨ÖÆ»¯µÄ½çÃæÕ¹Ê¾¡£
ÕâÀïÐèҪעÒâµÄÊÇ£¬Intents UI Extension µÄ½ø³Ì²¢²»»áÔÚ½çÃæÏú»Ùºó¾ÍÍ˳ö£¬ºÜ¿ÉÄÜÖ»ÊÇÔÚºǫ́´¦ÓÚÐÝÃß״̬£¬Ï´Î
response µ½À´Ê±ÔÙ±»»½ÐÑ¡£

ͼ7 Life cycle of an Intents UI extension
4. ×ܽá
×ܵÄÀ´ËµËäȻƻ¹ûÕâÒ»´Î¶Ô SiriKit ¿ª·ÅµÄ³¡¾°ÓÐÏÞ£¬µ«ÊÇ´ÓÎÒÃǵÄÊÊÅä¾ÀúÀ´¿´Æ»¹û¶Ô Siri »¹ÊǷdz£ÖØÊӵġ£ÁíÍ⣬ÕâÊÇ
SiriKit Ê״ζԵÚÈý·½Ó¦Óÿª·Å½Ó¿Ú£¬ËùÒÔ²»¿É±ÜÃâ´æÔÚһЩÎÊÌâ¡£ÎÒÃÇÔÚ¿ª·¢¹ý³ÌÖÐҲȷʵÓöµ½ÁËһЩ SiriKit
±¾ÉíµÄ Bug£¬´ó²¿·Ö Bug ÔÚÏòÆ»¹û·´À¡ºó¶¼µÃµ½Á˽â¾ö£¬µ«ÊÇÔÚÓïÑÔʶ±ð·½Ãæ Siri ÒÀÈ»´æÔÚһЩȱÏÝ£¬±ÈÈç¶ÔÖÐÓ¢ÎÄ»ìºÏµÄ³¡¾°Ê¶±ðÒÀ¾É²»Ì«ºÃ¡£ÆÚ´ýÒÔºó
Siri ¶ÔÖÐÎĵÄÖ§³ÖÔ½À´Ô½ºÃ£¬Ò²Ï£Íû Siri Äܹ»¿ª·Å¸ü¶àµÄ³¡¾°¸øµÚÈý·½Ó¦ÓÃÊÊÅä¡£ |