如果在从浏览器启动Android应用时未安装应用,则重定向到Google Play商店

时间:2014-03-05 07:03:18

标签: android

我从浏览器启动Android应用程序。我在清单中编写以下代码,用于从浏览器启动应用程序&成功发射,

<intent-filter>
<data
    android:scheme="myapp"
    android:host="myhostname" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

我的要求是,如果未安装该应用,我必须重定向到Google Play商店。

我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:2)

添加意图过滤器是好的,但这是我在用户代理匹配时在Android设备上打开意图的方法。我专门使用rails但你可以在服务器代码中使用它(例如以链接的形式):

resources :users, path: '/', only: [], constraints: { :id => /\d+/ } do
  constraints :user_agent => /Android/i do
    #https://developers.google.com/chrome/mobile/docs/intents
    get '/:some_key' => redirect {|params, request| "intent://my-domain.com/#{params[:user_id]}/#{params[:some_key}#Intent;package=com.mypackage;scheme=myscheme;end;"}
  end
end

在您的意图过滤器中使用自定义方案:

<data android:scheme="myscheme"/>
<data android:host="my-domain.com"/>

请参阅https://developers.google.com/chrome/mobile/docs/intents,因为它给出了此示例:

<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"> Take a QR code </a>

注意:通过这种方式提供合格的包名称,如果未安装,Android会将用户定向到与该包密钥匹配的应用的Play商店。

答案 1 :(得分:0)

http://developers.mobileapptracking.com/deeplinking-mobile-app-website/

检查一下 - 他们提出了一个不错的方法。

在您的应用中 - 您需要注册到://然后尝试在浏览器上从JS打开该URL。 如果应用程序存在 - 它导航。 如果应用不存在 - 接下来继续打开Goog​​le Play链接。

希望这符合目的。

(注意:另一种方式是意图:// - 但这有一个问题 - 当您打开Goog​​le Play时 - 您无法通过引荐来查找点击来自哪里)。 这不是你的要求 - 然后意图://绝对是最好的方式 - 我在Android 4.4浏览器,Chrome,Firefox,Opera 4.4上尝试过,并且可以正常使用。

答案 2 :(得分:0)

如果未安装应用,则需要将链接重定向到Play商店,请尝试使用Firebase动态链接。试试这个网址。 https://firebase.google.com/docs/dynamic-links

答案 3 :(得分:-1)

我会在网页上使用网址https://play.google.com/store/apps/details?id=com.anil.myapp。这将打开设备上的Play商店,如果安装了应用程序,将允许用户打开应用程序,如果不是,则安装它。无论清单中的任何意图过滤如何,这都将起作用。

如果您希望使用此方法进行意图过滤,我相信您可以尝试

<data android:scheme="https" android:host="play.google.com" android:pathPrefix="/store/apps/details?id=com.anil.myapp"/>

但我不确定这是否匹配。

答案 4 :(得分:-3)

这样做。

   boolean installed =appinstalledOrNot("package name"); 
   if(installed) {
   //do your stuff
   }

   else
   {
   Intent intent = new Intent(Intent.ACTION_VIEW);
   intent.setData(Uri.parse("market://details?id=package name"));
   startActivity(intent);
   }

 private boolean appinstalledOrNot(String uri) {
    PackageManager pm = getPackageManager();
    boolean app_installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        app_installed = true;
    }
    catch (PackageManager.NameNotFoundException e) {
        app_installed = false;
    }
    return app_installed ;
}

}