2011-02-10 7 views
13

J'essaie de créer un lien qui peut être envoyé par e-mail qui, lorsqu'il est ouvert sur un appareil Android avec mon application installée ouvrira automatiquement la bonne page dans mon application.Lien profond Android dans une application

J'ai travaillé partiellement de différentes façons, mais j'ai trouvé quelques problèmes que je me demandais si quelqu'un avait des solutions.

Tentative 1: Utilisation d'un schéma personnalisé: myapp: // someItem. Cela fonctionne mais certaines applications email ne traitent pas cela comme un lien car ce n'est pas http. Existe-t-il un moyen de forcer les applications à le traiter comme un lien valide? Gmail par exemple.

Tentative 2: Utilisation d'un lien http avec un hôte: http://com.myapp/someItem. Cela fonctionne aussi bien mais mon application finit par être enregistrée pour gérer tous les liens http ce qui n'est pas idéal.

Tentative 3: Utilisation d'un lien http avec l'hôte et le port: http://com.myapp:2345/someItem. Ceci est ma solution actuelle avec le seul inconvénient étant que lorsque le lien est ouvert, il donne toujours la possibilité d'ouvrir le lien dans un navigateur. Est-il possible d'empêcher le navigateur d'ouvrir mes liens?

Est-ce que quelqu'un a un moyen de faire des liens qui seront traités comme des liens par toutes les applications et aussi être ignorés par le navigateur lors de leur ouverture?

+0

Pouvez-vous s'il vous plaît me pointer vers des ressources qui me permet de - « comment activer les liens profonds pour le contenu App » - Le lien profond devrait prendre directement les utilisateurs au contenu, sans invites, pages interstitielles ou logins . – user2056563

Répondre

4

Cette technique semble effectivement travailler sur Android de ce que je peux dire:

http://mobile.dzone.com/news/custom-url-schemes-phonegap

Je n'ai pas essayé dans une application de production réelle encore, de sorte que votre kilométrage peut varier. Ce que j'ai fait est d'utiliser cette technique de création d'un iframe caché et de tenter de définir l'emplacement du schéma d'URL personnalisé, et d'appeler la fonction de onload pour le document. Ce que j'ai vu jusqu'à présent (je l'ai seulement testé sur les appareils 2.2 et 2.3), c'est que si j'ai une application qui gère le système personnalisé, l'application va se lancer, et sinon la page s'affichera.

URL relativement propre pour couvrir les deux cas, et ne gâche pas les éléments tels que les partages Twitter de l'URL. Une version de production réelle peut uniquement exécuter la sonde iframe masquée si la requête provient d'une plate-forme susceptible de prendre en charge l'application afin de réduire le risque d'incompatibilité entre les postes de travail.

+1

J'ai obtenu ce 90% de travail. Le seul que je n'aime pas, c'est qu'il laisse une page dans le navigateur. Je voudrais qu'il revienne 1 page sur le succès et rester là où il est sur l'échec d'afficher un lien de téléchargement. Avez-vous trouvé un moyen de vérifier si la redirection a fonctionné? – skorulis

+1

Désolé, mais je ne me suis pas trompé avec suffisamment pour optimiser l'histoire et des trucs comme ça, juste testé les bases. Normalement, vous pouvez lancer avec un drapeau sans historique dans l'intention de résoudre le problème en laissant une page dans le navigateur. Mais parce que "quelque chose d'autre" est en train de démarrer, je ne suis pas sûr de savoir comment vous allez trouver une solution. Bonne chance! Heureux les bases fonctionnent au moins. – mikerowehl

0

Si vous pouvez utiliser quelque chose côté serveur, peut-être pourriez-vous avoir une page normale qui saute au lien du schéma personnalisé du navigateur lors de la visite? Cela a l'avantage supplémentaire de pouvoir savoir si l'application n'est pas installée et d'installer rapidement.

Cependant, cela ne résout pas le problème d'ouverture de liens dans le navigateur. La seule vraie solution à laquelle je peux penser est un gestionnaire de liens qui saute à l'application appropriée. Ensuite, la question serait permettre à l'utilisateur de changer le navigateur préféré ...

+0

Comment vérifier depuis le navigateur si l'application a été installée? – skorulis

+0

Oh, je n'y ai pas pensé. Je ne sais pas s'il existe un moyen facile de le faire. Au moins, une page de clic serait possible. ; edit: Peut-être que vous pourriez exécuter un service de serveur HTTP sur l'application, puis l'utiliser pour détecter la présence de l'application? C'est à peu près tout ce que je peux trouver en ce moment. –

4

Pour répondre à vos questions, voici un exemple de filtre d'intention dans le manifeste.

<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:host="www.example.com" 
     android:pathPrefix="/home" 
     android:scheme="https"/> 
</intent-filter> 

Donc, fondamentalement, quand quelqu'un clique sur un lien commençant par http://www.example.com/home, il/elle sera donné la possibilité de l'ouvrir avec votre application ainsi que les applications du navigateur.Vous devez gérer l'intention dans l'activité

Également le schéma pourrait être n'importe quoi, mais le schéma http est recommandé par google, de sorte que votre application et l'application du navigateur puissent écouter les clics sur l'URL en lien profond.

Remarque: N'oubliez pas d'ajouter l'application android: // yourpackage name/http/www.example.com/home/... dans vos pages Web, si vous souhaitez une liaison d'application.

1
1:-set Custom URL schemes like http://example.com. 
    For example, the URL http://example.com/?id=95 , 
    will open up the relevant FAQ and the URL 
    http://example.com/?sectionid=8 
    (where sectionid is the publish id of any Section), 
    will open up relevant section. 
2:- <activity android:name="com.example.shilpi.deeplinkingsample.DeepLinkActivity"> 
      <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="http" android:host="example.com"/> 
      </intent-filter> 
     </activity> 
3:-   @Override 
      protected void onResume() { 
       super.onResume(); 

       Intent in = getIntent(); 
       Uri data = in.getData(); 
       System.out.println("deeplinkingcallback :- "+data); 
      } 
+2

Bien que cette réponse puisse être techniquement correcte, il serait utile de compléter votre réponse en expliquant ce qu'elle fait. Cela aidera à la fois le PO et les futurs visiteurs. À l'heure actuelle, il s'agit juste d'un vidage de code. – Bugs

Questions connexes