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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top