วิธีตั้งค่าแอปพลิเคชัน Cocoa ของคุณให้เป็นเว็บเบราว์เซอร์เริ่มต้นใน macOS
การสร้างเว็บเบราว์เซอร์อาจฟังดูน่ากลัว แต่ถ้าคุณต้องการให้แอปพลิเคชัน Cocoa ของคุณทำหน้าที่นั้นล่ะ? การตั้งค่าแอปพลิเคชันของคุณให้เป็นเว็บเบราว์เซอร์เริ่มต้นใน macOS ไม่เพียงแต่เป็นไปได้ แต่ยังช่วยเพิ่มประสบการณ์ผู้ใช้โดยการให้การโต้ตอบกับลิงก์ HTTP และ HTTPS ได้อย่างราบรื่น ในบล็อกโพสต์นี้ เราจะพูดถึงขั้นตอนสำคัญในการทำสิ่งนี้
ปัญหา
เมื่อผู้ใช้คลิกที่ลิงก์เว็บในแอปพลิเคชันอย่าง Mail หรือ iChat เว็บเบราว์เซอร์เริ่มต้นจะถูกเปิดขึ้น หากคุณกำลังพัฒนาแอปพลิเคชัน Cocoa และต้องการให้แอปเป็นแอปที่เปิดลิงก์เหล่านี้ คุณต้องกำหนดค่าแอปของคุณเพื่อจัดการกับลิงก์ HTTP และ HTTPS และตั้งค่าให้เป็นเบราว์เซอร์เริ่มต้น
โซลูชัน
ในการทำให้แอปพลิเคชัน Cocoa ของคุณเป็นเว็บเบราว์เซอร์เริ่มต้น คุณสามารถปฏิบัติตามขั้นตอนทั้งสี่นี้:
1. เพิ่ม URL Schemes ลงใน Info.plist ของแอปพลิเคชันคุณ
งานแรกของคุณคือการแจ้งให้ macOS ทราบว่าแอปพลิเคชันของคุณสามารถจัดการกับคำขอ HTTP และ HTTPS ได้ ซึ่งทำได้โดยการแก้ไขไฟล์ Info.plist
ของแอปพลิเคชันคุณ วิธีทำมีดังนี้:
- เปิดไฟล์ Info.plist ของแอปพลิเคชันคุณ
- เพิ่ม XML snippet ต่อไปนี้:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>http URL</string>
<key>CFBundleURLSchemes</key>
<array>
<string>http</string>
</array>
</dict>
<dict>
<key>CFBundleURLName</key>
<string>Secure http URL</string>
<key>CFBundleURLSchemes</key>
<array>
<string>https</string>
</array>
</dict>
</array>
เมื่อคุณเพิ่มสิ่งนี้ คุณจะประกาศว่าแอปของคุณสามารถจัดการกับ URL schemes ทั้งสองประเภทได้
2. เขียนเมธอดสำหรับจัดการ URL
ถัดไป คุณต้องสร้างเมธอดที่จะถูกเรียกเมื่อแอปของคุณถูกขอให้เปิด URL นี่คือตัวอย่างที่ง่าย:
- (void)getUrl:(NSAppleEventDescriptor *)event
withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
NSString *urlStr = [[event paramDescriptorForKeyword:keyDirectObject]
stringValue];
// TODO: รหัสสำหรับจัดการ URL ของคุณที่นี่
}
ในเมธอดนี้ คุณจะต้องดำเนินการตามตรรกะเพื่อจัดการกับ URL หลังจากที่มันถูกดึงมา
3. ลงทะเบียนเมธอดสำหรับจัดการ URL
ตอนนี้คุณมีเมธอดสำหรับจัดการ URL แล้ว คุณต้องลงทะเบียนกับ macOS Event Manager คุณสามารถทำได้โดยการเพิ่มโค้ดต่อไปนี้ลงในส่วนการเริ่มต้นของแอปพลิเคชันคุณ:
NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager];
[em setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:kInternetEventClass
andEventID:kAEGetURL];
นอกจากนี้ เพื่อรองรับแอปพลิเคชันรุ่นเก่า ให้ลงทะเบียนสำหรับ Apple Event WWW!/OURL:
[em setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:'WWW!'
andEventID:'OURL'];
4. ตั้งค่าแอปของคุณเป็นเบราว์เซอร์เริ่มต้น
สุดท้าย คุณต้องตั้งค่าแอปของคุณเป็นตัวจัดการเริ่มต้นสำหรับ HTTP และ HTTPS schemes โดยใช้ Launch Services API เพิ่มโค้ดต่อไปนี้:
CFStringRef bundleID = (CFStringRef)[[NSBundle mainBundle] bundleIdentifier];
OSStatus httpResult = LSSetDefaultHandlerForURLScheme(CFSTR("http"), bundleID);
OSStatus httpsResult = LSSetDefaultHandlerForURLScheme(CFSTR("https"), bundleID);
// TODO: ตรวจสอบ httpResult และ httpsResult สำหรับข้อผิดพลาด
คำแนะนำ: เป็นการดีที่จะขออนุญาตจากผู้ใช้ก่อนที่จะเปลี่ยนการตั้งค่าเบราว์เซอร์เริ่มต้นของพวกเขา
URL Schemes ที่กำหนดเอง
นอกจาก URL schemes มาตรฐานแล้ว คุณยังสามารถสร้าง schemes ของคุณเองได้ เพื่อหลีกเลี่ยงความขัดแย้งกับแอปพลิเคชันอื่น ๆ ควรใช้แนวทางเดียวกับตัวระบุแพ็คเกจ (bundle identifier) ของแอปพลิเคชัน ตัวอย่างเช่น ถ้าตัวระบุแพ็คเกจของคุณคือ com.example.MyApp
ให้พิจารณาการใช้การกำหนดค่าที่คล้ายกับ x-com-example-myapp://
สรุป
โดยการปฏิบัติตามคู่มือง่าย ๆ นี้ คุณสามารถเปลี่ยนแอปพลิเคชัน Cocoa ของคุณให้เป็นเว็บเบราว์เซอร์เริ่มต้นสำหรับผู้ใช้ใน macOS ซึ่งไม่เพียงแต่เพิ่มประโยชน์ของแอปพลิเคชัน แต่ยังให้ประสบการณ์เว็บที่ดีกว่าและเป็นการบูรณาการสำหรับผู้ใช้ จำไว้ว่าควรให้ความสำคัญกับความยินยอมของผู้ใช้เมื่อมีการเปลี่ยนการตั้งค่าเริ่มต้นเพื่อให้การเปลี่ยนแปลงราบรื่นยิ่งขึ้น
หากคุณมีคำถามเพิ่มเติมหรือต้องการความคิดเห็น หากคุณพบปัญหาในการดำเนินการโปรดอย่าลังเลที่จะถาม!