33 votes

Comment définissez-vous votre application Cocoa comme navigateur Web par défaut?

Comment définissez-vous votre application Cocoa comme navigateur Web par défaut?

Je veux créer une application qui est lancée par défaut lorsque l'utilisateur clique sur un lien HTTP ou HTTPS dans d'autres applications (Mail, iChat etc.).

79voto

georgebrock Points 9582

Il y a quatre étapes à suivre pour faire une application qui peut agir comme navigateur web par défaut. Les trois premières étapes de permettre à votre application d'agir comme un rôle de gestionnaire pour les schémas d'URL (HTTP et HTTPS), et la dernière étape est le rôle par défaut du gestionnaire de ces régimes.

1) Ajouter les schémas d'URL de votre application peut prendre en charge de votre application info.fichier plist

Pour ajouter le support d' http:// et https:// vous devez ajouter les lignes suivantes à votre demande d'info.fichier plist. Cela dit le système d'exploitation que votre application est capable de gérer HTTP et les Url 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) Écrire un gestionnaire d'URL méthode

Cette méthode sera appelée par le système d'exploitation lorsqu'il veut utiliser votre application pour ouvrir une URL. Il n'est pas n'importe quel objet que vous ajoutez cette méthode, qui va être explicitement transmis au Gestionnaire d'Événement dans l'étape suivante. Le gestionnaire d'URL méthode devrait ressembler à quelque chose comme ceci:

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

  //TODO: Your custom URL handling code here
}

3) Enregistrer l'URL de la méthode de gestionnaire d'

Ensuite, dites-le gestionnaire d'événement de l'objet et de la méthode à appeler quand on veut l'utiliser à votre application de charger une URL. Dans le code ici, je suis passé self comme le gestionnaire d'événements, en supposant que nous appelons setEventHandler partir de l'objet même qui définit l' getUrl:withReplyEvent: méthode.

Vous devez ajouter ce code quelque part dans votre application du code d'initialisation.

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

Certaines applications, y compris les premières versions de Adobe AIR, la solution de WEB!/OURL ordre d'extinction à demander que l'application ouvre l'Url, donc pour être compatible avec ces applications, vous devez également ajouter le texte suivant:

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

4) configurer votre application comme navigateur par défaut

Tout ce que nous avons fait jusqu'à présent, comme dit le système d'exploitation que votre application est un navigateur, il nous faut maintenant en faire le navigateur par défaut.

Nous avons eu à utiliser les Services de Lancement de l'API pour ce faire. Dans ce cas, nous avons de la configuration de notre application par défaut rôle de gestionnaire pour le HTTP et le HTTPS liens:

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

(Il est probablement préférable de demander l'autorisation de l'utilisateur avant de changer leur navigateur par défaut.)

Personnalisé schémas d'URL

Il est intéressant de noter que vous pouvez également utiliser ces étapes pour gérer vos propres schémas d'URL. Si vous êtes en train de créer une URL personnalisée régime c'est une bonne idée à la base de votre application identifiant de lot pour éviter les collisions avec d'autres applications. Donc, si votre ID est - com.example.MyApp vous devriez envisager d'utiliser x-com-example-myapp:// d'Url.

2voto

tomwhipple Points 1669

Il convient de noter qu'à l'étape 3 ci-dessus, l'enregistrement du gestionnaire d'événements doit se produire dans init (ou similaire). Cela ne fonctionnera PAS s'il est placé dans applicationDidFinishLaunching:

2voto

Raphael Schweikert Points 6380

Si vous souhaitez simplement modifier l'application d'assistance par défaut pour http (s), vous pouvez le faire dans les préférences de Safari. Vous y trouverez un menu déroulant qui vous permettra de sélectionner toutes les applications de gestionnaire enregistrées pour http. Pour que l'application se définisse automatiquement comme navigateur par défaut, consultez les instructions précédentes.

1voto

Fabio Russo Points 337

J'ai trouvé ce tutoriel vraiment utile. Il utilise une approche de script. Très facile à mettre en œuvre et c'est le seul qui a vraiment fait le boulot pour moi:

http://www.xmldatabases.org/WK/blog/1154_Handling_URL_schemes_in_Cocoa.item

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X