2008-09-08 36 views

Trả lời

72

Có bốn bước để tạo ứng dụng có thể hoạt động như trình duyệt web mặc định. Ba bước đầu tiên cho phép ứng dụng của bạn hoạt động như một bộ xử lý vai trò cho các lược đồ URL có liên quan (HTTP và HTTPS) và bước cuối cùng làm cho nó trở thành trình xử lý vai trò mặc định cho các lược đồ đó.

1) Thêm chương trình URL ứng dụng của bạn có thể xử lý đến file info.plist của ứng dụng của bạn

Để hỗ trợ thêm cho http://https:// bạn cần phải thêm dòng sau vào tập tin info.plist của ứng dụng của bạn. Điều này cho hệ điều hành biết rằng ứng dụng của bạn có khả năng xử lý các URL HTTP và HTTP.

<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> 

2) Viết một phương pháp xử lý URL

Phương pháp này sẽ được gọi bởi hệ điều hành khi nó muốn sử dụng ứng dụng của bạn để mở một URL. Việc bạn thêm đối tượng này vào đối tượng nào không quan trọng, điều đó sẽ được chuyển rõ ràng đến Trình quản lý sự kiện trong bước tiếp theo. Phương pháp xử lý URL nên tìm một cái gì đó như thế này:

- (void)getUrl:(NSAppleEventDescriptor *)event 
    withReplyEvent:(NSAppleEventDescriptor *)replyEvent 
{ 
    // Get the URL 
    NSString *urlStr = [[event paramDescriptorForKeyword:keyDirectObject] 
    stringValue]; 

    //TODO: Your custom URL handling code here 
} 

3) Đăng ký phương pháp xử lý URL

Tiếp theo, nói với người quản lý sự kiện mà đối tượng và phương pháp để gọi khi muốn sử dụng ứng dụng của bạn để tải một URL. Trong đoạn mã ở đây, tôi đã thông qua self là trình xử lý sự kiện, giả sử rằng chúng tôi đang gọi setEventHandler từ cùng một đối tượng xác định phương thức getUrl:withReplyEvent:.

Bạn nên thêm mã này vào đâu đó trong mã khởi tạo của ứng dụng.

NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager]; 
[em 
    setEventHandler:self 
    andSelector:@selector(getUrl:withReplyEvent:) 
    forEventClass:kInternetEventClass 
    andEventID:kAEGetURL]; 

Một số ứng dụng, bao gồm cả phiên bản đầu của Adobe AIR, sử dụng WWW thay thế/OURL AppleEvent để yêu cầu một ứng dụng mở URL, vì vậy để tương thích với các ứng dụng bạn cũng nên thêm như sau:

[em 
    setEventHandler:self 
    andSelector:@selector(getUrl:withReplyEvent:) 
    forEventClass:'WWW!' 
    andEventID:'OURL']; 

4) Thiết lập ứng dụng của bạn như là trình duyệt mặc định

Tất cả những gì chúng tôi đã làm cho đến nay như nói với hệ điều hành mà ứng dụng của bạn là một trình duyệt, bây giờ chúng tôi cần phải làm cho nó trình duyệt mặc định.

Chúng tôi phải sử dụng API dịch vụ khởi chạy để thực hiện việc này. Trong trường hợp này, chúng tôi sẽ đặt ứng dụng của chúng tôi làm trình xử lý vai trò mặc định cho các liên kết HTTP và HTTPS:

CFStringRef bundleID = (CFStringRef)[[NSBundle mainBundle] bundleIdentifier]; 
OSStatus httpResult = LSSetDefaultHandlerForURLScheme(CFSTR("http"), bundleID); 
OSStatus httpsResult = LSSetDefaultHandlerForURLScheme(CFSTR("https"), bundleID); 
//TODO: Check httpResult and httpsResult for errors 

(Tốt nhất là nên yêu cầu sự cho phép của người dùng trước khi thay đổi trình duyệt mặc định của họ.)

chương trình URL Tuỳ chỉnh

Nó đáng chú ý là bạn cũng có thể sử dụng các bước tương tự để xử lý các chương trình URL tùy chỉnh của riêng bạn. Nếu bạn đang tạo một lược đồ URL tùy chỉnh, bạn nên dựa vào mã nhận dạng gói của ứng dụng để tránh xung đột với các ứng dụng khác. Vì vậy, nếu ID nhóm của bạn là com.example.MyApp, bạn nên cân nhắc sử dụng các URL x-com-example-myapp://.

+1

Dịch vụ khởi chạy là một phần của CoreServices chứ không phải Carbon. (Như vậy, nó tồn tại trong quá trình chuyển đổi 64 bit.) –

+0

Cảm ơn Peter, tôi đã sửa câu trả lời – georgebrock

+1

Không cần phải tạo chữ 'NSString' và sau đó truyền nó vào' CFStringRef', như trong '(CFStringRef) @ "http" '. Thay vào đó, hãy trực tiếp tạo chữ 'CFString':' CFSTR ("http") '. –

1

Nếu bạn chỉ muốn thay đổi ứng dụng trợ giúp mặc định cho (các) http, bạn có thể làm như vậy trong tùy chọn Safari. Ở đó bạn sẽ tìm thấy một trình đơn thả xuống cho phép bạn chọn tất cả các ứng dụng xử lý đăng ký cho http. Để tự động đặt ứng dụng đó làm trình duyệt mặc định, hãy xem hướng dẫn trước.

Các vấn đề liên quan