July 19, 2015

Search APIs ใน iOS9

แต่เดิมก่อนที่จะมี iOS 9 เราสามารถใช้ Spotlight ค้นหาได้เฉพาะแอป และข้อมูลบางอย่างที่ iOS อนุญาตเท่านั้น เช่น รายชื่อ โดยที่นักพัฒนาไม่สามารถควบคุมอะไรได้เลย แต่พอมาถึง iOS 9 Apple ได้เปิดโอกาสให้นักพัฒนาสามารถกำหนดได้ว่า เนื้อหาตรงไหนในแอปที่สามารถถูกค้นหาและถูกแสดงอยู่ในผลการค้นหาโดย Spotlight ได้บ้าง ซึ่งเครื่องมือที่ Apple เพิ่มเข้ามาช่วยงานนี้ก็คือ CoreSpotlight นั่นเอง

การทำให้ Spotlight รู้จักเนื้อหาที่ต้องการภายในแอปของเรา มี 3 ขั้นตอนดังนี้
  1. สร้าง CSSearchableItemAttributeSet เพื่อใช้เก็บเนื้อหาที่เราอยากให้ Spotlight แสดงในผลการค้นหา (เช่น title, description และภาพประกอบ)
  2. เก็บ CSSearchableItemAttributeSet ลงใน  CSSearchableItem
  3. ส่ง CSSearchableItem ให้ CSSearchableIndex ทำ index เพื่อให้ Spotlight หาเจอ
จาก 3 ขั้นตอนที่ว่ามา ก็จะได้หน้าตาโค้ดดังนี้


ลองรันโค้ด และเปิด Spotlight และลองค้นหาด้วยคำว่า fin


ก็จะพบผลลัพธ์ และข้อมูลที่แสดงก็เป็นไปตามที่เราได้กำหนดไว้ในขั้นตอนที่ 1 ทุกอย่าง และเมื่อผู้ใช้แตะที่ผลการค้นหาที่เป็นเนื้อของในแอปของเรา แอปก็จะเปิดขึ้นมา พร้อมกับด้านบนซ้ายของหน้าจอก็จะแสดงปุ่ม Back to Search ให้ user ใช้กดกลับไปหน้าผลการค้นหาจาก Spotlight ได้เหมือนเดิม

เมื่อ user แตะที่ผลลัพธ์ แอปของเราก็จะเปิดขึ้นมา ในจังหวะนี้ เราสามารถรับรู้ได้ว่า user แตะผลลัพธ์ไหนที่ทำให้แอปเราต้องเปิดขึ้นมา เพื่อที่เราจะได้ออกแบบแอปให้ตอบสนองต่อ user ได้อย่างถูกต้อง ซึ่งเราสามารถตรวจสอบได้จาก method นี้ใน AppDelegate


และหากต้องการลบเนื้อหาของเราออกจากผลการค้นหา สามารถทำได้โดยการใช้ method ต่อไปนี้
deleteSearchableItemsWithIdentifiers
deleteSearchableItemsWithDomainIdentifiers
deleteAllSearchableItemsWithCompletionHandler
รายละเอียดอ่าน Use Core Spotlight APIs to Make App Content Searchable

CoreSpotlight ถูกออกแบบมาให้เราใช้งานได้ง่ายมาก และยังทำให้เราสามารถช่วยให้ user เปิดแอป และค้นหาเนื้อหาต่างๆ ได้ง่ายขึ้นอีกด้วย แต่อย่างไรก็ตามถึงแม้มันจะดูเป็นไอเดียที่ดีที่เราสามารถทำ index เนื้อหาภายในแอปของเราได้ ในอีกด้านหนึ่ง หากเราใส่เนื้อหาลงไป index มากเกินความจำเป็น หรือใส่เนื้อหาที่ไม่มีความสำคัญอะไรลงไปแล้วบางทีนี่อาจเป็นการ spam ผลการค้นหาก็ได้ ซึ่งไม่ใช่เรื่องดีต่อประสบการณ์การใช้งานของผู้ใช้แน่ ควรระวัง และคิดให้ดีๆ ก่อนนำฟีเจอร์นี้ไปใช้กับแอปของเรา

อ่านต่อ