Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android deep linking works in ADB, but not browser

I am trying to add deep linking to my app. I have added 2 intent filters to one of my activities, one filter for the "http" scheme, and another for my custom scheme (I'm using "example"). I have added one intent filter per scheme, based on the info in this SO (Deep-linking intent does not work), so that I can handle both example://test and http://www.example.com/test type of links.

Here is my XML:

        <activity
    android:name="com.myapp.myapp.SplashActivity"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter android:label="Intent Filter label">
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!-- Accepts URIs that begin with "http://www.example.com/test2” -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/test2" />

    </intent-filter>
    <intent-filter android:label="Intent Filter label">
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.LAUNCHER" />

        <!-- Accepts URIs that begin with "example://test2” -->
        <data android:scheme="example"
              android:host="test2" />
    </intent-filter>
</activity>

They are loading correctly when I test in ADB:

adb shell am start -W -a android.intent.action.MAIN -d "example://test2" com.myapp.myapp

returns

Starting: Intent { act=android.intent.action.MAIN dat=example://test2 pkg=com.myapp.myapp }
Status: ok
Activity: com.myapp.myapp/com.app.myapp.SplashActivity
ThisTime: 357
TotalTime: 357
Complete

However, I get absolutely nothing in a browser. When I try this in a browser: "example://test2" in FF I get "couldn't find an app to open this link" and in Chrome and the Native Browser, it opens up new Google search for "example://test2".

When I try the other style: "http://www.example.com/test2" it just tries to navigate to that web page in all 3 browsers.

I am deploying the app to my phone from Android Studio. I have also tried by generating a debug APK, sending it to my phone, and installing. Same result for both. What am I doing wrong? I've followed the guide (https://developer.android.com/training/app-indexing/deep-linking.html) to the letter as far as I can tell. Does my app need to be in the store for the deep linking to work?

like image 421
chiliNUT Avatar asked Nov 17 '15 23:11

chiliNUT


2 Answers

Ughh, my action was MAIN when it should have been VIEW...

<intent-filter>
        <action android:name="android.intent.action.MAIN" />

...

<intent-filter>
        <action android:name="android.intent.action.VIEW" />
like image 186
chiliNUT Avatar answered Sep 20 '22 10:09

chiliNUT


Your implementation seems to be correct and also, if you're testing your app in your device, it does not need to be available on Playstore.

Have you tried testing through a QR code? As is demonstrated in Google documents - https://developers.google.com/app-indexing/android/test

Hope this helps.

like image 45
Stan Ct Avatar answered Sep 18 '22 10:09

Stan Ct