ChatGPT解决这个技术问题 Extra ChatGPT

Possible to handle your own http URL schemes in iOS?

iTunes, App Store and YouTube on iOS clearly register http://... URL schemes to open their apps.

Can anyone do that, not just your own protocol?

The reason I want to do this is that I am working on an app for a festival. I want to "intercept" links to specific pages on the website and launch the app instead, if installed.

So far I have no had much luck


C
Community

The way you can do this for "http://" URLs (and what I think Apple and Spotify do) this is to:

Register a custom URL scheme like the other answers have shown. Set up your HTTP URL to point to a real webpage. Put a script on that page to redirect to your custom URL if is on iOS.

For example, here is a sample page which will take you to the Twitter app for a particular user or the Twitter website depending upon if you are on the web or on your iOS device:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Twitter</title>
</head>
<body>
    <script type="text/javascript">
        var username = document.location.search.substr(1);
        document.location.replace(
            "standalone" in window.navigator ?
            'twitter:@'+username :              // iOS
            'http://twitter.com/'+username);    // others
    </script>
</body>
</html>

Try it out here: http://bl.ocks.org/d/3153819/?mckamey


Yes, that is what I am doing now. Not quite how the App Store does it though as it goes straight to the app store without going to Safari first.
what if your app is not installed?
It might also be possible to use a hidden iFrame on the page pointed at the custom scheme. If it fails, no one notices anything. If it succeeds then it takes control away from the page to the app.
@mckamey Yes, now I think Apple's way is better. User expects the browser to open with a http url, and iOS safari has smart banner allowing user to switch to app if it is installed. On the other hand, if http is allowed as app url, then a third-party app can hijack an official website, which is a secuirty hole to say the least.
@NeoWang Apple's way is not better. Android allows the scheme, host, path, and port to be defined, and I haven't heard of any problems with that. The user is always allowed to choose which app they want to open the url with so no hijacking would occur without the user being aware of it. Furthermore, in Android, if the user doesn't want the app to open it, the browser is guaranteed to be able to, making much more dynamic than iOS.
M
Marcus Adams

iOS 9 supports Universal Links, which allows iOS to launch an app based on a standard http:// URL (based on the hostname) without the user having to go through Safari.

It requires some web server configuration (you need a website), but once setup, the registered app will open the link instead of Safari.

For the users that don't have iOS 9, you can use Smart Banners to ease the experience.


M
Marius Ciocanel

Unfortunately I don't think you can do that. You can register your own custom scheme e.g yourFestival:// and pass data from the outside world (SMS , email , other apps) to your app.

I wrote a blog post about this here : Using custom schemes and passing data between iOS apps.

I hope this helps.


E
Eiko

No, you can only register custom schemes.

And I cannot see Apple doing this, either...


Bummer. Apple certainly does it. Email (or SMS) yourself and iTunes store link (itunes....). Click on it in mail on the iPhone. The App Store opens, without going to Safari first.
No. For email, there is (obviously) the mailto: scheme, for sms it's sms:, and in case of iTunes I think they use ordinary http:, on the first call, but then redirect to something else (which can be done transparently so the user won't see it).
@HappyFlow Not sure what you are trying to tell me?
Doesn't that mean that you can't implement a web browser that would open when a url is clicked?
d
diidu

The question is old, but since I came across to this page now, years later, when searching for answer to the same question, I'll add answer on how to do it now:

Use Universal links. First enable "Associated Domains" or you App ID in developer.apple.com. Then add your domain as applink in Xcode (select Target->Signing & Capabilities->Associated Domains) and then create an apple-app-site-association file on your website.

Details are explained here.