Comment faire pour revenir à marché quand Android personnalisé schéma d'URL n'est pas manipulé?
Nous avons une application qui gère une URL personnalisée (régime vstream://). Quand quelqu'un arrive à une page web qui a une certaine vstream://contenu, nous avons besoin de les rediriger vers la boutique si ils n'ont pas notre application installée.
Dans iOS, nous le faisons:
setTimeout(function() {
window.location =
"itms://itunes.apple.com/us/app/kaon-v-stream/id378890806?mt=8&uo=4";
}, 25);
window.location = "vstream:view?code=...stuff...";
Si le window.location
affectation échoue, le délai d'attente saute sur l'App Store avant de la boîte de dialogue s'affiche. (J'ai trouvé cette technique ici: Est-il possible d'enregistrer un http+de domaine Schéma d'URL pour les applications de l'iPhone, comme YouTube et Maps? .)
Malheureusement, cette astuce ne fonctionne pas sous Android. Nous détecter l'appareil côté serveur et a écrit ceci à la place de l'itms: ligne:
"market://details?id=com.kaon.android.vstream";
De la difficulté est, tandis qu'iOS renvoie une erreur lorsque vous accédez à un non gérée schéma d'url, Android va à une page générée. Par conséquent, le délai d'attente n'est jamais une chance de s'exécuter.
Est-il un moyen sur une page web explicitement test pour savoir si une URL personnalisée régime est géré, ou quelqu'un peut-il suggérer un hack comme celui qui va travailler dans Android? (Bien sûr, je suppose que j'ai besoin d'un hack qui fonctionne n'importe quel navigateur ils utilisent, ce qui est probablement un défi de taille...)
Mise à JOUR:
Les approches ci-dessous ne fonctionnent pas dans Jelly Bean sur une Nexus 7. Le nouveau navigateur google Chrome ne vont pas généré de la page (donc l'iFrame n'est pas nécessaire), mais il ne semble pas y avoir de moyen de savoir si le schéma d'URL a été traitée. S'il l'était, le délai d'extinction des incendies de toute façon. Si elle n'était pas géré le délai d'extinction des incendies. Si j'utilise un gestionnaire onload et une iframe, le gestionnaire onload n'est jamais déclenché (si l'application est installée ou pas). Je vais mettre à jour si j'arrive à comprendre comment savoir si le régime est géré...
J'ai supprimé mon "Résolu" sur ma solution précédente, puisqu'il ne fonctionne plus.
Mise à JOUR 2:
J'ai une bonne solution multi-plateforme maintenant qui fonctionne sur iOS, Android 4.1 avec Chrome et Android pré-Chrome. Voir ci-dessous...
Mise à jour 3:
Google ont tout cassé à nouveau avec les intentions. Découvrez la TRÈS belle solution que j'ai acceptée par amit_saxena là-bas quelque part /
- On dirait que vous voulez lire sur la façon dont les Intentions de travailler dans Android: developer.android.com/guide/topics/intents/intents-filters.html
- Ce n'est pas très utile commentaire. Nos intentions fonctionnent tout aussi bien. Si l'application est installée sur l'appareil, la page web de lance de notre application. La question est de savoir comment détecter si notre application a été installée à partir de la page web, de sorte que nous savons que de les envoyer à l'application ou à la boutique.
- Si votre application (et par la suite votre Intention) n'est pas installé/enregistré, une demande avec un protocole de
vstream
ne sera pas aller n'importe où. Donc, juste envelopper de votre délai d'attente avec un autre délai, depuis itms: ne peuvent pas être enregistrés sur Android (autant que je sache), soit. - Je vais mettre à jour la question afin de montrer clairement ce que nous avons essayé sur Android.
- ok merci, je pense que je vais manquer un morceau de cette
- si vous possédez le site, et que vous voulez un peu de code pour rediriger un Android du navigateur du marché, s'ils n'ont pas votre app pour gérer vstream protocole?
Vous devez vous connecter pour publier un commentaire.
Ci-dessous est un extrait de code pour la plupart des navigateurs android:
Vous devez ajouter
source_url
classe à la balise d'ancrage.J'ai blogué plus à ce sujet ici:
http://aawaara.com/post/88310470252/smallest-piece-of-code-thats-going-to-change-the
Mise à JOUR: Google a cassé cette. Voir le nouveau accepté de répondre à la place.
La clé, il s'avère, est le document.webkitHidden de la propriété. Lorsque vous définissez la fenêtre.emplacement pour une URL personnalisée régime et il s'ouvre, le navigateur continue de fonctionner, mais que la propriété passe à false. Ainsi, vous pouvez le tester afin de déterminer si l'URL personnalisée régime a été traitée.
Voici un exemple, que vous pouvez vue en direct
document.webkitHidden
joue un rôle ici..toute la lumière sur que ce sera utile, thnx 🙂intent:
syntaxe exige de l'utilisateur de geste et de Chrome pour Android est mise en cache de l'utilisateur geste. À reproduire: 1) Créer une page avecintent:
lien hypertexte. Appuyez sur dans Chrome pour Android. L'application ou le Google Play Store devrait ouvrir. 2) Modifié la page pour cliquer sur le lien via Javascript. 3) Recharger la page. Résultat de 1) devrait se produire. 4) fermer la page de l'onglet dans google Chrome. 5) ouvrez un nouvel onglet et aller à la page web de 2) (avec auto cliquez sur via Javascript). Page web non disponible erreur s'affiche. (à compter de la version Chrome 40.0.2214.89)C'est la réponse qui vous sauvera tous !
https://developers.google.com/chrome/mobile/docs/intents
Il en va de votre url schestart moi si l'application est installée ou sinon, il va commencer le marché à l'package
@jesmith, c'est un propre version qui corrige double action sur Android.
Résolu! Le truc, c'est d'ouvrir mon application dans un IFRAME, au lieu de la définition de l'emplacement:
Avis que j'ai augmenté le délai d'attente à 1000, parce qu'Android ne fait les deux actions dans tous les cas (pas l'idéal, mais pas terrible), et ce délai est nécessaire afin d'assurer que le Marché n'est pas la chose que l'utilisateur voit quand je suis déjà installé.
(Et oui, bien sûr, à l'aide de document.écrire, c'est donc le dernier siècle, mais je suis de la vieille école cette façon 🙂
Pour certaines raisons, la solution finale n'a pas fonctionné pour moi sur android (Est-ce juste moi?!!). La clé est que l'iframe.onload fonction n'est PAS exécutée lorsque votre application est installée, et elle EST exécutée lorsque votre application n'est PAS installée.
La solution devient un peu plus simple en fait. Voici le segment de la "les Anciens Navigateur Android" partie:
Intégrer un serveur http dans votre application en tant que Service, écouter un port local(supérieur à 1024, ex: 8080), envoyer une demande à partir du Navigateur à l'adresse 127.0.0.1:8080. Si votre application installée(et le service en cours d'exécution), le lancer, si échec de la demande, goto google play.