web-dev-qa-db-fra.com

Comment accéder et transmettre des paramètres aux modules d'une application instantanée Android

Avec les applications installées normales, il est possible d’utiliser la technique de Lien profond afin non seulement d'ouvrir une application spécifique à partir d'une URL, mais également de la rediriger vers une section/fonction spécifique telle qu'une publication Facebook ou des coordonnées spécifiques sur une carte.

Depuis que j'ai lu qu'avec Instant Apps, cela ne serait pas possible car les liens pointent déjà vers le module spécifique à télécharger et à exécuter, comment serait-il possible d'accéder non seulement audit module, mais également de lui transmettre certains paramètres?

Par exemple:

C’est le lien à partir duquel le module en lecture seule de mon application cartographique sera téléchargé: "www.myinstantappexample.com/onlyviewmap"

Si je veux qu'il pointe vers un ensemble spécifique de coordonnées, comment le lien sera-t-il composé? Ce sera-t-il comme ceci: "www.myinstantappexample.com/onlyviewmap/?x=0.000&y=0.000"?

D'après ce que j'ai pu trouver, Google ne couvre pas cet aspect et je n'arrive vraiment pas à comprendre.

7
Alec423

Applications instantanées et liens profonds

Instant Apps repose sur App Links pour fonctionner, et App Links ne sont qu'un type de lien profond. La liaison profonde est donc toujours possible pour les applications instantanées et est en fait absolument essentielle à leur fonctionnement. Cependant, les liens profonds entre schémas d'URI (qui sont encore très répandus dans les applications Android) sont pris en charge not.

La différence entre une application standard et une application instantanée réside dans le fait que l'appareil ne charge qu'une seule activité en réponse au lien de l'application sur lequel l'utilisateur clique, au lieu de télécharger le package complet via le Play Store. C'est une expérience plus transparente pour l'utilisateur, mais la technologie sous-jacente fonctionne de la même manière.

Passage de paramètres personnalisés

Si l'utilisateur clique sur une URL activée par les liens d'application, telle que http://www.myinstantappexample.com/onlyviewmap/?x=0.000&y=0.000, vous retrouverez l'intégralité de la chaîne dans l'application après son ouverture. Vous devrez analyser les variables x et y vous-même, mais elles seront disponibles. Quelque chose comme ça:

Uri data = this.getIntent().getData();
if (data != null && data.isHierarchical()) {
    String uri = this.getIntent().getDataString();
    Log.i("MyApp", "Deep link clicked " + uri);
}

Vous aurez juste besoin de manipuler la valeur uri pour trouver ce dont vous avez besoin.

Approche alternative aux paramètres personnalisés

Vous pouvez également utiliser Branch.io (divulgation complète: je fais partie de l’équipe de la branche) pour activer vos liens. Nous avons un support complet pour Instant Apps , et cela vous permet de travailler avec un format de données beaucoup plus convivial. Nous vous permettons de créer des liens comme celui-ci, pour contrôler chaque partie du comportement:

branch.link({
    tags: [ 'tag1', 'tag2' ],
    channel: 'facebook',
    feature: 'dashboard',
    stage: 'new user',
    data: {
        x: '0.000',
        y: '0.000',
        '$desktop_url': 'http://myappwebsite.com',
        '$ios_url': 'http://myappwebsite.com/ios',
        '$ipad_url': 'http://myappwebsite.com/ipad',
        '$Android_url': 'http://myappwebsite.com/Android',
        '$og_app_id': '12345',
        '$og_title': 'My App',
        '$og_description': 'My app\'s description.',
        '$og_image_url': 'http://myappwebsite.com/image.png'
    }
}, function(err, link) {
    console.log(err, link);
});

En retour, vous obtenez une URL telle que http://myappname.app.link/iDdkwZR5hx, puis dans l'application après avoir cliqué sur le lien, vous obtenez un résultat ressemblant à ceci:

{
    tags: [ 'tag1', 'tag2' ],
    channel: 'facebook',
    feature: 'dashboard',
    stage: 'new user',
    data: {
        x: '0.000',
        y: '0.000'
    }
}
1
Alex Bauer

Si je veux qu'il pointe vers un ensemble spécifique de coordonnées, comment le lien serait-il composé?

C'est à vous de choisir comment inclure toute information supplémentaire dans l'URL. Cela peut être via des paramètres d'URL ou dans le chemin lui-même. Par exemple.

https://www.myinstantappexample.com/location/2/user/5https://www.myinstantappexample.com/onlyviewmap/?x=1.2&y=3.4

Vous analysez ensuite l'URL dans la Activity de réception. La classe Uri inclut un certain nombre de méthodes d'assistance telles que getQueryParameter() et getPathSegments() pour faciliter cette opération.

Par exemple, pour analyser cette URL:

https://www.myinstantappexample.com/onlyviewmap/?x=1.2&y=3.4

Vous feriez quelque chose comme ceci dans votre Activity:

Uri uri = getIntent().getData();
String x;
String y;
if (data != null) {
  x = uri.getQueryParameter("x"); // x = "1.2"
  y = uri.getQueryParameter("y"); // y = "3.4"
}
if (x != null && y != null) {
  // do something interesting with x and y
}
10
AdamK

Pour ce faire, vous devez utiliser "l'assistant de liens d'application" dans Outils-> Assistant de liens d'application

Ensuite, vérifiez vos liens et, dans le sélecteur de chemin, vérifiez que l’option "pathPrefix" est sélectionnée.

Ensuite, au bas de la méthode OnCreate de votre activité (qui est liée au lien que vous avez récemment modifié), ajoutez ce code:

Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();
// then use appLinkData.getQueryParameter("YourParameter")

Vous pouvez tester et déboguer cela en utilisant l'option "editConfigurations", ouvrez simplement cette fenêtre et éditez votre module instantApp (celui qui a été lancé avec le lien récemment modifié) et ajoutez dans le champ URL les paramètres d'URL dont vous avez besoin. (puis lancez simplement ce module: D)

J'espère que cela vous sera utile.

2
Sebastian Corradi