首页 > 其他分享 >iOS开发基础117-Hybrid

iOS开发基础117-Hybrid

时间:2024-07-17 13:40:48浏览次数:13  
标签:原生 插件 iOS JavaScript Hybrid 117 Cordova WKWebView

Hybrid

Hybrid(混合)开发是一种结合了Web技术和原生应用开发技术的方法,旨在简化跨平台应用开发。通过Hybrid开发,开发者可以用HTML、CSS和JavaScript等前端技术编写代码,并将其运行在一个内嵌的浏览器环境中,从而实现跨平台的移动应用。

什么是Hybrid开发?

Hybrid开发主要是指将应用的用户界面和业务逻辑部分用Web技术(HTML、CSS、JavaScript)编写,然后通过一个中间层(通常是内嵌的浏览器WebView)在移动设备上运行。这样做的主要目标是“一次开发,多平台运行”,即可以用一套代码同时支持iOS、Android等多个平台。

Hybrid开发的核心组件

  1. WebView:

    • Hybrid应用通常运行在一个内嵌的浏览器环境中,这个环境就是WebView。WebView是一个可以在原生应用中嵌入网页浏览器的组件,能够解析和运行HTML、CSS和JavaScript等Web标准技术。
    • 在iOS平台,常用的是UIWebView或WKWebView(推荐用WKWebView,因为性能更好)。
    • 在Android平台,常用的是WebView组件。
  2. JavaScript Bridge(JS桥梁):

    • JavaScript Bridge是Hybrid应用中Web和原生部分通信的桥梁。通过JS Bridge,JavaScript可以调用原生代码,原生代码也可以调用JavaScript,从而实现两者之间的数据交互。
    • 这种双向通信使得Web部分能够调用设备的原生功能(如相机、地理位置、存储等),从而突破Web技术的限制。
  3. Hybrid框架:

    • 经典的Hybrid开发框架有Cordova(以及其厂商版本PhoneGap)、Ionic等。它们提供了WebView封装、JavaScript Bridge以及一系列插件和API,使得开发者可以更方便地调用设备的原生功能。
    • 例如:Cordova插件库提供访问设备硬件和其他功能的插件,Ionic提供了一整套UI组件库和工具链,极大地简化了Hybrid开发的流程。

Hybrid开发的常见框架

1. Apache Cordova/PhoneGap

Apache Cordova 是一个开源的移动开发框架,它允许开发者使用HTML5、CSS3和JavaScript创建跨平台的移动应用。PhoneGap是Adobe公司提供的Cordova的一个商业版本。

底层原理
  • WebView容器: Cordova创建了一个原生的应用容器,该容器内嵌了一个WebView,用于运行Web应用。
  • JavaScript APIs: Cordova提供了一系列JavaScript APIs,让Web应用可以调用原生功能,如相机、文件系统等。
  • 插件机制: Cordova有一个庞大的插件库,开发者可以使用这些插件扩展应用的功能,也可以开发自定义插件。
document.addEventListener('deviceready', function() {
    console.log('Device is ready');
    // 调用原生相机
    navigator.camera.getPicture(onSuccess, onFail, { 
        quality: 50,
        destinationType: Camera.DestinationType.DATA_URL
    });
}, false);

function onSuccess(imageData) {
    var image = document.getElementById('myImage');
    image.src = "data:image/jpeg;base64," + imageData;
}

function onFail(message) {
    alert('Failed because: ' + message);
}
优缺点
优点
  • 跨平台: 一次开发,多平台使用。
  • 丰富的插件库: 大量的插件可以方便地访问设备功能。
  • 活跃的社区支持: 丰富的社区资源和支持。
缺点
  • 性能问题: 由于依赖WebView,有时性能不如完全原生应用。
  • 复杂的调试: WebView和原生代码的混合调试相对复杂。
  • 用户体验: 在UI和用户体验上,有时不如完全原生的流畅。

2. Ionic

Ionic 是一个基于Cordova构建的前端框架,它提供了丰富的UI组件库和工具链,使得开发者可以更容易地创建高质量的Hybrid应用。

底层原理
  • Ionic框架: 提供了一系列的UI组件和工具,可与Angular等框架集成,极大地简化了开发。
  • Cordova集成: Ionic实际运行在Cordova之上,利用Cordova提供的插件和API来访问设备功能。
  • 自定义主题: 提供丰富的主题和样式,可以灵活定制。
import { Camera, CameraOptions } from '@ionic-native/camera/ngx';

constructor(private camera: Camera) { }

takePicture() {
  const options: CameraOptions = {
    quality: 100,
    destinationType: this.camera.DestinationType.FILE_URI,
    encodingType: this.camera.EncodingType.JPEG,
    mediaType: this.camera.MediaType.PICTURE
  };

  this.camera.getPicture(options).then((imageData) => {
    let base64Image = 'data:image/jpeg;base64,' + imageData;
  }, (err) => {
    console.log(err);
  });
}
优缺点
优点
  • 优质的UI组件: 提供了丰富而专业的UI组件库,适合快速开发。
  • 与Angular高度集成: 适合熟悉Angular的开发者。
  • 全面的文档和社区支持: 拥有丰富的教程和活跃的社区。
缺点
  • 性能限制: 同样依赖WebView,性能可能不如原生应用。
  • 学习曲线: 对那些不熟悉Angular的开发者来说,可能需要适应。

Hybrid开发的优缺点

优点

  1. 跨平台: 只需一次开发即可在多个平台上运行,节省开发时间和成本。
  2. 快速开发和部署: 利用Web技术,可以快速迭代开发和部署。
  3. 代码可重用: 大量代码和逻辑可以在多个平台间共享,减少重复工作。
  4. 灵活性: 可以利用各种Web技术和工具,同时也可以调用设备的原生功能。

缺点

  1. 性能问题: Hybrid应用的性能通常不如完全原生应用,但通过优化可以改善。
  2. 用户体验: 在一些高交互、高性能要求的应用中,用户体验可能不如原生应用。
  3. 调试复杂: 由于涉及Web和原生代码的混合,调试可能更复杂。
  4. 依赖第三方框架和工具: 虽然这些工具提供了方便,但也带来了额外的学习和维护成本。

小结

Hybrid开发是移动应用开发的一种重要方法,通过结合Web技术和原生技术,可以快速开发跨平台应用,尤其适合一些业务逻辑复杂、UI交互要求较低的应用场景。然而,开发者需要根据具体的项目需求和技术栈选择合适的开发方式,有时完全原生开发或其他方法(如React Native、Flutter)可能更适合。了解并掌握Hybrid开发及其原理,可以帮助开发者在不同场景下做出更好的技术决策。

iOS项目中接入Hybrid

在iOS项目中,接入Hybrid框架(如Cordova、Ionic)通常涉及多个步骤,包括项目创建、添加平台、安装插件、配置WebView等。以下是一个详细深入的指南,介绍如何在iOS项目中接入Hybrid框架,并解释其底层实现原理。

1. 使用Cordova接入iOS项目

环境准备

首先,需要确保已安装以下工具:

  • Node.js 和 npm(Node 包管理器)
  • Cordova CLI

通过命令行进行安装:

# 安装 Cordova
npm install -g cordova

创建项目

接下来,使用Cordova CLI创建一个新的Cordova项目:

# 创建一个新的 Cordova 项目
cordova create MyHybridApp com.example.myhybridapp MyHybridApp
cd MyHybridApp

添加iOS平台

然后,添加iOS平台支持:

# 添加 iOS 平台
cordova platform add ios

编写Web部分代码

在项目目录下的 www 文件夹中,你可以编写HTML、CSS和JavaScript代码,这部分代码将运行在WebView中。

例如,创建一个简单的 index.html 文件:

<!DOCTYPE html>
<html>
<head>
    <title>My Hybrid App</title>
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript">
        document.addEventListener('deviceready', function() {
            console.log('Cordova is ready');
        }, false);
    </script>
</head>
<body>
    <h1>Welcome to My Hybrid App!</h1>
</body>
</html>

安装插件

Cordova插件可以让你访问设备的原生功能。通过以下命令安装相机插件:

# 安装相机插件
cordova plugin add cordova-plugin-camera

在JavaScript代码中调用这个插件:

<!DOCTYPE html>
<html>
<head>
    <title>My Hybrid App</title>
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript">
        document.addEventListener('deviceready', function() {
            document.getElementById('takePictureButton').addEventListener('click', takePicture);
        }, false);

        function takePicture() {
            navigator.camera.getPicture(onSuccess, onFail, { 
                quality: 50,
                destinationType: Camera.DestinationType.DATA_URL
            });
        }

        function onSuccess(imageData) {
            var image = document.getElementById('myImage');
            image.src = "data:image/jpeg;base64," + imageData;
        }

        function onFail(message) {
            alert('Failed because: ' + message);
        }
    </script>
</head>
<body>
    <h1>Welcome to My Hybrid App!</h1>
    <button id="takePictureButton">Take Picture</button>
    <img id="myImage" />
</body>
</html>

构建并运行

最后,构建项目并在iOS模拟器或设备上运行:

# 构建 iOS 项目
cordova build ios

# 运行 iOS 项目
cordova emulate ios

底层实现原理

WebView

在Cordova环境中,核心组件是WebView。WebView是一个在原生应用中嵌入浏览器功能的组件,用于加载和运行Web内容。在iOS上,早期使用的是 UIWebView,而现在推荐使用性能更好的 WKWebView

  • UIWebView: 传统的WebView组件,但不推荐使用,因为性能较差。
  • WKWebView: 现代WebView组件,性能和稳定性更好。

WKWebView 通过加载HTML内容,将Web应用嵌入到原生应用中。你可以在Xcode工程中手动添加 WKWebView 组件或使用Cordova自动生成的模板。

JavaScript Bridge

JavaScript Bridge是Cordova实现的重要部分,它允许JavaScript与原生代码之间进行通信。具体实现通常包括:

  1. 插件机制: Cordova插件通过定义JavaScript接口和对应的原生代码实现,提供对设备功能的访问。例如,cordova-plugin-camera插件将JavaScript调用映射到原生相机API。
navigator.camera.getPicture(onSuccess, onFail, options);
  1. 消息传递: 当JavaScript调用插件接口时,会生成一个消息,将其传递给原生层。例如在iOS上,Cordova通过Objective-C/Swift代码监听这些消息,并调用相应的原生API。结果再通过相同的机制传回JavaScript环境。
// Example Objective-C method to handle JavaScript call
- (void)getPicture:(CDVInvokedUrlCommand*)command {
    // Call native camera API
}
  1. 调用原生API: 原生层实现具体功能,如调用相机、获取位置等。实现结果通过JavaScript Bridge返回JavaScript环境。例如,使用 CDVPluginResult 将结果返回给JavaScript。
// Send result back to JavaScript
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:imageBase64];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];

插件机制

Cordova的插件机制非常灵活,允许开发者定义和使用自定义插件。当安装插件时,Cordova会将插件代码复制到项目中,并更新配置文件以确保插件被正确加载。例如安装cordova-plugin-camera插件时,Cordova会在项目中加载对应的JavaScript接口和原生代码实现。

构建工具链

Cordova有一套完整的工具链,用于管理项目、平台和插件。主要工具包括:

  • cordova create: 创建新项目。
  • cordova platform add: 添加平台,如iOS或Android。
  • cordova plugin add: 安装插件。
  • cordova build: 构建项目。
  • cordova run/cordova emulate: 运行或模拟项目。

这些工具简化了开发过程,使得开发者可以专注于应用逻辑和用户界面,而无需处理繁琐的原生代码细节。

小结

通过以上步骤,你可以在iOS项目中成功接入Cordova,同时了解其底层实现细节,包括WebView的使用、JavaScript和原生代码的通信机制(JavaScript Bridge)、插件机制等。借助Cordova,你可以轻松实现一次开发,跨平台运行,提高开发效率,降低维护成本。希望这篇指南能够帮助你更好地理解和应用Hybrid开发技术。

WKWebView的接入

作为 iOS 开发人员,如果你需要在 WKWebView 上处理特定的业务逻辑,需要涉及以下几个步骤:

  1. 初始化 WKWebView:

    • 配置 WKWebView
    • 在视图控制器中添加并展示 WKWebView
  2. 实现与 JavaScript 的交互:

    • 配置 WKScriptMessageHandler 处理 JavaScript 发出的消息。
    • 使用 evaluateJavaScript 方法从原生代码执行 JavaScript 脚本。
  3. 管理请求和导航:

    • 实现 WKNavigationDelegate 以管理加载状态和导航决策。

下面是一个具体的代码实例,展示如何在 WKWebView 中处理这些步骤。

1. 初始化 WKWebView

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate, WKScriptMessageHandler {

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 创建 WKWebView 配置
        let webConfiguration = WKWebViewConfiguration()
        
        // 添加 JavaScript 消息处理器
        webConfiguration.userContentController.add(self, name: "iosHandler")

        // 初始化 WKWebView 并设置导航代理
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.navigationDelegate = self
        
        // 设置 WebView 的约束
        view.addSubview(webView)
        webView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            webView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            webView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            webView.topAnchor.constraint(equalTo: view.topAnchor),
            webView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])
        
        // 加载本地或远程 HTML
        if let url = Bundle.main.url(forResource: "index", withExtension: "html") {
            webView.loadFileURL(url, allowingReadAccessTo: url)
        }
    }

    // 处理 JavaScript 发出的消息
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "iosHandler", let messageBody = message.body as? String {
            print("Received message from JavaScript: \(messageBody)")
            // 在这里处理来自 JavaScript 的消息
        }
    }
}

在这个示例中:

  • 初始化 WKWebView:我们创建了一个 WKWebViewConfiguration 对象,并设置了一个消息处理器(iosHandler)。
  • 添加约束:确保 WKWebView 填满整个视图控制器的视图。
  • 加载 HTML:从本地加载一个 index.html 文件。如果需要加载远程 URL,可以替换为 webView.load(URLRequest(url: URL))

2. 与 JavaScript 交互

为了在 WKWebView 中与 JavaScript 交互,你需要在 HTML 文件中编写 JavaScript 代码,并在需要时发送消息给原生代码。

在你的 index.html 文件中,编写如下 JavaScript 代码:

<!DOCTYPE html>
<html>
<head>
    <title>WKWebView Example</title>
</head>
<body>
    <h1>Hello from WebView</h1>
    <button onclick="sendMessageToiOS()">Send Message to iOS</button>

    <script type="text/javascript">
        function sendMessageToiOS() {
            if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.iosHandler) {
                window.webkit.messageHandlers.iosHandler.postMessage('Hello from JavaScript');
            }
        }
    </script>
</body>
</html>

3. 管理请求和导航

为了更好地管理 WKWebView 的导航过程,你还可以实现 WKNavigationDelegate 的相关方法:

extension ViewController {

    // 页面开始加载时调用
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        print("Page started loading")
    }

    // 页面加载成功时调用
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("Page finished loading")
    }

    // 页面加载失败时调用
    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        print("Page failed to load: \(error.localizedDescription)")
    }

    // 拦截请求并决定是否允许导航
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        let url = navigationAction.request.url
        
        if url?.scheme == "https" && url?.host == "safe.example.com" {
            decisionHandler(.allow)
        } else {
            decisionHandler(.cancel)
        }
    }
}

在这个扩展中:

  • didStartProvisionalNavigation: 当页面开始加载时调用,可以在这里实现加载指示器等。
  • didFinish: 当页面加载完成时调用,可以在这里隐藏加载指示器等。
  • didFail: 当页面加载失败时调用,可以在这里处理错误信息。
  • decidePolicyFor: 拦截每个URL请求,并决定是否允许导航。你可以根据URL的scheme、host等属性来决定是否允许加载该请求。

4. 从原生代码执行 JavaScript

如果你需要从原生代码中执行 JavaScript,例如将一些数据传递给网页,或者调用网页中的特定函数,可以使用 evaluateJavaScript 方法:

func executeJavaScript() {
    let script = "document.body.style.backgroundColor = '#FF0000';"
    webView.evaluateJavaScript(script) { (result, error) in
        if let error = error {
            print("Error executing JavaScript: \(error.localizedDescription)")
        } else {
            print("JavaScript executed successfully")
        }
    }
}

在这个示例中,我们将页面的背景颜色更改为红色。

小结

通过以上步骤,你可以在 iOS 项目中有效地使用 WKWebView,并实现与 JavaScript 的双向交互。在实际项目中,随着业务需求的复杂化,可能需要进一步处理更多的 JavaScript 消息或更复杂的导航逻辑。但是,通过掌握上述基础知识和代码示例,你已经可以开始在 iOS 应用中使用 WKWebView 实现许多常见的需求。

还没完

通过上述 WKWebView 的基本处理,可以实现与 JavaScript 的双向交互,但这只是实现 Hybrid 应用的基础步骤。Hybrid 混合开发真正的意义在于将 Web 技术与原生技术相结合,以实现跨平台的一次开发多次发布。要实现一个完整的 Hybrid 应用,还需要考虑以下几点:

1. 完整的 Hybrid 框架

借助像 Cordova、Ionic 等框架,你可以更方便地管理平台、插件,并实现许多复杂的功能。这些框架提供了一套完整的工具链和插件库,大大简化了开发和集成过程。

2. 插件机制

为了充分利用设备的原生功能(如相机、GPS、加速计等),需要完整的插件机制。虽然你可以手动在 WKWebView 中实现部分功能,但成熟的 Hybrid 框架已经为你封装好了各种插件,可以极大地提高开发效率。

3. 跨平台能力

Hybrid 应用的一个核心优势是跨平台能力。通过使用框架,你可以一次编写代码,然后构建、发布到多个平台(如 iOS 和 Android),这比仅仅基于 WKWebView 的解决方案更具优势。

4. 项目构建和管理工具

Hybrid 框架提供了丰富的工具链,用于项目管理、平台构建和插件安装。如 Cordova 提供的 cordova-cli,可以方便地创建、管理和构建项目。

通过 Cordova 实现完整的 Hybrid 应用

下面是一个通过 Cordova 实现更完整的 Hybrid 应用的示例过程:

1. 安装 Cordova

npm install -g cordova

2. 创建一个新的 Cordova 项目

cordova create MyHybridApp com.example.myhybridapp MyHybridApp
cd MyHybridApp

3. 添加 iOS 平台

cordova platform add ios

4. 添加插件

cordova plugin add cordova-plugin-camera

5. 编写 HTML 和 JavaScript 代码

www 文件夹中编写 HTML 和 JavaScript 代码(同前面示例中的 index.html)。

6. 构建并运行

cordova build ios
cordova emulate ios

Cordova 内部实现的补充

  • 多平台支持:通过 cordova platform add,可以轻松添加 Android、iOS 等多种平台。
  • 插件管理:通过 cordova plugin add,方便地添加和管理各种插件,以访问原生设备功能。
  • 项目构建:通过 cordova build,可以生成目标平台的应用包。框架内部会处理很多繁琐的配置和依赖管理工作。

更复杂的插件开发

如果需要实现更复杂的功能,可以开发自定义的 Cordova 插件,并在项目中引用。例如,如果你需要访问特定的硬件设备或第三方SDK,可以通过创建插件,把这些功能封装在插件中,然后在项目中调用。

一个完整的自定义插件示例

  1. 创建插件目录结构
cordova plugin create my-plugin --id cordova-plugin-myplugin --version 1.0.0
  1. 实现插件的 iOS 部分
    src/ios 目录下创建相应的 Swift 或 Objective-C 文件,实现原生代码。

  2. 添加插件到项目

cordova plugin add path/to/my-plugin

总结

虽然你可以手动使用 WKWebView 实现一些 Hybrid 应用的功能,但更推荐的方法是使用成熟的 Hybrid 框架如 Cordova 或 Ionic。这些框架提供了丰富的工具链和插件库,可以大大简化开发、提升效率,并确保应用的跨平台能力。通过结合这些框架,你将能够更全面地开发高效且功能丰富的 Hybrid 应用。

标签:原生,插件,iOS,JavaScript,Hybrid,117,Cordova,WKWebView
From: https://www.cnblogs.com/chglog/p/18307139

相关文章

  • iOS开发基础116-性能监控
    在iOS开发中,性能监控是确保应用流畅运行和用户体验的关键。常用的性能监控工具能够帮助开发者实时监控系统性能,检测和诊断性能问题。下面列举几款常用的iOS性能监控工具,深入解析其底层原理、优缺点。1.InstrumentsInstruments是由Apple官方提供的用于性能分析和调试的工具。它......
  • iOS开发基础114-YYCache
    YYCache是一个高性能、易用的缓存组件,广泛用于iOS开发中。其设计宗旨是高效且灵活,可以处理不同类型的缓存需求。以下将介绍YYCache的常见应用场景,并深入分析其底层原理。应用场景1.图片缓存在展示大量图像的应用(比如社交媒体应用)中,缓存机制可以大幅减少网络请求,提升用户......
  • iOS开发基础115-Socket
    在现代网络编程中,Socket(套接字)是实现网络通信的主要机制。Socket提供了端到端的双向通信接口,使得不同主机上的进程能够通过网络直接通信。在iOS开发中,经常需要使用Socket进行网络请求、实时通信(如聊天、游戏等)。以下将详细介绍Socket的概念,并列举iOS开发中常用的三方Socket框架,深......
  • iOS开发基础113-Unity3D
    在iOS项目中接入Unity3D项目可以创建更复杂且互动性强的应用。Unity3D通常用于游戏开发,它可以与原生iOS项目进行集成。以下是详细的步骤和示例代码,且深入讨论其底层原理。步骤1.创建Unity3D项目打开Unity3D并创建一个新项目。完成项目场景和逻辑编写。在Unity3D项目中,设置i......
  • iOS开发基础112-GCD
    GrandCentralDispatch(GCD)在iOS中的常见运用场景GCD是Apple提供的多线程编程技术,旨在提供高效、轻量级的方式来执行并发任务。GCD使得管理线程变得简单且提高了应用程序的性能。以下是GCD在iOS中的一些常见运用场景,并详细介绍其底层原理。1.异步任务处理场景:网络请求使用GCD......
  • iOS开发基础110-Core Graphics应用场景
    CoreGraphics是一种强大的二维图形绘制框架,广泛应用于iOS开发中。以下是几个常见的运用场景以及对应的代码示例:1.自定义视图绘制通过覆盖UIView的drawRect:方法,可以自定义视图的外观。示例代码:#import<UIKit/UIKit.h>@interfaceCustomView:UIView@end@implementat......
  • iOS开发基础109-网络安全
    在iOS开发中,保障应用的网络安全是一个非常重要的环节。以下是一些常见的网络安全措施及对应的示例代码:Swift版1.使用HTTPS确保所有的网络请求使用HTTPS协议,以加密数据传输,防止中间人攻击。示例代码:在Info.plist中配置AppTransportSecurity(ATS):<key>NSAppTransportSecur......
  • 71、Flink 的 Hybrid Source 详解
    HybridSource1.概述HybridSource解决了从异构数据源顺序读取输入以生成单个输入流的问题。示例:从S3读取前几天的有界输入,然后使用Kafka的最新无界输入,当有界文件输入完成而不中断应用程序时HybridSource会从FileSource切换到KafkaSource。在HybridSource......
  • iOS开发基础108-常见的编程范式
    1.面向过程编程(Process-OrientedProgramming,POP)代码示例(Swift)importUIKitclassViewController:UIViewController{overridefuncviewDidLoad(){super.viewDidLoad()printGreeting()printNumber(num:42)}/......
  • iOS开发基础107-直播
    在iOS平台上,直播技术已经很成熟,有许多强大的第三方框架可以帮助开发者轻松实现直播功能。当前主流的直播第三方框架包括但不限于:LFLiveKit:一款开源的直播推流SDK。PLMediaStreamingKit:由云天存提供的一站式音视频解决方案。AliyunPlayer:阿里云提供的音视频播放解决方案。A......