5

Quindi sto cercando di implementare collegamenti di app in alcune nuove app e ho letto abbastanza bene attraverso le note di sviluppo, l'installazione di un server, aggiunto il file con l'intestazione json corretta e costruito un'app di prova. L'app deep linking introdotta in Android M sembra funzionare se mi mando un email con i link allegati, ma quando lo faccio su una pagina di esempio in chrome, si ricarica la pagina. Sto solo premendo la pagina principale sul mio server web. (https://www.EXAMPLE.com). Inizialmente avevo alcuni problemi con il cromo sul mio tablet ma ho aggiunto il certificato di root e ora viene visualizzato verdeAndroid M - Collegamento di app non funzionante in Chrome

Sto usando un Nexus 7 2013, appena cancellato e con Android M e Chrome, aggiornato.

Sto servendo un file HTML sul mio server (come sarebbe se avessi una pagina di riserva).

Qualsiasi idea se questo è il modo in cui sto usando la pagina Web/ripiego, o se ho configurato qualcosa di sbagliato. Funziona in modo bello in Gmail, nessun selettore di attività, ma non in chrome.

Ho provato a mescolare alcuni esempi. Html sembra così e nessuno ha funzionato.

<a href="EXAMPLE://">Click HERE for schema</a> 

<a href="https://www.EXAMPLE.com/">Click HERE for url with slash</a> 

<a href="https://www.EXAMPLE.com">Click HERE for url, no slash</a> 

<a href="#" onclick="window.location('https://www.EXAMPLE.com/')">Trying with onclick javascript</a> 

mio manifest di Android:

<activity 
     android:name=".deepActivity" 
     android:label="@string/title_activity_deep" > 
     <intent-filter android:autoVerify="true"> 

      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 

      <data android:scheme="http" android:host="www.EXAMPLE.com" /> 
      <data android:scheme="https" android:host="www.MYDOMAIN.com" /> 

      <!-- note that the leading "/" is required for pathPrefix--> 
      <!-- Accepts URIs that begin with "example://gizmos”--> 

     </intent-filter> 

https://developer.android.com/training/app-links/index.html

edit:

Ho testato l'auto-verifico con il seguente comando:

adb shell dumpsys package d | grep DOMAIN -ab5 

e ottenere i risultati:

230: Package: com.DOMAIN.deeplinkingtest 
275: Domains: www.DOMAIN.com 
308- Status: undefined 

dalla documentazione

mostra la corrente di collegamento di gestione impostazione di questa applicazione. Un'app che ha superato la verifica e il cui manifest contiene Android: autoVerify = "true", mostra uno stato di sempre. Il numero esadecimale dopo questo stato è correlato al record del sistema Android delle preferenze di collegamento dell'app dell'utente. Questo valore non indica se la verifica è riuscita.

risposta

0

Aggiungi tag HTML come indicato di seguito nel tuo sito web. <a href="http://domain.com" data-applink="domain.com">Link</a>

AndroidManifest.xml

`

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

<intent-filter>     
    <data android:scheme="http" />  
    <!-- or you can use deep linking like -->    

    <data android:scheme="http" android:host="domain.com"/> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <category android:name="android.intent.category.DEFAULT"/> 

</intent-filter> 

`

+0

Ho provato ad aggiungere l'applink di dati, questo sembra che sia per un'estensione di Jquery? Ho provato in una moltitudine di diverse varianti con e senza il www. nel dominio, con e senza barre finali, sia in html che in manifest ma ancora niente da Chrome. –

0

... ma quando lo faccio su una pagina di esempio in cromo, ricaricata solo il pagina

Immagino tu intenda che stai solo andando su Chrome e digitando https://example.com nella barra del browser.

Sfortunatamente, il collegamento delle app non funzionerà se si digita un URL nella barra del browser.Questo potrebbe sembrare frustrante, ma c'è una buona ragione per cui questo non dovrebbe funzionare. Come, Google Dev avvocato spiega Paul Kinlan che sarebbe stata una cattiva esperienza utente:

Se un utente immette un URL nella barra degli indirizzi del sistema, allora la intenzione dell'utente è quello di visitare la pagina in questione . Noi non crediamo che l'utente intendesse andare all'app. Ergo, reindirizzare l'utente all'app è un'esperienza utente scadente.

link

Questa risposta si riferisce solo alle digitando l'URL nella barra degli indirizzi di Chrome. Ma lo stesso vale (soprattutto) se l'utente fa clic su un collegamento in una pagina Web. Indichiamo perché le cose non funzionano con ciascuno dei tuoi link di esempio. Comincerò con al centro due:

<a href="https://www.EXAMPLE.com/">Click HERE for url with slash</a>

<a href="https://www.EXAMPLE.com">Click HERE for url, no slash</a>

Per questi collegamenti per avviare l'applicazione, Chrome avrebbe dovuto inviare un'intento al sistema con action.VIEW, category.DEFAULT **, category.BROWSABLE, e schema http o https. È possibile creare un filtro intento che avrebbe raggiunto questo intento (il filtro intento App collegamento funzionerà):

<intent-filter android:autoVerify="true"> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data android:scheme="http"/> 
    <data android:scheme="https"/> 
    <data android:host="www.example.com"/> 
</intent-filter> 

Se si controlla i log (o semplicemente testare come si deve) si può vedere che Chrome non lo fa licenziare un intento. Scelgono di gestire quel collegamento internamente (navigando verso una nuova pagina). Questa è una funzione di Chrome, non di Android. Non c'è modo di cambiarlo. Tuttavia, puoi specificare uno schema personalizzato nell'URL che Chrome rispetterà. Questo mi porta al primo URL:

<a href="EXAMPLE://">Click HERE for schema</a>

Chrome rispetterà il regime in questo URL e sparare un intento: action.VIEW, category.DEFAULT **, category.BROWSABLE, e lo schema EXAMPLE. A seconda del modo in cui hai l'impostazione del/i tuo/i filtro/i intenzionale/i, verrà avviata la tua applicazione. Il tuo primo impulso potrebbe essere quella di aggiungere lo schema EXAMPLE al filtro intento App Linking:

<intent-filter android:autoVerify="true"> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data android:scheme="http"/> 
    <data android:scheme="https"/> 
    <data android:scheme="EXAMPLE"/> 
    <data android:host="www.example.com"/> 
</intent-filter> 

Questo vi permetterà di fare clic su un collegamento in Chrome e Chrome hanno aperto la vostra applicazione. Tuttavia, interromperà ora il collegamento delle app. La soluzione pro è di lasciare il vostro filtro intento App Linking invariato, e aggiungere un secondo filtro intento di catturare la vostra combinazione personalizzata:

<!-- EXAMPLE scheme intent filter --> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data android:scheme="EXAMPLE"/> 
    <data android:host="www.example.com"/> 
</intent-filter> 

<!-- App Linking intent filter --> 
<intent-filter android:autoVerify="true"> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data android:scheme="http"/> 
    <data android:scheme="https"/> 
    <data android:host="www.example.com"/> 
</intent-filter> 

Questo è probabilmente TMI, ma arrivare alla radice aiuta a capire perché le cose stanno funzionando/non funziona.

** ricorda che il sistema aggiungerà category.DEFAULT a qualsiasi intento implicito.

============================================

AGGIORNAMENTO: Devo aggiungere che usare il proprio schema è una cattiva pratica.Un approccio completamente migliore è documentato here

Problemi correlati