Condividi tramite


Come ricevere un collegamento (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

I link sono un tipo di dati comune che viene spesso condiviso dagli utenti. Talvolta gli utenti condividono i link direttamente, come nel caso di un articolo in un sito Web. Il supporto dei link può rivelarsi un'utile opzione secondaria quando gli utenti condividono HTML o contenuti che potrebbero essere disponibili online.

Questo argomento spiega come ricevere un singolo link condiviso da un'app di origine.

Cosa sapere

Tecnologie

Prerequisiti

  • Occorre avere già familiarità con Visual Studio e i modelli associati.
  • Occorre avere già familiarità con JavaScript.

Istruzioni

Passaggio 1: Supporto del contratto Condivisione

Per consentire all'app di ricevere contenuto condiviso, devi dichiarare che supporta il contratto Condivisione, grazie al quale il sistema sa che l'app è disponibile a ricevere contenuto. Se usi un modello di Microsoft Visual Studio per creare la tua app, ecco come puoi supportare il contratto Condivisione:

  1. Apri il file manifesto (package.manifest) nella visualizzazione di progettazione.
  2. Apri la scheda Dichiarazioni.
  3. Scegli Condivisione destinazione dall'elenco Dichiarazioni disponibili.
  4. Fai clic su Aggiungi per aggiungere il supporto del contratto Condivisione destinazione nella tua app.

Per supportare i link, devi specificare che l'app supporta il formato URI:

  1. Apri il file manifesto.
  2. Nella sezione Formati dati fai clic su Aggiungi nuovo.
  3. Digita "testo" (senza le virgolette).

I passaggi precedenti consentono di aggiungere al manifesto la sezione seguente:

<Extensions>
  <Extension Category="windows.shareTarget">
    <ShareTarget>
      <DataFormat>uri</DataFormat>
    </ShareTarget>
  </Extension>
</Extensions>

Nota  Puoi specificare un diverso punto di ingresso quando la tua app è attivata per il contratto Condivisione destinazione. A questo scopo, modifica la voce del punto di ingresso della pagina Start nella sezione delle impostazioni App della dichiarazione Condivisione destinazione nel manifesto del pacchetto. Consigliamo vivamente di usare anche un file JavaScript separato per gestire l'attivazione di questa pagina. Per un approfondimento, vedi l'esempio di app di destinazione per la condivisione di contenuto.

 

Passaggio 3: Aggiungere un gestore eventi per rilevare quando viene attivata l'app

Il sistema attiva l'app quando un utente la seleziona per condividere il contenuto. Poiché l'app può essere attivata in svariati modi, devi aggiungere il codice per rilevare il motivo dell'attivazione. Per farlo, controlla il valore della proprietà kind.

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        // The application has been launched. Initialize as appropriate.
    } else if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.shareTarget) {
        ...
    }
};

Se usi una pagina di avvio dedicata per il contratto Condivisione destinazione, puoi evitare di controllare la proprietà kind.

Passaggio 4: Recuperare l'oggetto ShareOperation

L'oggetto ShareOperation contiene tutti i dati necessari per consentire all'app di recuperare il contenuto che un utente vuole condividere.

shareOperation = args.detail.shareOperation;

Passaggio 5: Ritornare rapidamente dal gestore eventi attivato.

Il gestore eventi activated deve ritornare rapidamente. Aggiungere in coda un evento asincrono dal gestore eventi activated, di modo che l'elaborazione dei dati condivisi avvenga al ritorno del gestore eventi.

WinJS.Application.addEventListener("shareready", shareReady, false);
WinJS.Application.queueEvent({ type: "shareready" });

I passaggi rimanenti implementano la funzione shareReady.

Passaggio 6: Verificare se DataPackageView contiene un URI

L'oggetto ShareOperation contiene un oggetto DataPackageView. Questo oggetto è una versione di sola lettura dell'oggetto DataPackage usato dall'app di origine per creare i dati. Usa questo oggetto per verificare se il contenuto condiviso contiene un link.

if (shareOperation.data.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.uri)) {
    // Code to process URI goes here.
}

È buona regola controllare che il DataPackage contenga il formato di dati in cui sei interessato, anche se la tua app supporta solo un formato. In tal modo sarà più semplice in seguito supportare altri tipi e formati di dati e formati di file.

Per recuperare l'URI, chiama il metodo DataPackageView.getUriAsync.

shareOperation.data.getUriAsync().then(function (uri) {
    if (uri != null) {
        // In this sample, we only display the URI. To output the link using this example, 
        // you need a div tag with an id of "output" in your HTML file.
        // In your app, replace this with whatever is appropriate for your scenario.
        document.getElementById("output").innerText = uri.absoluteUri;
    }
});

Passaggio 8: Chiamare reportCompleted

Dopo che l'app ha finito di condividere correttamente il contenuto, chiama reportCompleted. Dopo aver chiamato questo metodo, il sistema chiude l'app.

shareOperation.reportCompleted();

Osservazioni

Alcune app possono fornire URI (Uniform Resource Identifier) che non iniziano con http:// o con https://. Ad esempio, un'app di origine potrebbe fornire un protocollo di attivazione che porta direttamente un utente a un contenuto dell'app stessa. Se la tua app supporta già tutti gli URI, questa funzionalità è inclusa per impostazione predefinita. Se la tua app supporta invece solo alcuni tipi di URI, dovresti considerare gli aspetti seguenti:

  • Se l'HTML è supportato, usa invece il codice HTML contenuto nel DataPackage.
  • Se l'HTML non è supportato, ma il testo sì, usa il testo nel DataPackage.
  • Se nessuna di queste due opzioni funziona, potresti visualizzare un messaggio per comunicare all'utente che l'URI specifico non è supportato.

In ogni caso, prova a incorporare il titolo e la descrizione dei dati nella tua esperienza, in modo da fornire all'utente più contesto su cosa viene condiviso.

Per vedere l'intera esperienza end-to-end di un'app che riceve un'immagine come parte della condivisione, esamina il codice dell'esempio di app di destinazione per la condivisione di contenuto.

Esempio completo

var shareOperation = null;

function shareReady(args) {
    if (shareOperation.data.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.uri)) {
        shareOperation.data.getUriAsync().done(function (uri) {
            // In this sample, we only display the URI. To output the link using this example, 
            // you need a div tag with an id of "output" in your HTML file.
            // In your app, replace this with whatever is appropriate for your scenario.
            document.getElementById("output").innerText = "Uri: " + uri.absoluteUri;
        });
    }
}

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        // The app was launced. Initialize as appropriate.
        args.setPromise(WinJS.UI.processAll());
    } else if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.shareTarget) {
        // This app was been activated for the Share contract
        args.setPromise(WinJS.UI.processAll());

        // We receive the ShareOperation object as part of the eventArgs
        shareOperation = args.detail.shareOperation;


        // We queue an asychronous event so that working with the ShareOperation 
        // object does not block or delay the return of the activation handler.
        WinJS.Application.addEventListener("shareready", shareReady, false);
        WinJS.Application.queueEvent({ type: "shareready" });
    }
};

Argomenti correlati

Esempio di app di destinazione per la condivisione di contenuto

Condivisione e scambio di dati

Come ricevere file

Come ricevere codice HTML

Come ricevere testo

Guida introduttiva: Ricezione di contenuto condiviso

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share

Linee guida per il debug delle app di destinazione