当前位置:  开发笔记 > 编程语言 > 正文

是否可以为YouTube应用程序(如YouTube和地图)注册基于http +域的URL方案?

如何解决《是否可以为YouTube应用程序(如YouTube和地图)注册基于http+域的URL方案?》经验,为你挑选了8个好方法。

我希望iOS能够在我的应用程序安装在手机上时使用我的应用程序打开我的域中的URL(例如http://martijnthe.nl),如果不是,则使用Mobile Safari.

我读过可以为此创建一个唯一的协议后缀并将其注册到Info.plist中,但是如果未安装该应用程序,Mobile Safari将会出错.

什么是解决方法?

一个想法:

1)使用在任何桌面浏览器中打开的http:// URL,并通过浏览器呈现服务

2)检查用户代理,如果是移动Safari,打开myprotocol:// URL(尝试)打开iPhone应用程序并打开移动iTunes以下载应用程序,以防尝试失败

不确定这是否有效...建议?谢谢!



1> Nathan de Vr..:

我认为这样做最不具侵入性的方法如下:

    检查用户代理是否是iPhone/iPod Touch的用户代理

    检查一下appInstalledcookie

    如果cookie存在且设置为true,则设置window.locationyour-uri://(或执行重定向服务器端)

    如果cookie不存在,请打开"您知道您的站点名称是否有iPhone应用程序?" 模式与"是的,我已经得到它","不,但我想尝试它","让我一个人"按钮.

      "是的"按钮将cookie设置为true并重定向到 your-uri://

      "Nope"按钮重定向到" http://itunes.com/apps/yourappname ",这将在设备上打开App Store

      "不要管我"按钮将cookie设置为false并关闭模态

我玩过的另一个选项但发现有点笨拙的是在Javascript中执行以下操作:

setTimeout(function() {
  window.location = "http://itunes.com/apps/yourappname";
}, 25);

// If "custom-uri://" is registered the app will launch immediately and your
// timer won't fire. If it's not set, you'll get an ugly "Cannot Open Page"
// dialogue prior to the App Store application launching
window.location = "custom-uri://";


**问题**:当`window.location ="custom-uri://"成功时,后备超时不会被终止.当用户从你的应用程序返回浏览器时,计时器仍在那里并将启动应用程序存储链接.这是糟糕的用户体验.
好的解决方案 如果您的回退是另一个应用程序,它将加载_IMMEDIATELY_而不显示错误.所以不要回到http://itunes.com ...使用itms://phobos.apple.com/...来避免弹出错误!
似乎Cookie在#ios6中被沙箱化,因此您无法访问另一个应用程序设置的cookie.(例如App WebUI和Safari Mobile)
有人找到一种方法来阻止用户返回浏览器时触发原始超时?(JoJo提到的上升问题)
为了解决JoJo提到的问题,如果用户点击链接后没有经过"很多时间",则只在超时中运行代码.请参阅此解决方案:http://stackoverflow.com/a/14751543/533420

2> jb...:

只要您的后备是另一个applink,就可以在JavaScript中执行此操作.建立在内森的建议之上:


  
    open facebook with fallback to appstore
    

open unknown with fallback to appstore

Only works on iPhone!

在这里查看现场演示.


使用"itms-apps:"代替"itms:"可以节省1次重定向并直接在appstore中打开应用页面.
如果没有安装应用程序并且在重定向到应用程序商店之前,有没有人知道如何避免来自safari的"无法打开页面"错误消息?
同意李,这似乎是一个更直接的解决方案 - 虽然我仍然从Safari中获取错误消息,如果应用程序不存在,它重定向到应用程序商店.
@Rossini通过设置[响应特定主机的操作的意图过滤器]构建到Android中(http://developer.android.com/guide/topics/manifest/data-element.html)
我在Android和iOS上都使用了这个解决方案.我发现如果我将超时值从500更改为100,我没有在iOS中获得"无法打开页面"弹出对话框.我还发现Android的超时需要为50

3> ohho..:

对于iOS 6设备,有一个选项:使用智能应用程序横幅推广应用程序


可悲的是,Smart App Banner仅在Mobile Safari中支持,而不在UIWebviewComponent中支持.因此,如果您的网站显示在Twitter客户端内,则不会显示.

4> cnotethegr8..:

我发现所选答案适用于浏览器应用程序,但我遇到了在非浏览器应用程序中实现的代码问题UIWebView.

对我来说问题是Twitter应用程序上的用户会点击一个链接,通过Twitter应用程序将它们带到我的网站UIWebView.然后,当他们点击我的网站上的一个按钮时,Twitter试图变得花哨,只有window.location在网站可以访问时才完成.所以会发生什么是UIAlertView弹出说你确定要继续,然后立即重定向到App Store而不需要第二个弹出窗口.

我的解决方案涉及iframe.这避免了UIAlertView呈现允许简单和优雅的用户体验.

jQuery的

var redirect = function (location) {
    $('body').append($('').attr('src', location).css({
        width: 1,
        height: 1,
        position: 'absolute',
        top: 0,
        left: 0
    }));
};

setTimeout(function () {
    redirect('http://itunes.apple.com/app/id');
}, 25);

redirect('custom-uri://');

使用Javascript

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 () {
    redirect('http://itunes.apple.com/app/id');
}, 25);

redirect('custom-uri://');

编辑:

向iframe添加绝对位置,因此在插入时,页面底部没有随机的空白位.

另外值得注意的是,我还没有发现Android需要这种方法.使用window.location.href应该工作正常.


如果找到,这是最好的解决方案.谢谢.没有错误弹出窗口了.
此解决方案不适用于Android版Chrome.

5> severin..:

在iOS9中,Apple最终推出了注册您的应用以处理某些http://URL 的可能性:Universal Links.

它是如何工作的非常粗略的解释:

您声明有兴趣http://在您的应用中打开某些域(网址)的网址.

在指定域的服务器上,您必须指明要在哪个应用程序中打开哪些URL,这些应用程序已声明对从服务器域打开URL感兴趣.

如上所述,iOS URL加载服务会检查所有打开http://设置URL的尝试,并在安装时自动打开正确的应用程序; 没有首先通过Safari ...

这是在iOS上进行深层链接的最简洁方法,不幸的是它仅适用于iOS9及更新版本......



6> BFar..:

在Nathan和JB的答案上再次建立:

如何从没有额外点击的网址启动应用程序 如果您更喜欢不包含单击链接的临时步骤的解决方案,可以使用以下内容.使用这个javascript,我能够从Django/Python返回一个Httpresponse对象,如果安装了该应用程序,则成功启动该应用程序,或者在超时的情况下启动应用程序商店.注意我还需要将超时时间从500调整到100,以便在iPhone 4S上运行.测试并调整以使其适合您的情况.



   

// To avoid the "protocol not supported" alert, fail must open another app.
var appstorefail = "itms://itunes.apple.com/us/app/facebook/id284882215?mt=8&uo=6";

var loadedAt = +new Date;
setTimeout(
  function(){
    if (+new Date - loadedAt < 2000){
      window.location = appstorefail;
    }
  }
,100);

function LaunchApp(){
  window.open("unknown://nowhere","_self");
};
LaunchApp()





7> 小智..:
window.location = appurl;// fb://method/call..
!window.document.webkitHidden && setTimeout(function () {
    setTimeout(function () {
    window.location = weburl; // http://itunes.apple.com/..
    }, 100);
}, 600);

document.webkitHidden 是检测您的应用程序是否已被调用以及当前的safari选项卡是否转到后台,此代码来自www.baidu.com



8> q0rban..:

If you add an iframe on your web page with the src set to custom scheme for your App, iOS will automatically redirect to that location in the App. If the app is not installed, nothing will happen. This allows you to deep link into the App if it is installed, or redirect to the App Store if it is not installed.

For example, if you have the twitter app installed, and navigate to a webpage containing the following markup, you would be immediately directed to the app.



    
    iOS Automatic Deep Linking
    
    
        
        

Website content.

Here is a more thorough example that redirects to the App store if the App is not installed:



    
    iOS Automatic Deep Linking
    
    
    
    
    
    
    

Website content.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有