Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios4 确定应用程序是否存在,并在iOS上启动该应用程序_Ios4_Launch_Discovery - Fatal编程技术网

Ios4 确定应用程序是否存在,并在iOS上启动该应用程序

Ios4 确定应用程序是否存在,并在iOS上启动该应用程序,ios4,launch,discovery,Ios4,Launch,Discovery,是否有办法检查iOS以查看是否已安装并启动了其他应用程序?如果我记忆犹新的话,这在早期版本中是不可能的,但这已经改变了吗?可行,但很棘手 使用自定义URL方案启动已安装的应用程序,如FB或Twitter应用程序。这些应用程序既可以在其他应用程序中使用,也可以在网站上使用 不过,查看URL是否存在可能会很棘手。检测已安装应用的应用程序的一个好例子是。这里的问题是Boxcar对自定义URL有着先进的知识。我相当(99%)肯定有一个canOpenURL:,因此提前了解您想要针对的应用程序的自定义方案

是否有办法检查iOS以查看是否已安装并启动了其他应用程序?如果我记忆犹新的话,这在早期版本中是不可能的,但这已经改变了吗?

可行,但很棘手

使用自定义URL方案启动已安装的应用程序,如FB或Twitter应用程序。这些应用程序既可以在其他应用程序中使用,也可以在网站上使用

不过,查看URL是否存在可能会很棘手。检测已安装应用的应用程序的一个好例子是。这里的问题是Boxcar对自定义URL有着先进的知识。我相当(99%)肯定有一个
canOpenURL:
,因此提前了解您想要针对的应用程序的自定义方案使这一点易于实现

您可以查看一些更流行的URL

有一种方法可以找到自定义应用程序URL:

但是,如果你想扫描应用程序并推断它们的URL,就不能在非JB设备上完成


谈论Bump的员工是如何处理这个问题的。

有如下脚本


函数startMyApp()
{
document.location='yourAppScheme://';
setTimeout(函数()
{
如果(确认('您似乎没有安装应用程序,是否立即下载?'))
{
document.location=http://itunes.apple.com/us/app/yourAppId';
}
}, 300);
}
从web调用此脚本(
),您可以确定设备上是否安装了带有“yourAppScheme”方案的应用程序

如果该应用程序安装在设备上并且“yourAppScheme”已在其中注册,则该应用程序将启动。
如果应用程序未安装,您可以建议用户从iTunes安装此应用程序。

我最近一直在努力解决这个问题,下面是我提出的解决方案。请注意,仍然没有可靠的方法来检测应用程序是否启动

我从服务器上提供一个页面,在检测到用户代理时,该页面会重定向到特定于iPhone的变体。该页面的链接只能通过电子邮件/短信或Facebook共享

页面呈现引用文档的最低版本,但在加载应用程序后,会自动尝试使用隐藏文件打开该应用程序(在这种情况下,AJAX总是失败——不能使用jQuery或XMLHttpRequest)


如果注册了URL方案,应用程序将打开,用户将能够完成他们需要的所有操作。无论哪种方式,页面底部都会显示这样一条消息:“应用程序启动了吗?如果没有,您可能还没有安装它…”,并带有指向应用商店的链接。

要检查应用程序是否已安装(例如,清除),请执行以下操作:

要打开该应用程序,请执行以下操作:

BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];

如果未安装应用程序,则隐藏错误消息

首先,我们使用下面的一种代码形式——请注意,iframe可以在更多浏览器上工作。只需在应用程序的URI和应用程序商店链接中替换即可

<!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>

window.onload=函数(){
//您的应用程序的深层链接位于此处
document.getElementById(“l”).src=“我的应用程序:/”;
setTimeout(函数(){
//应用商店的链接应该放在这里——只有深层链接失败时才会触发
window.location=”https://itunes.apple.com/us/app/my.app/id123456789?ls=1&mt=8";
}, 500);
};
第二种可能性是首先依赖cookies,而javascript重定向只是作为一种回退。逻辑是这样的:

当没有应用程序的用户第一次点击你的应用程序链接时,他或她会直接重定向到应用程序商店。这是通过链接到您的应用程序来实现的,该应用程序实际上是服务器上的一个动态生成的页面,带有重定向。您创建一个cookie并在后端记录IP地址、操作系统、操作系统版本等的“数字指纹”

当用户安装并打开应用程序时,您会收集另一个“数字指纹”并将其发送到后端。现在,您的后端知道链接已安装在任何后续访问与您的应用程序关联的链接时,您的服务器将根据请求发送的cookie确保动态生成的重定向页面指向应用程序,而不是应用程序商店


这避免了难看的重定向,但需要做更多的工作。

据我所知,由于隐私问题,您无法查看设备上是否安装了应用程序。解决这个问题的方法是尝试并启动应用程序,如果应用程序没有启动,则让用户点击后退url。为了防止发生mobile safari错误,我发现将其放在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");


我认为这一定是有可能的——我这么说是因为Facebook SDK实现将启动Facebook应用程序(如果安装了),否则它将退回到Safari。你确实需要知道其他应用的一些信息,因为使用Facebook,你需要向自己的应用添加一些注册信息。是的,我想如果你知道应用标识符,你可以检查并启动它。但我找不到这方面的任何参考资料。我希望有人尝试过这个。很简单,例如:NSURL*urlApp=[NSURL URLWithString:@“fb://”;BOOL canOpenFBApp=[[UIApplication sharedApplication]canOpenURL:urlApp];printf(“\n canOpenFBApp:%i\n”,canOpenFBApp);但如果应用程序不存在,您仍然会看到来自safari的错误消息。如果应用程序未安装,有人知道如何避免来自safari的错误消息吗?是的,没错,如果应用程序未安装,我们如何避免safari中的错误消息“无法打开页面”?这似乎是一个黑客行为,也是一个不稳定的行为。。。重定向(
document.location
)后,JS应该停止执行,因此永远不应该执行
setTimeout
中的函数。我并不知道有更好的方法(除非满足您的需要)。Wou
<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");