Domanda

Come imposti la tua applicazione Cocoa come browser Web predefinito?

Desidero creare un'applicazione che venga avviata per impostazione predefinita quando l'utente fa clic su un collegamento HTTP o HTTPS in altre applicazioni (Mail, iChat ecc.).

È stato utile?

Soluzione

Esistono quattro passaggi per creare un'app che possa fungere da browser Web predefinito.I primi tre passaggi consentono alla tua app di fungere da gestore di ruoli per gli schemi URL pertinenti (HTTP e HTTPS) e il passaggio finale la rende il gestore di ruoli predefinito per tali schemi.

1) Aggiungi gli schemi URL che la tua app può gestire al file info.plist della tua applicazione

Per aggiungere supporto per http:// E https:// dovresti aggiungere quanto segue al file info.plist della tua applicazione.Ciò indica al sistema operativo che la tua applicazione è in grado di gestire URL HTTP e 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) Scrivere un metodo di gestione dell'URL

Questo metodo verrà chiamato dal sistema operativo quando desidera utilizzare l'applicazione per aprire un URL.Non importa a quale oggetto aggiungi questo metodo, verrà passato esplicitamente al Gestore eventi nel passaggio successivo.Il metodo del gestore URL dovrebbe assomigliare a questo:

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

  //TODO: Your custom URL handling code here
}

3) Registrare il metodo del gestore URL

Successivamente, indica al gestore eventi quale oggetto e metodo chiamare quando desidera utilizzare la tua app per caricare un URL.Nel codice qui sono passato self come gestore di eventi, presupponendo che stiamo chiamando setEventHandler dallo stesso oggetto che definisce il getUrl:withReplyEvent: metodo.

Dovresti aggiungere questo codice da qualche parte nel codice di inizializzazione della tua applicazione.

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

Alcune applicazioni, incluse le prime versioni di Adobe AIR, utilizzano l'alternativa WWW!/OURL AppleEvent per richiedere che un'applicazione apra gli URL, quindi per essere compatibile con tali applicazioni dovresti aggiungere anche quanto segue:

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

4) Imposta la tua app come browser predefinito

Tutto ciò che abbiamo fatto finora ha detto al sistema operativo che la tua applicazione è un navigatore, ora dobbiamo farlo il browser predefinito.

Dobbiamo utilizzare l'API Launch Services per farlo.In questo caso stiamo impostando la nostra app come gestore di ruoli predefinito per i collegamenti HTTP e 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

(Probabilmente è meglio chiedere il permesso all'utente prima di modificare il browser predefinito.)

Schemi URL personalizzati

Vale la pena notare che puoi anche utilizzare gli stessi passaggi per gestire i tuoi schemi URL personalizzati.Se stai creando uno schema URL personalizzato è una buona idea basarlo sull'identificatore del bundle della tua app per evitare conflitti con altre app.Quindi, se l'ID del tuo pacchetto è com.example.MyApp dovresti considerare l'utilizzo x-com-example-myapp:// URL.

Altri suggerimenti

Se desideri semplicemente modificare l'app di supporto predefinita per http(s), puoi farlo nelle preferenze di Safari.Lì troverai un menu a discesa che ti consentirà di selezionare tutte le applicazioni di gestione registrate per http.Per impostare automaticamente l'app come browser predefinito vedere le istruzioni precedenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top