Comment définir votre application Cocoa comme navigateur Web par défaut ?

StackOverflow https://stackoverflow.com/questions/49510

  •  09-06-2019
  •  | 
  •  

Question

Comment définir votre application Cocoa comme navigateur Web par défaut ?

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

Était-ce utile?

La solution

Il y a quatre étapes pour créer une application pouvant servir de navigateur Web par défaut.Les trois premières étapes permettent à votre application d'agir en tant que gestionnaire de rôle pour les schémas d'URL pertinents (HTTP et HTTPS) et la dernière étape en fait le gestionnaire de rôle par défaut pour ces schémas.

1) Ajoutez les schémas d'URL que votre application peut gérer au fichier info.plist de votre application

Pour ajouter la prise en charge de http:// et https:// vous devrez ajouter ce qui suit au fichier info.plist de votre application.Cela indique au système d'exploitation que votre application est capable de gérer les URL HTTP et 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) Écrivez une méthode de gestionnaire d'URL

Cette méthode sera appelée par le système d'exploitation lorsqu'il souhaite utiliser votre application pour ouvrir une URL.Peu importe l'objet auquel vous ajoutez cette méthode, cela sera explicitement transmis au gestionnaire d'événements à l'étape suivante.La méthode du gestionnaire d'URL devrait ressembler à 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) Enregistrez la méthode du gestionnaire d'URL

Ensuite, indiquez au gestionnaire d'événements quel objet et quelle méthode appeler lorsqu'il souhaite utiliser votre application pour charger une URL.Dans le code ici, je suis passé self en tant que gestionnaire d'événements, en supposant que nous appelons setEventHandler du même objet qui définit le getUrl:withReplyEvent: méthode.

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

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

Certaines applications, y compris les premières versions d'Adobe AIR, utilisent l'alternative WWW!/OURL AppleEvent pour demander à une application d'ouvrir des URL. Par conséquent, pour être compatible avec ces applications, vous devez également ajouter les éléments suivants :

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

4) Définissez votre application comme navigateur par défaut

Tout ce que nous avons fait jusqu'à présent pour indiquer au système d'exploitation que votre application est un navigateur, maintenant nous devons y arriver le navigateur par défaut.

Nous devons utiliser l'API Launch Services pour ce faire.Dans ce cas, nous définissons notre application comme gestionnaire de rôle par défaut pour les liens HTTP et 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

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

Schémas d'URL personnalisés

Il convient de noter que vous pouvez également utiliser ces mêmes étapes pour gérer vos propres schémas d'URL personnalisés.Si vous créez un schéma d'URL personnalisé, c'est une bonne idée de le baser sur l'identifiant du bundle de votre application pour éviter les conflits avec d'autres applications.Donc, si votre identifiant de forfait est com.example.MyApp vous devriez envisager d'utiliser x-com-example-myapp:// URL.

Autres conseils

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 une liste déroulante 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top