Lancement de l'application android personnalisée à partir du navigateur android
est-ce que quelqu'un peut s'il vous plaît me guider sur la façon de lancer mon application android à partir du navigateur android?
15 réponses
utilisez un <intent-filter>
avec un élément <data>
. Par exemple, pour gérer tous les liens vers twitter.com vous mettriez ça dans votre <activity>
dans votre AndroidManifest.xml
:
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
ensuite, lorsque l'utilisateur clique sur un lien vers twitter dans le navigateur, il lui sera demandé quelle application utiliser afin de compléter l'action: le navigateur ou votre application.
bien sûr, si vous souhaitez fournir une intégration étroite entre votre site web et votre application, vous pouvez définir votre propre jeu:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
alors, dans votre application web vous pouvez mettre des liens comme:
<a href="my.special.scheme://other/parameters/here">
Et lorsque l'utilisateur clique dessus, votre application sera lancée automatiquement (car il sera probablement le seul qui peut gérer my.special.scheme://
type d'uri). Le seul inconvénient est que si l'utilisateur ne dispose pas de l'application installée, ils ont une fâcheuse erreur. Et je ne suis pas sûr qu'il y ait un moyen de vérifier.
modifier: pour répondre à votre question, vous pouvez utiliser getIntent().getData()
qui renvoie un Uri
objet. Vous pouvez ensuite utiliser Uri.*
méthodes pour extraire les données dont vous avez besoin. Par exemple, disons que l'Utilisateur a cliqué sur un lien vers http://twitter.com/status/1234
:
Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"
vous pouvez faire ce qui précède n'importe où dans votre Activity
, mais vous allez probablement vouloir le faire dans onCreate()
. Vous pouvez également utiliser params.size()
pour obtenir le nombre de segments de tracé dans la Uri
. Consultez javadoc ou le site Web android developer pour d'autres méthodes Uri
que vous pouvez utiliser pour extraire des pièces spécifiques.
S'il vous plaît voir mon commentaire ici: faire un lien dans le navigateur Android démarrer mon application?
nous décourageons fortement les gens d'utiliser leurs propres plans, à moins qu'ils ne définissent un nouveau plan internet mondial.
toutes les réponses ci-dessus n'ont pas fonctionné pour moi avec CHROME
en date du 28 janvier 2014
mon application lancée correctement à partir de http://example.com/someresource / liens à partir d'applications comme hangouts, gmail, etc mais pas à partir de chrome browser.
pour résoudre cela, pour qu'il se lance correctement à partir de CHROME, vous devez définir le filtre intention comme ceci
<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="example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
<data
android:host="www.example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
</intent-filter>
note l'élément pathPrefix
151940920"
votre application apparaîtra maintenant dans activity picker chaque fois que l'utilisateur demande http://example.com/someresource/ modèle de navigateur chrome en cliquant sur un lien des résultats de recherche google ou de tout autre site web""
dans mon cas, j'ai dû définir deux catégories pour le <intent-filter>
et puis il a fonctionné:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
par exemple, vous avez des choses suivantes:
un lien pour ouvrir votre application: http://example.com
le nom du paquet de votre application: com.exemple.mypackage
ensuite, vous devez faire le suivant:
1) Ajouter un filtre d'intention à votre Activité (Peut être n'importe quelle activité que vous voulez. Pour plus d'informations, consultez la documentation ).
<activity
android:name=".MainActivity">
<intent-filter android:label="@string/filter_title_view_app_from_web">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://example.com" -->
<data
android:host="example.com"
android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2) Créez un fichier HTML pour tester le lien ou utilisez cette méthode.
<a href="intent://example.com#Intent;scheme=http;package=com.example.mypackage;end">Open your Activity directly (just open your Activity, without a choosing dialog). </a>
<a href="http://example.com">Open this link with browser or your programm (by choosing dialog).</a>
3) Utilisez Mobile Chrome pour tester
4) C'est ça.
et il n'est pas nécessaire de publier app sur le marché pour tester deep linking=)
aussi, pour plus d'informations, cochez documentation et utile présentation .
il devrait également y avoir <category android:name="android.intent.category.BROWSABLE"/>
ajouté au filtre d'intention pour faire reconnaître l'activité correctement à partir du lien.
le lien suivant donne des informations sur le lancement de l'application (si elle est installée) directement à partir du navigateur. Sinon, il ouvre directement l'application dans la boutique play de sorte que l'utilisateur peut télécharger sans difficulté.
Oui, Chrome recherche au lieu de chercher scheme. Si vous voulez lancer votre application via URI scheme, utilisez cette application utilitaire cool sur le Play store. Il a sauvé ma journée :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
s'il vous plaît noter si votre icône disparaît du lanceur android lorsque vous mettez en œuvre cette fonctionnalité, que vous avez à Split intention-filtre.
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</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="your-own-uri" />
</intent-filter>
</activity>
Felix approche à la gestion des liens profonds est typique de l'approche à la gestion des liens profonds. Je suggère également de vérifier cette bibliothèque pour gérer le routage et l'analyse de vos liens profonds:
https://github.com/airbnb/DeepLinkDispatch
vous pouvez utiliser des annotations pour enregistrer votre activité pour un URI lien profond particulier, et il va extraire les paramètres pour vous sans avoir à faire la rigmarole habituelle de obtenir les segments de chemin, l'assortir, etc. Vous pourriez simplement annoter et activité comme ceci:
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
J'ai la solution. Je n'ai pas de définir la catégorie comme "par Défaut". J'utilisais aussi l'activité principale pour les données d'intention. Maintenant j'utilise une activité différente pour les données d'intention. Merci pour l'aide. :)
vous devez ajouter un pseudo-nom d'hôte à la CALLBACK_URL 'app://' n'a pas de sens en tant qu'URL et ne peut pas être analysé.
exemple.php:
<?php
if(!isset($_GET['app_link'])){ ?>
<iframe src="example.php?app_link=YourApp://blabla" style="display:none;" scrolling="no" frameborder="0"></iframe>
<iframe src="example.php?full_link=http://play.google.com/xyz" style="display:none;" scrolling="no" frameborder="0"></iframe>
<?php
}
else { ?>
<script type="text/javascript">
self.window.location = '<?php echo $_GET['app_link'];?>';
window.parent.location.href = '<?php echo $_GET['full_link'];?>';
</script>
<?php
}
Xamarin port de Felix 's answer
dans votre MainActivity
, ajoutez ceci ( docs: Android.App.Classe IntentFilterAttribute ):
....
[IntentFilter(new[] {
Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
....
Xamarin ajoutera ce qui suit dans le AndroidManifest.xml
pour vous:
<activity android:label="Something" android:screenOrientation="portrait" android:theme="@style/MyTheme" android:name="blahblahblah.MainActivity">
<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="my.special.scheme" />
</intent-filter>
</activity>
et dans le but d'obtenir des params ( j'ai testé en termes D'activité principale ):
var data = Intent.Data;
if (data != null)
{
var scheme = data.Scheme;
var host = data.Host;
var args = data.PathSegments;
if (args.Count > 0)
{
var first = args[0];
var second = args[1];
...
}
}
pour autant que je sache, ci-dessus peut être ajouté dans n'importe quelle activité ,non seulement activité principale
Look @JRuns réponse dans ici . L'idée est de créer du html avec votre modèle personnalisé et de le télécharger quelque part. Ensuite, si vous cliquez sur votre lien personnalisé sur votre html-fichier, vous serez redirigé vers votre application. J'ai utilisé cet "article 151930920" pour android. Mais n'oubliez pas de définir le nom complet Name = "MyApp.Mobile.Droid.MainActivity"
attribut à votre activité cible.