我希望每当我的应用程序安装在手机上时,iOS都能用我的应用程序打开我的域(例如http://martijnthe.nl)中的URL,如果没有的话,可以用Mobile Safari打开.

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

有什么解决办法?

一个 idea 是:

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

2)判断User-Agent,如果是Mobile Safari,打开myprotocol://URL(try )打开iPhone应用程序,并让其打开Mobile iTunes以下载应用程序,以防try 失败

不确定这是否会奏效...有什么建议吗?谢谢!

推荐答案

我认为这样做的侵入性最小的方式如下:

  1. 判断用户代理是否为iPhone/iPod Touch的用户代理
  2. 判断是否有appInstalled个Cookie
  3. 如果cookie存在且设置为true,则将window.location设置为your-uri://(或重定向服务器端)
  4. If the cookie doesn't exist, open a "Did you know Your Site Name has an iPhone application?" modal with a "Yep, I've already got it", "Nope, but I'd love to try it", and "Leave me alone" button.
    1. "Yep"按钮将cookie设置为true并重定向到your-uri://
    2. "否"按钮将重定向到"http://itunes.com/apps/yourappname",这将打开设备上的应用store
    3. "别管我"按钮将cookie设置为false,并关闭模式

我try 过的另一个 Select 是在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://";

Ios相关问答推荐

带有动画层的UIView表示不会在工作表中设置动画

滚动时突出显示工具栏项目

如何在本地iOS没有插件的情况下处理平台线程?

如何创建具有SPM依赖项的二进制XCFramework?

带有故事板的Xcode 15 UIKit视图可以与#Preview宏一起使用吗?

由于已存在同名项目,因此无法将Mapbox.xcframework-ios.sign复制到Signature中

执行devicectl:ProcessException时出错:进程异常退出:错误:命令超时超过5.0秒

Swift locationManager.requestWhenInUseAuthorization() 不提示用户

确保方法调配的安全有效实施

不使用故事板创建 iMessage 应用程序

Apple Metal iOS 为什么 GLKMatrix4MakeLookAt 来回摇摆

在 SwiftUI 中重构提取到子视图的 GeometryReader 代码

如何在Collection 后更改并保留按钮 colored颜色 ,然后在 SwiftUI 中切换回来?

Swift 5.7 - 使存在的任何协议符合 Hashable

将值传递给导航链接视图中的文本框

按钮在 SwiftUI 中没有采用给定的高度和宽度

如何在不同设备的segment控制中管理文本大小(text size)?

在主线程上发布 NSNotification

如何使用 Contacts Framework 获取 iOS 9 中的所有联系人记录

UITextView 内容插图