Existe-t-il un moyen de transmettre un message d'un navigateur Android vers une application?

J'ai une situation où j'aimerais que certaines données soient transmises d'un site Web mobile à une application Android native. Une complication est que, dans le cas normal, l'application Android native pourrait ne pas être installée lorsque le site Web mobile est chargé.

Voici un exemple:

  • Méthode d'appel après 5 millisecondes
  • Comment centrer l'alignement du texte dans une barre d'onglets dans Android
  • Vidéo codée à partir de la séquence d'images de java android
  • Recherche dans Play Market with localized Nom de l'application
  • Y a-t-il un équivalent #ifdef ANDROID à #ifdef WIN32
  • Reconnaissance de police à partir de dessin gratuit à la main
  • Je suis un utilisateur de ExampleApp et je souhaite partager une donnée particulière de ExampleApp avec vous, qui n'a jamais installé ExampleApp.

    Je vous envoie un courrier électronique avec un lien vers une page Web mobile qui connaît les données que vous voulez voir lorsque vous ouvrez le lien. Mais, étant donné que les données ne sont disponibles que dans l'application natif, et non sur le Web mobile, vous êtes emmené dans une page qui vous demande d'aller sur Android Market et d'installer ExampleApp.

    Vous installez ExampleApp, et idéalement, vous seriez pris directement sur les données que j'ai partagées avec vous.

    Le gros problème concerne la déconnexion entre la visualisation de la page Web mobile et l'installation d'ExampleApp.

    J'ai pensé à quelques solutions, mais aucune d'entre elles n'a été couronnée de succès (cela dit, je pourrais simplement les mettre en œuvre de manière incorrecte):

    1. Définissez un cookie sur notre domaine qui inclut les données lorsque la page Web mobile est chargée. Ensuite, lorsque ExampleApp est ouvert, lancez une page Web pour demander une page sur le même domaine et vérifiez la valeur du cookie. Utilisez-le pour déterminer les données à afficher dans ExampleApp.
    2. Utilisez JavaScript localStorage pour stocker une référence aux données et utilisez WebView pour obtenir une page sur ce domaine et demandez le contenu de localStorage à partir d'ExampleApp.

    Dans ces deux cas, il semble que le WebView et le navigateur soient séparés les uns des autres, donc vous ne pouvez pas accéder aux cookies / localStorage entre les deux.

    Existe-t-il une autre façon de «laisser un crumbtrail» ou de définir un message qu'une application installée plus tard peut accéder à partir du navigateur?

    EDIT: Compte tenu de certaines réponses, je dois mentionner que je ne veux que cliquer sur le lien, ne pas cliquer une fois, installer l'application, puis cliquer à nouveau pour ouvrir l'application au bon endroit.

  • L'impression par l'intermédiaire de l'exemple web devrait
  • Une application payante peut-elle être testée en alpha / beta gratuitement?
  • Comment configurer un serveur SMTP multiple dans Android?
  • Cordova / erreur de compilation Android avec passage à niveau
  • Comment faire passer le résultat du deuxième fragment au premier fragment
  • Comment augmenter la taille de la police de l'élément spinner?
  • 4 Solutions collect form web for “Existe-t-il un moyen de transmettre un message d'un navigateur Android vers une application?”

    La solution est en fait assez simple, je suis un peu étonné que personne ne puisse l'inventer depuis plus d'un an. Alors voici:

    L'idée de base est d'utiliser des cookies pour stocker l'information. Le flux de données est le suivant:

    Ouvrir la page Web -> configurer les cookies -> redirection vers le marché -> installer l'application -> lancer le navigateur avec la page Web -> lire le cookie -> commencer l'intention personnalisée avec les données de cookie -> capturer l'intention et lire les données de cookie

    L'utilisateur visite une page Web (en numérisant une étiquette QR par exemple). L'URL de la page Web contient une référence aux données que vous souhaitez transmettre ou contient les données elles-mêmes. Le site définit les données sous forme de cookie et redirige vers le marché Android ( http://market.android.com/details?id=com.yourapp ). Dès que votre application démarre, vous ouvrez un navigateur et chargez la même page Web à nouveau. Cette fois cependant, il détecte que le cookie est déjà configuré et redirige vers un schéma d'URL personnalisé comme exemple: //example.com/installled? Id = DATA, au lieu du marché. En utilisant un filtre intention, vous lancez votre activité et extrayez les informations de l'intention.

    Voici le code d'activité pertinent:

    public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); if(intent == null || intent.getData() == null || !"example".equals(intent.getData().getScheme())) { String url = "http://example.com/yourApp/index.php"; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); finish(); return; }else { Uri uri = intent.getData(); if("example".equals(uri.getScheme())) { id = uri.getQueryParameter("id"); } } ... initialise your activity ... } 

    Un fichier PHP simple (le site web) pour une démonstration simple:

     <?php $value = "123"; if(!isset($_COOKIE["TestCookie"])) { setcookie("TestCookie", $value, time()+3600); /* expire in 1 hour */ header("Location: http://market.android.com/details?id=com.yourapp"); exit; }else { header("Location: example://example.com/installed?id=".$_COOKIE["TestCookie"]); exit; } ?> 

    Et le filtre intention:

     <!-- Handle URLs like loyalty://example.com/merchant/123 --> <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="example" android:host="example.com" /> </intent-filter> 

    BTW, j'ai décidé de faire un blog sur le problème.

    Existe-t-il une autre façon de «laisser un crumbtrail» ou de définir un message qu'une application installée plus tard peut accéder à partir du navigateur?

    Je pense qu'il y a une solution plus simple, une variation de celle utilisée par Barcode Scanner.

    Étape n ° 1: Créez une bonne URL RESTful contenant les informations souhaitées. Par RESTful je veux dire non ? , Pas de # , rien de cette merde. Ce sera plus simple si c'est sur un nom de domaine distinct, mais cela pourrait être quelque chose sur votre domaine existant. Aux fins de cette réponse, je suppose que cette URL ressemble à http://android.exampleapp.com/our/custom/data/goes/in/here/somewhere .

    Étape n ° 2: pour toutes les URL qui pourraient être créées suivant le schéma de l'étape n ° 1 (n'importe quoi dans http://android.exampleapp.com ), votre serveur Web devrait afficher une page indiquant "Hé! Vous n'avez pas ExampleApp Si vous cliquez sur ce lien ici, il vous mènera à l'Android Market, où vous pouvez installer ExampleApp! Ensuite, essayez de cliquer sur le lien qui vous a amené sur cette page, et il démarrera ExampleApp et vous donnera … ummm … toutes ces bonnes données ".

    Étape n ° 3: implémentez une activité dans ExampleApp qui comporte un <intent-filter> avec l'action VIEW , la catégorie BROWSEABLE et un élément <data> identifiant votre schéma et votre domaine (et, si nécessaire, le chemin de base, si cela le veut Être le même pour tous ces liens).

    Ce que l'utilisateur voit, s'ils n'ont pas installé ExampleApp et cliquez sur le lien, est votre page Web à partir de l'étape 2, à partir de laquelle ils peuvent aller installer ExampleApp.

    Ce que l'utilisateur voit, s'ils ont installé ExampleApp et cliquez sur le lien, c'est votre activité, qui peut saisir l'URL via getIntent().getData() et faire quelque chose d'utile.


    METTRE À JOUR

    Dans un commentaire, vous avez écrit:

    Page web mobile => données de stockage => application d'installation d'utilisateur => l'application d'utilisateur ouvre => l'application récupère les données => l'application s'ouvre directement au contenu récupéré

    IMHO, vous faites trop d'hypothèses sur ce que l'utilisateur va faire. Il peut y avoir des jours, des semaines ou des mois de retard entre les flèches que j'ai mises en caractères gras.

    Si vous allez le distribuer vous-même (p. Ex., Hors de votre serveur Web), vous avez toujours la possibilité de les "graver" un APK personnalisé avec les données à l'intérieur de celui-ci, mais vous devez gérer la gestion des mises à jour vous-même.

    Ou, si vous utilisez un système basé sur un compte, demandez-leur de créer un compte sur votre site avant de les envoyer sur Android Market. Stockez les données sous ce compte et, lorsqu'ils se connectent à ce compte à partir de l'application, vous pouvez associer les données à l'application.

    Utilisez un paramètre GET: http://exampleapps.com?token=mK7Fyt5 Pensez à la façon dont fonctionne l'application YouTube. Vous êtes envoyé au lien pour une vidéo. Si vous n'avez pas l'application YouTube, vous voyez le site mobile (qui, dans votre cas, pourrait être un lien d'installation). Si vous le faites, vous êtes invité à ouvrir le lien YouTube avec l'application natif, et l'application native passe l'URL à partir de laquelle il a été invoqué, à partir duquel il peut analyser le paramètre de la vidéo à afficher.

    Utilisez le filtre suivant:

     <intent-filter> <data android:scheme="http" android:host="exampleapps.com"/> <action android:name="android.intent.action.VIEW" /> </intent-filter> 

    Voir: https://stackoverflow.com/a/7577379/710284

    Vous pouvez utiliser un lien INSTALL_REFERRER comme:
    http://market.android.com/details?id=your.package.name&referrer=your_wanted_parameter

    Une fois qu'un utilisateur clique sur ce lien et installe l'application, votre récepteur de diffusion recevra une diffusion com.android.vending.INSTALL_REFERRER avec la valeur "your_wanted_parameter".

    Plus d'informations:
    http://code.google.com/mobile/analytics/docs/android/#android-market-tracking
    Obtenir un référent après l'installation d'une application depuis Android Market
    Obtenez l'étiquette de référence Google Analytics Android

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.