web-dev-qa-db-fra.com

Problème Android Deep Linking! Comment utiliser le schéma d'URL personnalisé myapp: // some_data

j'ai essayé link1 , link2 , link3 , link4 , link5 , link6

Voici tout ce qui est décrit à propos de DeepLinking

Ce que je veux, c’est l’application personnalisée uri myapp: // some_data, ouvre l’application native installée sur le périphérique qui nécessite some_data pour initialiser l’application.

Il existe 2 scénarios dans lesquels l’URL personnalisée peut être cliquée.

1) depuis l’application SMS, lorsque l’utilisateur clique sur le lien, il doit ouvrir automatiquement l’installé, sinon il ouvre le magasin Google Play où est hébergée l’application

2) dans le corps d'un message électronique.

J'ai essayé tous les liens ci-dessus, mais aucun ne fonctionne pour moi. J'ai de gros problèmes avec la partie schéma. 

Voici mon AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk
    Android:minSdkVersion="8"
    Android:targetSdkVersion="18" />

<application
    Android:allowBackup="true"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme" >
    <activity
        Android:name="MainActivity"
        Android:label="@string/app_name"
         Android:exported="true" >
        <intent-filter>
            <action Android:name="Android.intent.action.VIEW" />

            <category Android:name="Android.intent.category.BROWSABLE" />
            <category Android:name="Android.intent.category.DEFAULT" />

            <data Android:scheme="inderbagga" />
        </intent-filter>
    </activity>
</application>

et voici le MainActivity.Java

TextView tvText=(TextView)findViewById(R.id.tvid);

    if (getIntent().getAction() == Intent.ACTION_VIEW&&getIntent().getScheme().equals("inderbagga")) {
        Toast.makeText(getApplicationContext(), ""+getIntent().getScheme(), Toast.LENGTH_SHORT).show();
        Uri uri = getIntent().getData();
        // do stuff with uri
        tvText.setText(uri.toString());
    }
    else tvText.setText("NULL");

Pour être plus précis, je veux ouvrir l’application native lorsque l’url du type inderbagga: // a1b22c333 est cliqué, à partir de l’application sms ou du corps du message électronique gmail/yahoomail.

afin d'atteindre le même objectif, j'ai utilisé des filtres d'intention pour définir le schéma. et getIntent () pour lire les données correspondant à a1b22c333 dans MainActivity.

24
inderbagga

cliquez sur le lien signifie que ce code fonctionnera

          <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="domain.com(google.com)"Android:pathPrefix="/wp/poc1/(sufexes)" />

    </intent-filter>

obtenir des données d'URL

        //get uri data
     Uri data = getIntent().getData();
     //get schma
     String scheme = data.getScheme(); // "http"
     //get server name
     String Host = data.getHost(); // Ipaddress or domain name
    //get parameter
     String urltextboxname=data.getQueryParameter("name");
     //set value in textview
     name.setText(urltextboxname);
16
prakash

Pour être plus précis, je veux ouvrir l’application native lorsque l’url du type inderbagga: // a1b22c333 est cliqué, à partir de l’application sms ou du corps du message électronique gmail/yahoomail.

Il existe de nombreux SMS et applications de messagerie disponibles pour Android. Aucun d’entre eux ne sait exactement comment convertir inderbagga://a1b22c333 en entrées cliquables. Vous pouvez créer une liste de toutes ces applications, contacter chacune des équipes de développement et leur demander de l'ajouter.

Vous pouvez également demander à votre application de rechercher plutôt une URL http:// particulière. Même si un sélecteur est présenté à l’utilisateur, il est au moins possible de cliquer sur cette URL dans votre application ou un navigateur Web.

9
CommonsWare

Vous pouvez également essayer cette bibliothèque qui facilite la déclaration de liens profonds et l'extraction des paramètres dont vous avez besoin:

https://github.com/airbnb/DeepLinkDispatch

Il vous permet de déclarer l'URI qui vous intéresse et le paramètre que vous souhaitez extraire par des annotations, sans avoir à analyser vous-même.

2
Christian

Il semble que le problème que vous rencontrez est que votre courrier électronique et votre client SMS n'analysent pas correctement le schéma d'URI et le chemin d'accès. La plupart ne vous permettent pas d'entrer directement dans un schéma d'URI. De plus, si l'application n'est pas installée, vous devez vous replier sur le Play Store afin que l'utilisateur dispose d'une bonne expérience.

Pour ce faire, vous devez appeler le schéma d'URI dans JS côté client. Vous pouvez configurer un hôte Web simple et utiliser ce script:

<script type="text/javascript">
    window.onload = function() {
        var method = 'iframe';
        var fallbackFunction = function() {
            if (method == 'iframe') {
                window.location = "market://details?id=your.package.name";
            }
        };
        var addIFrame = function() {
            var iframe = document.createElement("iframe");
            iframe.style.border = "none";
            iframe.style.width = "1px";
            iframe.style.height = "1px";
            iframe.src = "inderbagga://a1b22c333";
            document.body.appendChild(iframe);
        };
        var loadChromeIntent = function() {
            method = 'intent';
            document.location = "intent://a1b22c333#Intent;scheme= inderbagga;package=your.package.name;end";
        };
        if (navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match("Version/")) {
            loadChromeIntent();
        }
        else if (navigator.userAgent.match(/Firefox/)) {
            window.location = "inderbagga://a1b22c333";
        }
        else {
            addIFrame();
        }
        setTimeout(fallbackFunction, 750);
    };
</script>

Ou, vous pouvez utiliser un service tel que branch.io qui assemble automatiquement ce JS côté client en plus de travailler sur le bureau et sur iOS.

0
Alex Austin