March 06, 2012

เรียกโปรแกรมอื่นจากโปรแกรมของเรา ด้วย Custom URL Schemes

เดิมทีนักพัฒนาโปรแกรมบน iOS จะสามารถเขียนโปรแกรมให้ไปเรียกโปรแกรมตัวอื่นๆ ในเครื่องให้เปิดขึ้นมาทำงานได้อยู่แล้ว ผ่าน URL Schemes ต่างๆ โดยที่นักพัฒนาจะรู้จักกันดีอยู่แล้วก็ได้แก่ http, mailto, tel และ sms และพวก http-based ก็ได้แก่ YouTube และ Map

Apple ได้เปิดโอกาสให้เราสามารถกำหนด URL Schemes ให้กับ App ของเราได้เองเช่นกัน โดยมีข้อแม้ว่า  URL Schemes ที่เราจะสร้างขึ้นมาใช้เองนั้นห้ามซ้ำกับของที่ Apple มีอยู่แล้ว แต่ถ้าซ้ำ iOS จะเรียก App ของ Apple ขึ้นมาแทนที่จะเป็นของเรา และในกรณีที่ URL Schemes ของเราไปซ้ำกับ App ของคนอื่นๆ ที่ไม่ใช่ของ Apple เวลาเราเรียกก็จะเงียบ ไม่มีอะไรเกิดขึ้น

วิธีสร้าง URL Schemes ให้กับ App ของเราเอง
ทำได้โดยไปกำหนดค่าในไฟล์ Info.plist โดยสร้าง URL Types จากนั้นกำหนด URL identifier กับ URL Schemes ให้มัน ดังรูปด้านล่าง



โดยที่ URL identifier นั้นควรใช้ reverse domain style ตามธรรมเนียมปฏิบัติ ส่วน URL Schemes นั้น จะเอาไว้ให้ App อื่นๆ อ้างถึงเวลาจะเรียกให้ App ของเราขึ้นมาทำงาน (ในตัวอย่างจะกำหนด URL Schemes เป็น todolist

เมื่อสร้างเสร็จแล้ว ให้ลองเรียก App ของเราจาก App อื่นดู โดยใช้วิธีการเช่นเดียวกับการเรียกใช้ URL Schemes ต่างๆ ของ Apple ได้เลย ดังนี้

NSURL *url = [NSURL URLWithString: @"todolist://"];
[[UIApplication sharedApplication] openURL: url];

หลังจาก App ของเราถูกเรียกขึ้นมาแล้ว จะมี method บางตัวที่อยู่ใน AppDelegate ถูกเรียกขึ้นมาทำงาน ได้แก่


นอกจากเราจะเรียกให้ app ตัวอื่นๆ ทำงานได้แล้ว เรายังสามารถส่ง paramter บางอย่างติดไปกับ url ที่เรียกได้อีกด้วย เช่นเดียวกับ URL Address ที่ใช้กับเว็บไซต์ที่คุ้นเคยกัน แต่ต้องระวังนิดนึงเกี่ยวกับ URL ที่ส่งเข้ามาใน app ของเรา หากสนใจว่าจะจัดการยังไงกับมันดีอ่านต่อที่ ต่อได้ที่นี่

นอกจาก App ของเราที่จะมี URL Schemes แล้ว App คนอื่นๆ ก็มีด้วยเหมือนกันครับ ลอง Google ดูพบว่ามีบางที่ได้รวบรวมไว้ให้เราได้อ่านกันเล่นๆ ด้วย เช่น ที่นี่ ที่รวม App ของ iOS มาแทบทุกตัวเลย ทั้ง Safari, Maps, Phone, SMS, Mail, YouTube, iTunes, App Store และ iBooks (อ่านต่อเกี่ยวกับ format การคุยกับ App เหล่านี้ที่ Apple URL Scheme Reference) นอกจากนั้นก็ยังมี Third Party Application ตัวอื่นๆ อีก แต่ที่เห็นจะเยอะหน่อยก็คือ Facebook นี่แหละ

ส่วนรายละเอียดการสร้าง และวงจรชีวิตของ App ที่เกิดจากการ launch จาก URL โดยละเอียด อ่านได้ที่ Reference ของ Apple ได้เลย


อ่านต่อ

:)