22

I have researched through most of the custom URL scheme Q&A and I have not found my possible answer.

I want my app to be launched by clicking a certain URL in the browser (any on the mobile device) , the thing is that my given URL cannot be modified as it serves IOS app as well and it looks like this:

"myapp://http://www.name.com/path/path2/"

I'm not sure how to handle "myapp://http://" and construct a proper intent filter , and everything i tried does not work. Any help will be appreciated , and if I missed a relevant answer please except my apology.

This is what I tried so far :

      <activity
        android:name="com.myapp.test.SplashScreen"
        android:exported="true"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <!-- Test for URL scheme -->
        <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.name.com"
                android:path="/path/path2/"
                android:scheme="http" />
            <data
                android:host="www.name.com"
                android:path="/path/path2/"
                android:scheme="https" />

            <data android:scheme="myapp" />
        </intent-filter>
        <!-- End Test for URL scheme -->
    </activity>

Note: I have tried with/without the exported:true

4
  • 2
    Since that's not a valid Uri structure, I highly doubt that it will work. It will be simpler for you to change your iOS app to use something that is a valid URI. Commented Aug 7, 2013 at 11:57
  • @CommonsWare Hey, thanks for the comment. This kind of URI works on the IOS app , they manage to open the app by clicking on this link.Do you think that there could only be one scheme like "myapp://" OR "http://" ? Commented Aug 7, 2013 at 12:01
  • 1
    "Do you think that there could only be one scheme like "myapp://" OR "http://" ?" -- yes. At best, if you're lucky, http:// would be treated as the host. At worst, your Uri will simply fail to parse. And I can think of a few other options. There absolutely is only one scheme in a Uri -- the Uri class doesn't allow for more than one. Commented Aug 7, 2013 at 12:16
  • 1
    My read of RFC 2396 is that he has defined an opaque URI scheme, and the fact that the scheme-specific-part looks like another URI is no business of the URI parser. (Also, it's a little glib and unhelpful to suggest "just change your iOS app", likely he's got code in the wild he needs to maintain compatibility with.) Commented Dec 11, 2013 at 17:02

3 Answers 3

18

As CommonsWare said the given URI upon I needed to create a Scheme is not a valid URI thus the scheme didn't not work and the application didn't launch. After this explanation the server side guys were convinced to change the URI to myapp://... and it worked like magic :).

The Activity looks like this now :

 <activity
    android:name="com.myapp.test.SplashScreen"
    android:exported="true"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <!-- Test for URL scheme -->
    <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="myapp" />
    </intent-filter>
    <!-- End Test for URL scheme -->
</activity>
Sign up to request clarification or add additional context in comments.

7 Comments

It seems straight forward process, however, it doesn't work with me
@MazenKasser hey , how does your scheme look ? maybe I can help if you post it here
myapp:// navigating to app in default browser. but in chrome it is not opening the app.
@madanV where does chrome go to instead of opening the application ?
Important note: manually typing the urlscheme into the browser address bar and hitting enter to load it does not work. It DOES work if you CLICK a URL with that urlscheme!
|
1

That's a misuse of the URI scheme and is invalid. The HTTP URL you want to pass is a piece of data and should thus be sent in the query string.

myapp://somehost/action?url=http%3A%2F%2Fwww.name.com%2Fpath%2Fpath2%2F

1 Comment

He stated that his given URL cannot be modified as it serves IOS app as well
-1

you need use a hyperlink to start the app . for example ,you set scheme="yourpackagename" ,you need to set a hyperlink like this: yourpackagename://host ,and you should vist the hyperlink on you moble browser .If you do not have host lable,just remove it.

<!-- Test for URL scheme -->
<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="host" android:scheme="yourpackagename" />
</intent-filter>
<!-- End Test for URL scheme -->

If your activity has more than one scheme, you should use 2 or more to specify it

2 Comments

android:host="" produces an error: "android:host cannot be empty"
thanks for your comment,in studio just remove this code // android:host="" if you do not need "host "

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.