Quelqu'un peut-il me guider sur la façon de lancer mon application Android à partir du navigateur Android?
Quelqu'un peut-il me guider sur la façon de lancer mon application Android à partir du navigateur Android?
Réponses:
Utilisez un <intent-filter>
avec un <data>
élément. Par exemple, pour gérer tous les liens vers twitter.com, vous devez mettre cela <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 pour mener à bien l'action: le navigateur ou votre application.
Bien sûr, si vous souhaitez assurer une intégration étroite entre votre site Web et votre application, vous pouvez définir votre propre schéma:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Ensuite, 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 elle sera probablement la seule à pouvoir gérer le my.special.scheme://
type d'uris). Le seul inconvénient est que si l'utilisateur n'a pas installé l'application, il obtiendra une erreur désagréable. Et je ne suis pas sûr qu'il existe un moyen de vérifier.
Modifier: Pour répondre à votre question, vous pouvez utiliser getIntent().getData()
ce qui renvoie un Uri
objet. Vous pouvez ensuite utiliser des Uri.*
méthodes pour extraire les données dont vous avez besoin. Par exemple, supposons que l'utilisateur ait cliqué sur un lien pour 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 voudrez probablement le faire onCreate()
. Vous pouvez également utiliser params.size()
pour obtenir le nombre de segments de chemin dans le Uri
. Consultez javadoc ou le site Web des développeurs Android pour d'autres Uri
méthodes que vous pouvez utiliser pour extraire des parties spécifiques.
android:exported="true"
à leur Activity
manifeste. Cochez cette réponse stackoverflow.com/a/13044911/1276636
Toutes les réponses ci-dessus ne fonctionnaient pas pour moi au CHROME
28 janvier 2014
mon application a été lancée correctement à partir de http://example.com/someresource/ des liens depuis des applications telles que Hangouts, Gmail, etc., mais pas depuis le navigateur Chrome.
pour résoudre ce problème, afin qu'il démarre correctement à partir de CHROME, vous devez définir un filtre d'intention comme celui-ci
<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>
noter l' pathPrefix
élément
votre application apparaîtra désormais dans le sélecteur d'activité chaque fois que l'utilisateur demande un http://example.com/someresource/ modèle à partir du navigateur Chrome en cliquant sur un lien à partir des résultats de recherche Google ou de tout autre site Web
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 schémas, à moins qu'ils ne définissent un nouveau schéma Internet mondial.
Dans mon cas, j'ai dû définir deux catégories pour le <intent-filter>
puis cela 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 package de votre application: com.example.mypackage
Ensuite, vous devez faire ensuite:
1) Ajoutez un filtre d'intention à votre activité (il peut s'agir de n'importe quelle activité. 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 ces méthodes.
<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 tout.
Et il n'est pas nécessaire de publier une application sur le marché pour tester le lien profond =)
De plus, pour plus d'informations, consultez la documentation et la présentation utile .
Il devrait également être <category android:name="android.intent.category.BROWSABLE"/>
ajouté au filtre d'intention pour que l'activité soit correctement reconnue à partir du lien.
Le lien suivant donne des informations sur le lancement de l'application (si installée) directement depuis le navigateur. Sinon, il ouvre directement l'application dans le Play Store afin que l'utilisateur puisse télécharger en toute transparence.
Veuillez noter que si votre icône disparaît du lanceur Android lorsque vous implémentez cette fonctionnalité, vous devez diviser le filtre d'intention.
<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>
Oui, Chrome recherche au lieu de rechercher un schéma. Si vous souhaitez lancer votre application via le schéma d'URI, utilisez cette application utilitaire cool sur le Play Store. Cela m'a sauvé la journée :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
Port Xamarin de Felix 's answer
Dans votre MainActivity
, ajoutez ceci ( docs: Android.App.IntentFilterAttribute Class ):
....
[IntentFilter(new[] {
Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
....
Xamarin ajoutera les éléments suivants AndroidManifest.xml
pour vous:
<activity
android:label="Something"
android:screenOrientation="portrait"
android:theme="@style/MyTheme"
android:name="blah.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 pour obtenir des paramètres ( j'ai testé dans OnCreate of MainActivity ):
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, ce qui précède peut être ajouté dans n'importe quelle activité, non seulement MainActivity
Remarques:
OnCreate
événement de l'application MainLauncher Activity
sera à nouveau déclenché.<a href="my.special.scheme://host/arg1/arg2">
en - dessus dernière valeurs extrait de code , sont les suivants:scheme: my.special.scheme
host: host
args: ["arg1", "arg2"]
first: arg1
second: arg2
Mise à jour: si Android crée une nouvelle instance de votre application, vous devez android:launchMode="singleTask"
également l' ajouter .
L'approche de Felix pour gérer les liens profonds est l'approche typique de la gestion des liens profonds. Je suggère également de consulter 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 de lien profond particulier, et il extraira les paramètres pour vous sans avoir à faire le rigmarole habituel pour obtenir les segments de chemin, les faire correspondre, etc. Vous pouvez simplement annoter et effectuer une activité comme celle-ci :
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
Hé, j'ai la solution. Je n'ai pas défini la catégorie comme "Par défaut". J'utilisais également 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 à l'application CALLBACK_URL 'app: //' n'a pas de sens en tant qu'URL et ne peut pas être analysé.
example.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
}
Regardez la réponse de @JRuns ici . L'idée est de créer du HTML avec votre schéma personnalisé et de le télécharger quelque part. Ensuite, si vous cliquez sur votre lien personnalisé dans votre fichier html, vous serez redirigé vers votre application. J'ai utilisé cet article pour Android. Mais n'oubliez pas de définir l' Name = "MyApp.Mobile.Droid.MainActivity"
attribut de nom complet pour votre activité cible.
Au 15/06/2019
ce que j'ai fait est d'inclure les quatre possibilités pour ouvrir l'url.
c'est-à-dire avec http
/ https
et 2 avec www
en préfixe et 2 sanswww
et en utilisant cela, mon application se lance automatiquement maintenant sans me demander de choisir un navigateur et une autre option.
<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="https" android:host="example.in" />
<data android:scheme="https" android:host="www.example.in" />
<data android:scheme="http" android:host="example.in" />
<data android:scheme="http" android:host="www.example.in" />
</intent-filter>