提交 16645c56 编写于 作者: DCloud_iOS_WZT's avatar DCloud_iOS_WZT

更新 iOS原生SDK通信部分描述

上级 41bb5535
...@@ -8,12 +8,17 @@ ...@@ -8,12 +8,17 @@
> 你可以选择新建工程或直接使用demo中的`DCloudUTSExtAPI`工程 > 你可以选择新建工程或直接使用demo中的`DCloudUTSExtAPI`工程
### 工程环境设置 ### 工程环境设置
`Target -> General -> Minimum Deployments` 选择 `12.0` `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 -> Mach-O Type` 设置为`Dynamic Library`
`Target -> Build Settings -> Enable Module Verifier` 设置为`NO`
`Target -> Build Settings -> Build Libraries for Distribution` 设置为`YES` `Target -> Build Settings -> Other Linker Flags` 中添加`-ObjC`, 字母o和c大写
`Target -> Build Settings -> Framework Search Paths` 中添加SDK的Libs目录(操作方法:双击展开`Framework Search Paths``SDK/Libs`文件夹拖入即可)
`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` 将以下源文件(`SDK/ExtApiSrc 目录下`)、依赖库(`SDK/Libs 目录下`)添加到`DCloudUTSExtAPI`工程中,并将依赖库均设置为`Do Not Embed`
...@@ -352,7 +357,7 @@ xcodebuild -create-xcframework -framework 真机路径/DCloudUTSExtAPI.framework ...@@ -352,7 +357,7 @@ xcodebuild -create-xcframework -framework 真机路径/DCloudUTSExtAPI.framework
<string>广告联盟id,如未开通uniad可不填</string> <string>广告联盟id,如未开通uniad可不填</string>
</dict> </dict>
``` ```
![](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)
### 增强广告(可选) ### 增强广告(可选)
#### 添加依赖库以及资源文件 #### 添加依赖库以及资源文件
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* 通过 `HBuilder X` 导出资源文件,根据资源内容,配置`原生主工程`环境,添加基础模块需要的依赖库以及资源文件 * 通过 `HBuilder X` 导出资源文件,根据资源内容,配置`原生主工程`环境,添加基础模块需要的依赖库以及资源文件
* 根据资源文件中的`manifest.json`文件中包含的模块,制作`DCloudUTSExtAPI.xcframework`,并将其添加到`原生主工程`中,详见[集成内置模块](../modules/ios/modules.md) * 根据资源文件中的`manifest.json`文件中包含的模块,制作`DCloudUTSExtAPI.xcframework`,并将其添加到`原生主工程`中,详见[集成内置模块](../modules/ios/modules.md)
* 根据资源文件中的`manifest.json`文件中包含的模块,向`原生主工程`添加工程配置以及内置模块需要的资源文件等,详见[集成内置模块](../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) * 根据API文档接入SDK,详见[API文档](iosapi.md)
## 导出资源文件 ## 导出资源文件
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
<key>uniapp-x</key> <key>uniapp-x</key>
<dict> <dict>
<key>appid</key> <key>appid</key>
<string>应用的appid</string> <string>应用的appid</string>
<key>ipatype</key> <key>ipatype</key>
<integer>1</integer> <integer>1</integer>
<key>singleThread</key> <key>singleThread</key>
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
</dict> </dict>
</dict> </dict>
``` ```
![](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)
......
> * 仅打包可参考HBuilder工程 > * 快速集成打包,可参考HBuilder工程
> * SDK基于Swift开发,因此原生Objective-C语言开发的应用需要新建一个Swift文件用于添加Swift运行环境以及桥接SDK的API,详情可参考UniAppXDemo工程中的`UniAppBridge` > * SDK基于Swift开发,因此原生Objective-C语言开发的应用需要新建一个Swift文件用于添加Swift运行环境以及桥接SDK的API,详情可参考UniAppXDemo工程中的`UniAppBridge`
## 初始化SDK ## 初始化SDK
在 AppDelegate 的 didFinishLaunchingWithOptions 中初始化 在 AppDelegate 的 didFinishLaunchingWithOptions 中初始化
``` ``` swift
import DCloudUniappRuntime import DCloudUniappRuntime
UniSDKEngine.shared.create() UniSDKEngine.shared.create()
``` ```
## 监听应用生命周期函数回调 ## 监听应用生命周期函数回调
在 AppDelegate 的 didFinishLaunchingWithOptions调用 在 AppDelegate 的 didFinishLaunchingWithOptions 调用
``` ``` swift
UniSDKEngine.applicationDidFinishLaunchingWithOptions(application, launchOptions) UniSDKEngine.applicationDidFinishLaunchingWithOptions(application, launchOptions)
``` ```
在 AppDelegate 的 applicationDidBecomeActive 调用 在 AppDelegate 的 applicationDidBecomeActive 调用
``` ``` swift
UniSDKEngine.applicationDidBecomeActive(application) UniSDKEngine.applicationDidBecomeActive(application)
``` ```
在 AppDelegate 的 applicationWillResignActive 调用 在 AppDelegate 的 applicationWillResignActive 调用
``` ``` swift
UniSDKEngine.applicationWillResignActive(application) UniSDKEngine.applicationWillResignActive(application)
``` ```
在 AppDelegate 的 applicationDidEnterBackground 调用 在 AppDelegate 的 applicationDidEnterBackground 调用
``` ``` swift
UniSDKEngine.applicationDidEnterBackground(application) UniSDKEngine.applicationDidEnterBackground(application)
``` ```
在 AppDelegate 的 applicationWillEnterForeground 调用 在 AppDelegate 的 applicationWillEnterForeground 调用
``` ``` swift
UniSDKEngine.applicationWillEnterForeground(application) UniSDKEngine.applicationWillEnterForeground(application)
``` ```
在 AppDelegate 的 openURL 调用 在 AppDelegate 的 openURL 调用
``` ``` swift
UniSDKEngine.applicationOpenURLOptions(application, url, options) UniSDKEngine.applicationOpenURLOptions(application, url, options)
``` ```
在 AppDelegate 的 continueUserActivity 调用 在 AppDelegate 的 continueUserActivity 调用
``` ``` swift
UniSDKEngine.applicationContinueUserActivityRestorationHandler(application, userActivity, restorationHandler) UniSDKEngine.applicationContinueUserActivityRestorationHandler(application, userActivity, restorationHandler)
``` ```
## 监听推送相关函数回调(可选) ## 监听推送相关函数回调(可选)
在 AppDelegate 的 didRegisterForRemoteNotificationsWithDeviceToken 调用 在 AppDelegate 的 didRegisterForRemoteNotificationsWithDeviceToken 调用
``` ``` swift
UniSDKEngine.didRegisterForRemoteNotifications(deviceToken) UniSDKEngine.didRegisterForRemoteNotifications(deviceToken)
``` ```
在 AppDelegate 的 didFailToRegisterForRemoteNotificationsWithError 调用 在 AppDelegate 的 didFailToRegisterForRemoteNotificationsWithError 调用
``` ``` swift
UniSDKEngine.didFailToRegisterForRemoteNotifications(error) UniSDKEngine.didFailToRegisterForRemoteNotifications(error)
``` ```
在 AppDelegate 的 didReceiveRemoteNotification 调用 在 AppDelegate 的 didReceiveRemoteNotification 调用
``` ``` swift
UniSDKEngine.applicationDidReceiveRemoteNotificationCompletionHandler(application, userInfo, completionHandler) UniSDKEngine.applicationDidReceiveRemoteNotificationCompletionHandler(application, userInfo, completionHandler)
``` ```
## 开始渲染 ## 开始渲染
``` ``` swift
UniSDKEngine.shared.render(toView: toView) UniSDKEngine.shared.render(toView: toView)
``` ```
# 通信 # 通信
iOS平台目前不支持直接在uvue页面调用原生API,开发者可通过UTS插件`发送or接收Notification`实现与原生通信 iOS平台目前不支持直接在uvue页面调用原生API,开发者可通过UTS插件`发送/接收 通知消息`实现与原生App通信,具体实现代码如下:
\ No newline at end of file
## 原生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<string,any>()
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`依赖,即可体验通信示例
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册