วิธีตั้งค่าแอปพลิเคชัน Cocoa ของคุณให้เป็นเว็บเบราว์เซอร์เริ่มต้นใน macOS

การสร้างเว็บเบราว์เซอร์อาจฟังดูน่ากลัว แต่ถ้าคุณต้องการให้แอปพลิเคชัน Cocoa ของคุณทำหน้าที่นั้นล่ะ? การตั้งค่าแอปพลิเคชันของคุณให้เป็นเว็บเบราว์เซอร์เริ่มต้นใน macOS ไม่เพียงแต่เป็นไปได้ แต่ยังช่วยเพิ่มประสบการณ์ผู้ใช้โดยการให้การโต้ตอบกับลิงก์ HTTP และ HTTPS ได้อย่างราบรื่น ในบล็อกโพสต์นี้ เราจะพูดถึงขั้นตอนสำคัญในการทำสิ่งนี้

ปัญหา

เมื่อผู้ใช้คลิกที่ลิงก์เว็บในแอปพลิเคชันอย่าง Mail หรือ iChat เว็บเบราว์เซอร์เริ่มต้นจะถูกเปิดขึ้น หากคุณกำลังพัฒนาแอปพลิเคชัน Cocoa และต้องการให้แอปเป็นแอปที่เปิดลิงก์เหล่านี้ คุณต้องกำหนดค่าแอปของคุณเพื่อจัดการกับลิงก์ HTTP และ HTTPS และตั้งค่าให้เป็นเบราว์เซอร์เริ่มต้น

โซลูชัน

ในการทำให้แอปพลิเคชัน Cocoa ของคุณเป็นเว็บเบราว์เซอร์เริ่มต้น คุณสามารถปฏิบัติตามขั้นตอนทั้งสี่นี้:

1. เพิ่ม URL Schemes ลงใน Info.plist ของแอปพลิเคชันคุณ

งานแรกของคุณคือการแจ้งให้ macOS ทราบว่าแอปพลิเคชันของคุณสามารถจัดการกับคำขอ HTTP และ HTTPS ได้ ซึ่งทำได้โดยการแก้ไขไฟล์ Info.plist ของแอปพลิเคชันคุณ วิธีทำมีดังนี้:

  1. เปิดไฟล์ Info.plist ของแอปพลิเคชันคุณ
  2. เพิ่ม 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 ซึ่งไม่เพียงแต่เพิ่มประโยชน์ของแอปพลิเคชัน แต่ยังให้ประสบการณ์เว็บที่ดีกว่าและเป็นการบูรณาการสำหรับผู้ใช้ จำไว้ว่าควรให้ความสำคัญกับความยินยอมของผู้ใช้เมื่อมีการเปลี่ยนการตั้งค่าเริ่มต้นเพื่อให้การเปลี่ยนแปลงราบรื่นยิ่งขึ้น

หากคุณมีคำถามเพิ่มเติมหรือต้องการความคิดเห็น หากคุณพบปัญหาในการดำเนินการโปรดอย่าลังเลที่จะถาม!