Comment définir votre application Cocoa comme navigateur Web par défaut ?
-
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.).
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.