如何将Cocoa应用程序设置为默认Web浏览器?
我想创建一个默认启动的应用程序,当用户点击其他应用程序(Mail,iChat等)中的HTTP或HTTPS链接时.
制作可充当默认Web浏览器的应用程序有四个步骤.前三个步骤允许您的应用程序充当相关URL方案(HTTP和HTTPS)的角色处理程序,最后一步使它成为这些方案的默认角色处理程序.
1)将应用程序可以处理的URL方案添加到应用程序的info.plist文件中
要添加支持http://
,https://
您需要将以下内容添加到应用程序的info.plist文件中.这告诉操作系统您的应用程序能够处理HTTP和HTTP URL.
CFBundleURLTypes
CFBundleURLName
http URL
CFBundleURLSchemes
http
CFBundleURLName
Secure http URL
CFBundleURLSchemes
https
2)编写URL处理程序方法
当操作系统想要使用您的应用程序打开URL时,将调用此方法.添加此方法的对象无关紧要,这将在下一步中显式传递给事件管理器.URL处理程序方法应如下所示:
- (void)getUrl:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { // Get the URL NSString *urlStr = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; //TODO: Your custom URL handling code here }
3)注册URL处理程序方法
接下来,告诉事件管理器在要使用您的应用加载URL时要调用哪个对象和方法.在这里的代码中,我self
作为事件处理程序传递,假设我们setEventHandler
从定义getUrl:withReplyEvent:
方法的同一对象调用.
您应该在应用程序的初始化代码中的某处添加此代码.
NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager]; [em setEventHandler:self andSelector:@selector(getUrl:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
某些应用程序(包括早期版本的Adobe AIR)使用备用WWW!/ OURL AppleEvent来请求应用程序打开URL,因此要与这些应用程序兼容,还应添加以下内容:
[em setEventHandler:self andSelector:@selector(getUrl:withReplyEvent:) forEventClass:'WWW!' andEventID:'OURL'];
4)将您的应用程序设置为默认浏览器
到目前为止,我们所做的一切都告诉操作系统您的应用程序是浏览器,现在我们需要将其设置为默认浏览器.
我们必须使用Launch Services API来执行此操作.在这种情况下,我们将我们的应用程序设置为HTTP和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
(在更改默认浏览器之前,最好询问用户的许可.)
自定义URL方案
值得注意的是,您还可以使用这些相同的步骤来处理自己的自定义URL方案.如果您正在创建自定义网址方案,最好将其基于应用的包标识符,以避免与其他应用冲突.因此,如果您的捆绑ID是com.example.MyApp
您应该考虑使用x-com-example-myapp://
URL.