在App中打开URL

这段代码展示了在iOS和Android平台上如何打开一个URL。对于iOS,根据系统版本使用不同的方法,针对iOS 10.0及以上系统使用`openURL:options:completionHandler:`,而低于该版本则使用`openURL:`。在Android中,通过创建Intent并设置ACTION_VIEW来启动URL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不废话,直接上代码!

ios:

+(void) openURL:(NSString *)url{
    //需要注意 url不能带有中文。
    NSLog(@"openURL!!!!!");
    NSLog(url);

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
        //设备系统为IOS 10.0或者以上的
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url] options:@{} completionHandler:nil];
    }else{
        //设备系统为IOS 10.0以下的
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
    }
}

android:

public void openURL(String url){
    final Uri uri = Uri.parse(url);

    final Intent it = new Intent(Intent.ACTION_VIEW, uri);

    startActivity(it);
}

### 如何通过自定义URL Scheme或Universal Links打开移动应用 #### 配置URL Scheme 为了使应用程序能够响应特定的链接并被启动,开发者可以在iOSAndroid项目中配置URL Scheme。URL Scheme是一种类似于HTTP协议的机制,允许其他应用或者浏览器通过指定的Scheme来调起目标应用[^2]。 在iOS平台中,需要在Xcode项目的`Info.plist`文件里添加一个新的键值对`CFBundleURLTypes`,其中包含`CFBundleURLName`和`CFBundleURLSchemes`字段。例如: ```xml <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.example.app</string> <key>CFBundleURLSchemes</key> <array> <string>myapp</string> </array> </dict> </array> ``` 上述代码片段表示此应用可以接受以`myapp://`开头的链接请求。 #### 使用Universal Links 相比传统的URL Scheme方式,Universal Links提供了一种更现代、用户体验更好的解决方案。它不需要预先设定固定的scheme名称,而是基于标准HTTPS链接工作。如果设备上已安装关联的应用,则点击这些链接时会自动进入应用内部;反之,在未安装的情况下则会在默认浏览器中显示相应网页内容[^4]。 要在iOS平台上启用Universal Links功能,首先需确保服务器端支持Apple App Site Association (ASA) 文件服务,并将其放置于网站根目录下(`/.well-known/apple-app-site-association`)。其次还需修改本地工程设置,在Entitlements文件中声明相关域列表(App Domains)。 以下是苹果官方推荐的一种简单的ASA JSON结构示例: ```json { "applinks": { "apps": [], "details": [ { "appID": "ABCD1234.com.example.app", "paths": ["/path/to/resource", "/another/path/*"] } ] } } ``` 完成以上步骤之后,当用户访问匹配路径规则内的任何网址时,系统都会优先尝试唤起对应版本的应用程序而不是加载Web页面。 #### 处理深度链接逻辑 无论采用哪种技术方案,都需要考虑如何解析传入参数并将控制权交给合适的控制器实例去执行具体操作。这通常涉及到注册全局监听器以及编写路由映射表等工作[^1]。 对于Swift语言编写的iOS客户端而言,可能涉及重写AppDelegate中的方法如`application(_:open:options:)` 或 SceneDelegate 中的新接口 `scene(_ scene: openURLContexts:)` 来捕获外部发起的意图数据包。 最后值得一提的是,若希望进一步增强跨应用交互能力还可以引入第三方库支持x-callback-url模式,从而实现更加灵活的任务链调度需求[^3]。 ```swift func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool { // Handle the incoming URL here. return true } // For iOS 13 and later with multiple windows support enabled apps: func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { guard let url = URLContexts.first?.url else { return } // Process this deep link as needed... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值