Shaolin
Shaolin

Reputation: 2551

Detect if Android app has been installed on the device using a mobile web page - PHP and JS

I have a requirement like this and something similar to that has been implemented by Android Pit app-store.

I need to check if the Android app has been installed on the device using a mobile web page (PHP and JS), and if installed launch the app immediately.

These are the intermediate pages used by Android pit.

When app has not been installed - http://www.androidpit.com/en/android/market/app-center-mobile?pname=com.ocito.laredoute

When app has been already installed - http://www.androidpit.com/en/qrdl/com.mobage.ww.a692.Bahamut_Android

Does anyone know how to implement this?

Upvotes: 15

Views: 72054

Answers (5)

AllanRibas
AllanRibas

Reputation: 1144

You can do this using the browser on your phone

 intent://scan/#Intent;scheme=clashofclans;package=com.supercell.clashofclans;S.browser_fallback_url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.supercell.clashofclans&%26referrer%3Dkinlan;end

 intent://scan/#Intent;scheme=vnd.youtube://www.youtube.com/watch?v=QXhoNI4O99A;package=com.google.android.youtube;S.browser_fallback_url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.google.android.youtube&%26referrer%3Dkinlan;end

you can try this too

the application in question must have the scheme in the AndroidManifest clash of clans// or other scheme

Upvotes: 1

chris_r
chris_r

Reputation: 2146

there's a better trick. you are going to see if URL returns a 404, means not found. Where URL will not work if there is no app installed.

Upvotes: 0

Mher
Mher

Reputation: 1253

In case of

<data
    android:host="www.myurl.com"
    android:pathPrefix="/openmyapp"
    android:scheme="http" >
</data>

it will ask user by which way open the content.

enter image description here

To avoid this or to avoid connect your app to some url you can do another trick to implement this using PHP and JS.

  1. You must create an intent-filter on your app's main activity like this:
<intent-filter android:label="filter_react_native">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="MyCustomScheme" android:host="MyCustomHost" />
</intent-filter>
  1. Create PHP file redirect_to_app.php which will work in case user have the app installed.
<?php
header('Location: MyCustomScheme://MyCustomHost');
  1. Create HTML/PHP file check_redirect_to_app.php which must be shown for users which didn't install your app yet.
...
<a href="https://play.google.com/store/apps/details?id=YOUR_APP_PACKAGE_NAME">Please install the application</a>
...

<script>
    location.href = '...redirect_to_app.php';
</script>
  1. Redirect users to check_redirect_to_app.php. check_redirect_to_app.php will try to redirect to MyCustomScheme://MyCustomHost automatically. In case it will not find such a app, it will coninue to show check_redirect_to_app.php content.

Upvotes: 1

AL̲̳I
AL̲̳I

Reputation: 2461

There is a way to achieve this. Found this answer

You cannot detect if a particular application is installed, for security and privacy reasons. But you can do a trick to open the app if it's installed or open its Google Play page if it isn't.

To do that, you must create an intent-filter on your app's main activity, to open it when a given URL is called. Like this:

<activity android:name=".MainActivity >
    <intent-filter>
        <data
            android:host="www.myurl.com"
            android:pathPrefix="/openmyapp"
            android:scheme="http" >
        </data>

        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.VIEW" />
    </intent-filter>
</activity> 

Explaining: when the user navigates to http://www.myurl.com/openmyapp, if the app is installed, an intent will be created and the Activity will be shown.

But what if the user doesn't have the app installed? Then you need to create a redirect page on your http://www.myurl.com/openmyapp/index.html. When the user reaches this address, your server must redirect to market://details?id=com.your.app.package.

This way, when no Intent is created after the user navigates to http://www.myurl.com/openmyapp, the web server will call another URL. That URL, in turn, will open Google Play on the device, directly on the app's page.

Upvotes: 22

CommonsWare
CommonsWare

Reputation: 1006584

Fortunately, this is not possible, for obvious privacy reasons.

The closest that you can do is in the application, have an activity that has an <intent-filter> for some URL structure, and have a link in the mobile Web site to a matching URL.

If the user clicks the link and the app is installed, the activity will be a chooser option for the user.

If the user clicks the link and the app is not installed, or they choose to stick with their Web browser from the chooser, whatever Web page exists at that URL will be displayed (E.g., instructions of how to download the app).

Upvotes: 22

Related Questions