是否可以检查iOS以查看是否已安装另一个应用程序然后启动该应用程序?如果记忆为我服务,这在早期版本中是不可能的,但是是否已更改?
可行,但比较棘手。
启动已安装的应用程序,例如FB或Twitter应用程序,是使用自定义URL方案完成的。这些可以在其他应用程序以及网站中使用。
Here's an article about how to do this with your own app。
但是,查看URL是否存在可能很棘手。检测安装的应用程序的一个很好的例子是Boxcar。这里的问题是Boxcar对自定义URL有很深的了解。我相当(99%)确定存在canOpenURL:
,因此提前知道您要定位的应用程序的自定义方案就很容易实现。
Here's a partial list一些您可以检查的较流行的URL。
有一种找出自定义应用程序URL的方法:https://www.amerhukic.com/finding-the-custom-url-scheme-of-an-ios-app
但是,如果要扫描应用程序并推断其URL,则不能在非JB设备上完成。
[Here's a blog post谈论凹凸的人们如何处理该问题。
有如下脚本。
<script type="text/javascript">
function startMyApp()
{
document.location = 'yourAppScheme://';
setTimeout( function()
{
if( confirm( 'You do not seem to have Your App installed, do you want to go download it now?'))
{
document.location = 'http://itunes.apple.com/us/app/yourAppId';
}
}, 300);
}
</script>
从网络上调用此脚本(<a href="#" onclick="startMyApp()">Try to start MyApp</a>
),您可以确定设备上是否安装了具有方案“ yourAppScheme”的应用。
如果该应用程序已安装在设备上并且在其中注册了“ yourAppScheme”,则该应用程序将启动。如果未安装该应用程序,则可以建议用户从iTunes安装此应用程序。
要检查是否安装了应用(例如清除):
BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];
要打开该应用程序:
BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];
如果未安装该应用,则隐藏错误消息
在Branch,我们使用以下形式的代码-请注意,iframe可在更多浏览器上使用。只需替换您应用的URI和您的App Store链接即可。
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
window.onload = function() {
// Deep link to your app goes here
document.getElementById("l").src = "my_app://";
setTimeout(function() {
// Link to the App Store should go here -- only fires if deep link fails
window.location = "https://itunes.apple.com/us/app/my.app/id123456789?ls=1&mt=8";
}, 500);
};
</script>
<iframe id="l" width="1" height="1" style="visibility:hidden"></iframe>
</body>
</html>
[还有第二种可能性,它首先依赖cookie,而javascript仅作为后备重定向。这是逻辑:
[没有该应用程序的用户首先点击指向您应用程序的链接时,他或她将直接重定向到App Store。这是通过指向应用程序的链接来实现的,该链接实际上是带有重定向的服务器上动态生成的页面。您创建一个cookie,并在后端记录IP地址,操作系统,操作系统版本等的“数字指纹”。
[当用户安装并打开应用程序时,您将收集另一个“数字指纹”并将其发送到后端。现在您的后端知道链接已安装。在随后访问与您的应用程序相关联的链接时,您的服务器将根据随请求发送的cookie确保动态生成的重定向页面引向该应用程序,而不是App Store。
这避免了丑陋的重定向,但需要做更多的工作。
据我所知,由于隐私问题,您无法查看设备上是否安装了应用。解决此问题的方法是尝试启动应用程序,如果没有启动该应用程序,则请用户点击后备网址。为了防止发生移动浏览器错误,我发现将其放置在iframe中有助于解决该问题。
这是我使用的一小段代码。
<form name="mobileForm" action="mobile_landing.php" method="post">
<input type="hidden" name="url" value="<?=$web_client_url?>">
<input type="hidden" name="mobile_app" value="<?=$mobile_app?>">
<input type="hidden" name="device_os" value="<?=$device_os?>">
</form>
<script type="text/javascript">
var device_os = '<? echo $device_os; ?>';
if (device_os == 'ios'){
var now = new Date().valueOf();
setTimeout(function () {
if (new Date().valueOf() - now > 100)
return;
document.forms[0].submit(); }, 5);
var redirect = function (location) {
var iframe = document.createElement('iframe');
iframe.setAttribute('src', location);
iframe.setAttribute('width', '1px');
iframe.setAttribute('height', '1px');
iframe.setAttribute('position', 'absolute');
iframe.setAttribute('top', '0');
iframe.setAttribute('left', '0');
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
};
setTimeout(function(){
window.close()
}, 150 );
redirect("AppScheme");
我最近为此感到挣扎,这是我想出的解决方案。请注意,仍然没有确定方法可以检测应用程序是否启动。
我从服务器提供一个页面,该页面在检测到用户代理后会重定向到特定于iPhone的变体。只能通过电子邮件/ SMS或Facebook共享指向该页面的链接。
该页面呈现了所引用文档的最低版本,但是在加载后立即尝试使用隐藏的
如果注册了URL方案,则该应用将打开,用户将能够执行他们需要的所有操作。无论哪种方式,页面都在底部显示如下消息:“应用程序启动了吗?否则,您可能尚未安装它……。”并带有指向商店的链接。