2013-08-07 6 views
16

ho studiato attraverso la maggior parte del URL personalizzato schema Q & A e non ho ancora trovato la mia risposta possibile.Android come creare schema URL personalizzata con il dato formato myapp: // http: //

Voglio che la mia app venga avviata facendo clic su un determinato URL nel browser (qualsiasi sul dispositivo mobile), il fatto è che il mio URL non può essere modificato poiché serve anche l'app IOS e sembra che questo:

"myapp: // http://www.name.com/path/path2/"

non sono sicuro di come gestire "myapp: // http: //" e costruire un filtro intento corretta, e tutto ciò che ho provato non funziona. Qualsiasi aiuto sarà apprezzato, e se ho perso una risposta pertinente per favore tranne le mie scuse.

Questo è ciò che ho provato finora:

 <activity 
     android:name="com.myapp.test.SplashScreen" 
     android:exported="true" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

     <!-- Test for URL scheme --> 
     <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:host="www.name.com" 
       android:path="/path/path2/" 
       android:scheme="http" /> 
      <data 
       android:host="www.name.com" 
       android:path="/path/path2/" 
       android:scheme="https" /> 

      <data android:scheme="myapp" /> 
     </intent-filter> 
     <!-- End Test for URL scheme --> 
    </activity> 

Nota: Ho provato con/senza la esportato: vero

+2

Dal momento che non è una 'struttura Uri' valida, dubito fortemente che funzionerà. Sarà più semplice per te cambiare la tua app per iOS per utilizzare qualcosa che sia un URI valido. – CommonsWare

+0

@CommonsWare Ehi, grazie per il commento. Questo tipo di URI funziona sull'app IOS, riescono ad aprire l'app facendo clic su questo link. Pensi che ci possa essere solo uno schema come "myapp: //" OR "http: //"? – EviatarS

+1

"Pensi che ci possa essere solo uno schema come" myapp: // "OR" http: // "?" -- sì. Nel migliore dei casi, se sei fortunato, 'http: //' verrebbe trattato come l'host. Nel peggiore dei casi, il tuo 'Uri' semplicemente fallirà nell'analisi. E posso pensare ad alcune altre opzioni. C'è assolutamente solo uno schema in un 'Uri' - la classe' Uri' non ne consente più di uno. – CommonsWare

risposta

11

Come CommonsWare detto l'URI su cui avevo bisogno per creare uno schema non è un URI valido, quindi lo schema non ha funzionato e l'applicazione non è stata avviata. Dopo questa spiegazione i ragazzi del lato server sono stati convinti di cambiare l'URI in myapp: // ... e ha funzionato come per magia :).

L'Attività assomiglia a questo ora:

<activity 
    android:name="com.myapp.test.SplashScreen" 
    android:exported="true" 
    android:label="@string/app_name" 
    android:screenOrientation="portrait" 
    android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

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

    <!-- Test for URL scheme --> 
    <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="myapp" /> 
    </intent-filter> 
    <!-- End Test for URL scheme --> 
</activity> 
+0

Sembra semplice processo, tuttavia, non funziona con me –

+0

@MazenKasser hey, come appare il tuo schema? forse posso aiutarti se postare qui – EviatarS

+0

grazie, ho ottenuto che funziona, perché non stavo cercando il formato completo "myapp: //mydomain.com/" e anche scoperto che non tutte le applicazioni lettore QR o il browser internet mobile fa il DeepLinking ... –

1

Questo è un abuso del regime URI e non è valido. L'URL HTTP che si desidera passare è un pezzo di dati e deve quindi essere inviato nella stringa di query.

myapp://somehost/action?url=http%3A%2F%2Fwww.name.com%2Fpath%2Fpath2%2F 
+0

Ha dichiarato che il suo "URL dato non può essere modificato poiché serve anche l'app IOS" – Bobby

+0

L'ha già modificato. – Monstieur

-1

è necessario utilizzare un collegamento ipertestuale per avviare l'applicazione. per esempio, si imposta schema = "yourpackagename", è necessario impostare un collegamento ipertestuale in questo modo: yourpackagename: // host, e si dovrebbe vist il collegamento ipertestuale sul tuo browser moble .Se non si dispone di etichetta ospite, basta rimuoverlo.

<!-- Test for URL scheme --> 
<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:host="host" android:scheme="yourpackagename" /> 
</intent-filter> 
<!-- End Test for URL scheme --> 

Se la vostra attività ha più di un regime, è necessario utilizzare 2 o più specificarlo

+0

'android: host =" "' genera un errore: "android: host non può essere vuoto" –

+0

grazie per il tuo commento, in studio basta rimuovere questo codice // android: host = "" se non hai bisogno di "host" – Yachao