wake-up-neo.com

Problem mit Android Deep Linking! So verwenden Sie das benutzerdefinierte URL-Schema myapp: // some_data

ich habe versucht Link1 , Link2 , Link3 , Link4 , Link5 , Link6

Hier ist alles beschrieben über DeepLinking

Was ich will, ist der benutzerdefinierte uri myapp: // some_data. Öffnet die native Anwendung, die auf dem Gerät installiert ist und für die Initialisierung der Anwendung some_data erforderlich ist.

Es gibt zwei Szenarien, in denen auf die benutzerdefinierte URL geklickt werden kann.

1) In der SMS - App wird der installierte Link beim Öffnen des Links automatisch geöffnet, andernfalls wird der Googleplay-Store geöffnet, in dem die App gehostet wird

2) aus dem Körper einer E-Mail-Nachricht.

Ich habe alle oben aufgeführten Links ausprobiert, aber keiner von ihnen funktioniert für mich. Ich habe ein großes Problem mit dem Systemteil. 

Hier ist meine 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>

und hier ist die 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");

Um genauer zu sein, möchte ich die native Anwendung öffnen, wenn auf die URL des Typs inderbagga: // a1b22c333 geklickt wird. Entweder aus einer SMS-Anwendung oder aus einer E-Mail-Nachricht aus gmail/yahoomail.

um das gleiche zu erreichen, habe ich Absichtsfilter verwendet, um das Schema einzustellen. und getIntent () zum Lesen der Daten, die in der MainActivity a1b22c333 entsprechen.

24
inderbagga

klick-Link bedeutet, dass dieser Code funktioniert

          <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>

uRL-Daten abrufen

        //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

Um genauer zu sein, möchte ich die native Anwendung öffnen, wenn auf die URL des Typs inderbagga: // a1b22c333 geklickt wird. Entweder aus einer SMS-Anwendung oder aus einer E-Mail-Nachricht aus gmail/yahoomail.

Es gibt viele SMS - und E-Mail-Anwendungen für Android. Keiner von ihnen kann inderbagga://a1b22c333 in anklickbare Einträge konvertieren. Sie können eine Liste all dieser Apps erstellen, sich an jedes ihrer Entwicklungsteams wenden und sie bitten, sie hinzuzufügen.

Oder Sie können Ihre App stattdessen auf eine bestimmte http://-URL überprüfen lassen. Der Benutzer wird zwar mit einer Auswahlmöglichkeit angezeigt, um diese URL in Ihrer App oder in einem Webbrowser anzuzeigen, kann er jedoch zumindest angeklickt werden.

9
CommonsWare

Vielleicht möchten Sie auch diese Bibliothek ausprobieren, die das Deklarieren von Deep Links und das Extrahieren der benötigten Parameter erleichtert:

https://github.com/airbnb/DeepLinkDispatch

Damit können Sie die URI, an der Sie interessiert sind, und den Parameter, den Sie durch Anmerkungen extrahieren möchten, angeben, ohne dass Sie selbst analysieren müssen.

2
Christian

Anscheinend besteht das Problem darin, dass Ihre E-Mail-Adresse und der SMS -Client das URI-Schema und den Pfad nicht korrekt analysieren. Die meisten erlauben keine direkte Eingabe in ein URI-Schema. Wenn die App nicht installiert ist, müssen Sie außerdem auf den Play Store zurückgreifen, damit der Benutzer eine gute Erfahrung erhält.

Dazu müssen Sie das URI-Schema im clientseitigen JS aufrufen. Sie können einen einfachen Webhost einrichten und dieses Skript verwenden:

<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>

Oder Sie können einen Dienst wie branch.io verwenden, der automatisch diese clientseitige JS für Sie zusammenstellt und nicht nur auf Desktops und iOS arbeitet.

0
Alex Austin