Wie legen Sie Ihre Cocoa-Anwendung als Standard-Webbrowser fest?
-
09-06-2019 - |
Frage
Wie legen Sie Ihre Cocoa-Anwendung als Standard-Webbrowser fest?
Ich möchte eine Anwendung erstellen, die standardmäßig gestartet wird, wenn der Benutzer in anderen Anwendungen (Mail, iChat usw.) auf einen HTTP- oder HTTPS-Link klickt.
Lösung
Es gibt vier Schritte zum Erstellen einer App, die als Standard-Webbrowser fungieren kann.Die ersten drei Schritte ermöglichen es Ihrer App, als Rollenhandler für die relevanten URL-Schemata (HTTP und HTTPS) zu fungieren, und der letzte Schritt macht sie zum Standard-Rollenhandler für diese Schemata.
1) Fügen Sie die URL-Schemata, die Ihre App verarbeiten kann, zur Datei info.plist Ihrer Anwendung hinzu
Um Unterstützung hinzuzufügen für http://
Und https://
Sie müssten der Datei info.plist Ihrer Anwendung Folgendes hinzufügen.Dadurch wird dem Betriebssystem mitgeteilt, dass Ihre Anwendung HTTP und HTTP-URLs verarbeiten kann.
<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) Schreiben Sie eine URL-Handler-Methode
Diese Methode wird vom Betriebssystem aufgerufen, wenn es Ihre Anwendung zum Öffnen einer URL verwenden möchte.Es spielt keine Rolle, welchem Objekt Sie diese Methode hinzufügen, sie wird im nächsten Schritt explizit an den Event Manager übergeben.Die URL-Handler-Methode sollte etwa so aussehen:
- (void)getUrl:(NSAppleEventDescriptor *)event
withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
// Get the URL
NSString *urlStr = [[event paramDescriptorForKeyword:keyDirectObject]
stringValue];
//TODO: Your custom URL handling code here
}
3) Registrieren Sie die URL-Handler-Methode
Als Nächstes teilen Sie dem Event-Manager mit, welches Objekt und welche Methode er aufrufen soll, wenn er Ihre App zum Laden einer URL verwenden möchte.Im Code hier werde ich übergeben self
als Event-Handler, vorausgesetzt, wir rufen auf setEventHandler
von demselben Objekt, das die definiert getUrl:withReplyEvent:
Methode.
Sie sollten diesen Code irgendwo im Initialisierungscode Ihrer Anwendung hinzufügen.
NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager];
[em
setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:kInternetEventClass
andEventID:kAEGetURL];
Einige Anwendungen, einschließlich früherer Versionen von Adobe AIR, verwenden das alternative WWW!/OURL AppleEvent, um anzufordern, dass eine Anwendung URLs öffnet. Um mit diesen Anwendungen kompatibel zu sein, sollten Sie daher auch Folgendes hinzufügen:
[em
setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:'WWW!'
andEventID:'OURL'];
4) Legen Sie Ihre App als Standardbrowser fest
Alles, was wir bisher getan haben, hat dem Betriebssystem mitgeteilt, dass Ihre Anwendung vorhanden ist ein Browser, jetzt müssen wir es schaffen der Standardbrowser.
Dazu müssen wir die Launch Services API verwenden.In diesem Fall legen wir unsere App als Standard-Rollenhandler für HTTP- und HTTPS-Links fest:
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
(Es ist wahrscheinlich am besten, den Benutzer um Erlaubnis zu fragen, bevor er seinen Standardbrowser ändert.)
Benutzerdefinierte URL-Schemata
Beachten Sie, dass Sie dieselben Schritte auch für die Verwaltung Ihrer eigenen benutzerdefinierten URL-Schemata verwenden können.Wenn Sie ein benutzerdefiniertes URL-Schema erstellen, empfiehlt es sich, es auf der Bundle-ID Ihrer App zu basieren, um Konflikte mit anderen Apps zu vermeiden.Wenn Ihre Bundle-ID also lautet com.example.MyApp
Sie sollten über die Verwendung nachdenken x-com-example-myapp://
URLs.
Andere Tipps
Wenn Sie nur die Standard-Hilfs-App für http(s) ändern möchten, können Sie dies in den Safari-Einstellungen tun.Dort finden Sie ein Dropdown-Menü, mit dem Sie alle registrierten Handler-Anwendungen für http auswählen können.Um die App automatisch als Standardbrowser festzulegen, lesen Sie die vorherigen Anweisungen.