【问题标题】:Redirecting to Google Play store, if app is not installed while launching android app from browser重定向到 Google Play 商店,如果在从浏览器启动 android 应用程序时未安装应用程序
【发布时间】:2014-03-05 07:03:18
【问题描述】:

我正在从浏览器启动 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 商店。

我怎样才能做到这一点?

【问题讨论】:

标签: android


【解决方案1】:

添加意图过滤器很好,但是当用户代理匹配时,这是我在安卓设备上打开意图的方法。我专门使用 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 商店。

【讨论】:

  • 来自链接“这适用于 Chrome for Android 浏览器,版本 18 及更早版本。当然,它也适用于 Android 浏览器。”尽管“和更早”部分令人困惑,但我认为它的意思是说“和更晚”。它可以在我的带有 Chrome 33 的手机上运行。
【解决方案2】:

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

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

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

希望这能达到目的。

(注意:另一种方式是 intent:// - 但这有一个问题 - 当您打开 Google Play 时 - 您无法通过引荐来源网址来找出点击的来源)。 这不是您的要求 - 然后 intent:// 绝对是最好的方法 - 我在 Android 4.4 上的 Android 浏览器、Chrome、Firefox、Opera 上进行了尝试,并且在所有设备上都可以正常工作。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我会在网页上使用 URL 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"/>
      

      但我不确定这是否会匹配。

      【讨论】:

      • 这是一个不错的网页链接,但不是所要求的。
      【解决方案5】:

      这样做。

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

      }

      【讨论】:

      • 代码在这里,您可以选择在哪里使用它。当您单击按钮或启动应用程序时@Anilkumar
      • @Shadow .. 很好...感谢代码...但是我在点击链接 myapp://myhostname 时从浏览器启动应用程序,并且要求就像应用程序不在设备中。所以我不能在代码中的任何地方使用..希望你理解情况......
      • 这个问题需要一个带有某种意图过滤魔法或网页的 html/javascript 的答案。
      猜你喜欢
      • 2019-10-15
      • 2012-11-11
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 2019-03-19
      • 2014-10-24
      相关资源
      最近更新 更多