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?

InformationsquelleAutor Joshua Smith | 2011-08-29