From 16645c5682aa18160115a0af5c435d0d7516229d Mon Sep 17 00:00:00 2001 From: wangzhitong Date: Wed, 10 Jul 2024 20:15:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20iOS=E5=8E=9F=E7=94=9FSDK?= =?UTF-8?q?=E9=80=9A=E4=BF=A1=E9=83=A8=E5=88=86=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/native/modules/ios/modules.md | 19 +++--- docs/native/use/ios.md | 6 +- docs/native/use/iosapi.md | 96 ++++++++++++++++++++++++------ 3 files changed, 93 insertions(+), 28 deletions(-) diff --git a/docs/native/modules/ios/modules.md b/docs/native/modules/ios/modules.md index 10fb768d..21db6fb5 100644 --- a/docs/native/modules/ios/modules.md +++ b/docs/native/modules/ios/modules.md @@ -8,12 +8,17 @@ > 你可以选择新建工程或直接使用demo中的`DCloudUTSExtAPI`工程 ### 工程环境设置 -`Target -> General -> Minimum Deployments` 选择 `12.0` -`Target -> Build Settings -> Mach-O Type` 设置为`Dynamic Library` -`Target -> Build Settings -> Other Linker Flags` 中添加`-ObjC`, 字母o和c大写 -`Target -> Build Settings -> Enable Module Verifier` 设置为`NO` -`Target -> Build Settings -> Build Libraries for Distribution` 设置为`YES` -`Target -> Build Settings -> Framework Search Paths` 中添加SDK的Libs目录(操作方法:双击展开`Framework Search Paths`将`SDK/Libs`文件夹拖入即可) +`Target -> General -> Minimum Deployments` 选择 `12.0` + +`Target -> Build Settings -> Mach-O Type` 设置为`Dynamic Library` + +`Target -> Build Settings -> Other Linker Flags` 中添加`-ObjC`, 字母o和c大写 + +`Target -> Build Settings -> Enable Module Verifier` 设置为`NO` + +`Target -> Build Settings -> Build Libraries for Distribution` 设置为`YES` + +`Target -> Build Settings -> Framework Search Paths` 中添加SDK的Libs目录(操作方法:双击展开`Framework Search Paths`将`SDK/Libs`文件夹拖入即可) ### 配置基础模块(必须) 将以下源文件(`SDK/ExtApiSrc 目录下`)、依赖库(`SDK/Libs 目录下`)添加到`DCloudUTSExtAPI`工程中,并将依赖库均设置为`Do Not Embed` @@ -352,7 +357,7 @@ xcodebuild -create-xcframework -framework 真机路径/DCloudUTSExtAPI.framework 广告联盟id,如未开通uniad可不填 ``` -![](https://web-ext-storage.dcloud.net.cn/native/doc/iOS/uniappx_info.png) +![](https://web-ext-storage.dcloud.net.cn/native/doc/iOS/uniappx_app_info.png) ### 增强广告(可选) #### 添加依赖库以及资源文件 diff --git a/docs/native/use/ios.md b/docs/native/use/ios.md index 135e2f49..85808f16 100644 --- a/docs/native/use/ios.md +++ b/docs/native/use/ios.md @@ -8,7 +8,7 @@ * 通过 `HBuilder X` 导出资源文件,根据资源内容,配置`原生主工程`环境,添加基础模块需要的依赖库以及资源文件 * 根据资源文件中的`manifest.json`文件中包含的模块,制作`DCloudUTSExtAPI.xcframework`,并将其添加到`原生主工程`中,详见[集成内置模块](../modules/ios/modules.md) * 根据资源文件中的`manifest.json`文件中包含的模块,向`原生主工程`添加工程配置以及内置模块需要的资源文件等,详见[集成内置模块](../modules/ios/modules.md) -* 根据资源文件中的`uni_modules`文件夹中包含的UTS插件,制作对应的原生xcframework,并将其添加到`原生主工程`(付费购买的uts插件不支持原生工程使用),详见[制作UTS插件](iosuts.md) +* 根据资源文件中的`uni_modules`文件夹中包含的UTS插件,制作对应的原生xcframework,并将其添加到`原生主工程`(付费购买的uts插件不支持原生工程接入),详见[制作UTS插件](iosuts.md) * 根据API文档接入SDK,详见[API文档](iosapi.md) ## 导出资源文件 @@ -43,7 +43,7 @@ uniapp-x appid - 您应用的appid + 应用的appid ipatype 1 singleThread @@ -55,7 +55,7 @@ ``` -![](https://web-ext-storage.dcloud.net.cn/native/doc/iOS/uniappx_info.png) +![](https://web-ext-storage.dcloud.net.cn/native/doc/iOS/uniappx_app_info.png) diff --git a/docs/native/use/iosapi.md b/docs/native/use/iosapi.md index dfaa7626..82f04174 100644 --- a/docs/native/use/iosapi.md +++ b/docs/native/use/iosapi.md @@ -1,62 +1,122 @@ -> * 仅打包可参考HBuilder工程 +> * 快速集成打包,可参考HBuilder工程 > * SDK基于Swift开发,因此原生Objective-C语言开发的应用需要新建一个Swift文件用于添加Swift运行环境以及桥接SDK的API,详情可参考UniAppXDemo工程中的`UniAppBridge` ## 初始化SDK 在 AppDelegate 的 didFinishLaunchingWithOptions 中初始化 -``` +``` swift import DCloudUniappRuntime UniSDKEngine.shared.create() ``` ## 监听应用生命周期函数回调 -在 AppDelegate 的 didFinishLaunchingWithOptions调用 -``` +在 AppDelegate 的 didFinishLaunchingWithOptions 调用 +``` swift UniSDKEngine.applicationDidFinishLaunchingWithOptions(application, launchOptions) -``` +``` 在 AppDelegate 的 applicationDidBecomeActive 调用 -``` +``` swift UniSDKEngine.applicationDidBecomeActive(application) ``` 在 AppDelegate 的 applicationWillResignActive 调用 -``` +``` swift UniSDKEngine.applicationWillResignActive(application) ``` 在 AppDelegate 的 applicationDidEnterBackground 调用 -``` +``` swift UniSDKEngine.applicationDidEnterBackground(application) ``` 在 AppDelegate 的 applicationWillEnterForeground 调用 -``` +``` swift UniSDKEngine.applicationWillEnterForeground(application) ``` 在 AppDelegate 的 openURL 调用 -``` +``` swift UniSDKEngine.applicationOpenURLOptions(application, url, options) -``` +``` 在 AppDelegate 的 continueUserActivity 调用 -``` +``` swift UniSDKEngine.applicationContinueUserActivityRestorationHandler(application, userActivity, restorationHandler) ``` ## 监听推送相关函数回调(可选) 在 AppDelegate 的 didRegisterForRemoteNotificationsWithDeviceToken 调用 -``` +``` swift UniSDKEngine.didRegisterForRemoteNotifications(deviceToken) ``` 在 AppDelegate 的 didFailToRegisterForRemoteNotificationsWithError 调用 -``` +``` swift UniSDKEngine.didFailToRegisterForRemoteNotifications(error) -``` +``` 在 AppDelegate 的 didReceiveRemoteNotification 调用 -``` +``` swift UniSDKEngine.applicationDidReceiveRemoteNotificationCompletionHandler(application, userInfo, completionHandler) ``` ## 开始渲染 -``` +``` swift UniSDKEngine.shared.render(toView: toView) ``` # 通信 -iOS平台目前不支持直接在uvue页面调用原生API,开发者可通过UTS插件`发送or接收Notification`实现与原生通信 \ No newline at end of file +iOS平台目前不支持直接在uvue页面调用原生API,开发者可通过UTS插件`发送/接收 通知消息`实现与原生App通信,具体实现代码如下: + +## 原生APP向SDK发消息 +UTS插件添加监听: +``` ts +const name = "com.ios.notification.name1"; //通知消息标识 +const notificationName = new Notification.Name(name); +const method = Selector("handleReceiveMessage:")//接收通知消息的方法名 +NotificationCenter.default.addObserver(this, selector = method, name = notificationName, object = null) +``` + +``` ts +@objc static handleReceiveMessage(notification : Notification) { + let userInfo = notification.userInfo + if(userInfo != null){ + const message = userInfo!["msg"]; + } +} +``` + +原生发送通知消息: +``` swift +let name = "com.ios.notification.name1"; //通知消息标识 +let message = "消息内容"; +let userInfo: [AnyHashable: Any] = [ + "msg": message // 你可以在这里放置任何需要传递的信息 +] +NotificationCenter.default.post(name: Notification.Name(name), object: nil, userInfo: userInfo) +``` + + +## SDK向原生APP发消息 +原生添加通知监听: +``` swift +const name = "com.ios.notification.name2"; //通知消息标识 +NotificationCenter.default.addObserver(self, selector: #selector(handleNotification(_:)), name: Notification.Name(name), object: nil) +``` + +``` swift +@objc func handleNotification(_ notification: Notification) { + if let message = (notification.userInfo?["msg"] as? String) { + // 使用message + print(message) + } +} +``` + +UTS插件发送消息: +``` ts +const name = "com.ios.notification.name2"; //通知消息标识 +const message = "消息内容"; +const notificationName = new Notification.Name(name); +const userInfo = new Map() +userInfo.set("msg", message); // 你可以在这里放置任何需要传递的信息 +NotificationCenter.default.post(name = notificationName, object = null, userInfo = userInfo); +``` + +> 注意:消息接收方必须在发送通知前添加监听事件,否则收不到消息 + +## 运行示例 +`UniAppXDemo`工程中,`__UNI__00DC103`为通信示例资源文件,将`Info.plist`中`uniapp-x`节点下的`appid`改为`__UNI__00DC103`,并添加`unimoduleTestIosNotification.xcframework`依赖,即可体验通信示例 -- GitLab