web-dev-qa-db-fra.com

Android Lien profond: utilisez le même lien pour l'application et le magasin de jeu.)

J'ai un site Web qui permet à l'utilisateur de faire une requête de recherche. La requête peut prendre un certain temps (quelques minutes à quelques jours) et je voudrais permettre à l'utilisateur de télécharger une application Android) et de recevoir la réponse à cette adresse en envoyant un courrier électronique avec un lien vers l'utilisateur.

J'aimerais que ce mécanisme fonctionne que l'utilisateur ait l'application installée ou non; en d'autres termes:

  • Si l'utilisateur dispose de l'application, celle-ci doit être ouverte avec lien profond qui contient un argument d'identification.
  • Si l'utilisateur ne l'a pas, ouvrez le Play Store sur la page de l'application (par exemple, https://play.google.com/store/apps/details?id=com.bar.foo&referrer=BlahBlah), laissez l’utilisateur l’installer et ouvrez l’application avec l’argument d’identification.

enter image description here

Y a-t-il un moyen de former un lien qui ouvre une application Android avec un argument, qui fonctionnerait que l'application soit installée ou non?

50
Adam Matan

Cette solution de contournement pourrait fonctionner:

  1. Sur le côté serveur, créez une règle de redirection pour Google Play. Par exemple, https://www.foo.com/bar/BlahBlah va rediriger vers https://play.google.com/store/apps/details?id=com.bar.foo&referrer=BlahBlah.

  2. Sur l'application, enregistre le lien côté serveur en tant que lien profond :

<data Android:scheme="https"
          Android:Host="www.foo.com"
          Android:pathPrefix="/bar" />

Maintenant, si l'application est installée, l'URL sera interceptée et le chemin peut être analysé pour extraire la partie BlahBlah. Si l'application n'est pas installée, appuyez sur le lien pour rediriger l'utilisateur vers le Play Store avec l'URL de renvoi.

enter image description here

Remarques:

  • /bar/BlahBlah a été converti en &referrer=BlahBlah, car le Play Store reçoit un argument d'URL et que le mécanisme de lien en profondeur fonctionne avec les chemins d'URL (autant que je sache)
87
Adam Matan

Vous pouvez essayer d'utiliser ce schéma (à envoyer à l'utilisateur):

intent://details?id=X&url=Y&referrer=Z#Intent;scheme=market;action=Android.intent.action.VIEW;package=com.Android.vending;end";

X: nom du package de l'application

Y: schéma de lien en profondeur qui devrait être défini dans le manifeste de l'application. (S'il vous plaît se référer this ) Ici, ils ont utilisé cette URL à titre d'exemple: " http://www.example.com/gizmos ", donc Y doit être remplacé par cette URL.

Z: Peut être n'importe quelles données que vous souhaitez transmettre à l'application via Google Play. Veuillez prendre note que toutes les données que vous transmettez ne doivent pas être séparées par "&", car les paramètres d'origine sont eux-mêmes "&".

D'après ce que j'ai expérimenté, cette URL est comprise par le navigateur et vous redirige vers l'application en fonction du nom du package et du schéma de liens profonds. Sinon, cela vous amène à Google Play.

PS: Google Play diffuse l'application. Assurez-vous donc de recevoir la diffusion dans un récepteur.

13
Shivam Dixit

Cette question est assez ancienne mais elle est également très populaire. Vous devez donc savoir que ce cas d’utilisation est maintenant officiellement pris en charge par Firebase, plus précisément Firebase Dynamic Links .

Il prend uniquement en charge l'ouverture de l'application et les liens profonds différés, ce qui signifie qu'après l'installation, lorsque l'application démarre, vous pouvez récupérer les données (lien) qui ont été utilisées pour installer l'application.

Il est construit sur App Linking, vous avez donc toujours besoin du même intent-filter comme avant.

En bref, vous devez ajouter implementation 'com.google.firebase:firebase-dynamic-links:VERSION' et récupère le lien de l’instance de FirebaseDynamicLinks class.

Bien sûr, vous devez modifier les liens sur le site Web avec ceux générés dans la console Firebase, mais la bonne nouvelle est que ces liens sont "dynamiques" (comme leur nom l'indique), de sorte qu'ils fonctionnent sur tous les systèmes.

Pour toutes les informations détaillées et la configuration avec ce cas d'utilisation, allez ici: https://firebase.google.com/docs/dynamic-links/use-cases/web-to-app

1
michalbrz

La solution d'Adam est très bonne si vous voulez la construire vous-même.

Il y a un SDK open-source qui fait exactement cela, par branche métrique (divulgation complète, j'y travaille).

Fondamentalement, vous définissez votre schéma d'URI sur le tableau de bord Branch, créez un lien avec les données que vous souhaitez transmettre (dans ce cas, les paramètres de requête, mais vous décidez), et le SDK dispose d'une méthode avec un rappel qui vous renvoie ladite requête. paramètres (via install ou lien profond en cliquant sur le lien Branch).

0
Sahil Verma