我从浏览器启动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商店。
我怎样才能做到这一点?
答案 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。 如果应用程序存在 - 它导航。 如果应用不存在 - 接下来继续打开Google Play链接。
希望这符合目的。
(注意:另一种方式是意图:// - 但这有一个问题 - 当您打开Google 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 ;
}
}