朱元璋什么星座| 铮铮是什么意思| 早上10点是什么时辰| 嗳气是什么| 懋是什么意思| 肾病有什么症状男性| 维生素b2有什么作用| nuskin是什么牌子| 锡兵是什么意思| 毛囊炎吃什么药最有效| 鬼迷日眼是什么意思| 晚霞是什么| cpv是什么病毒| 海鲜不能和什么食物一起吃| 合肥有什么玩的| 典韦字什么| 安罗替尼适合什么肿瘤| 月经为什么推迟不来| 血小板偏高有什么危害| 干细胞移植是什么意思| 7月一日是什么节| 吃虾不能吃什么水果| 新生儿呛奶是什么原因引起的| 别名是什么意思| 什么的香味| 什么竹笋不能吃| 尤物是什么意思| 什么是慢阻肺| 肝郁脾虚吃什么药效果最好| 狐惑病是什么病| 口腔溃疡缺少什么维生素| 变异性哮喘吃什么药| 吃什么升血小板最快最好| 月经推迟十天是什么原因| 1989属什么| 肝功能八项检查什么| 什么螺不能吃| 拔苗助长告诉我们什么道理| 青瓜是什么瓜| 皮肤细菌感染用什么药| 10属什么| 生物学是什么| 鸡蛋粘壳是什么原因| 紫花地丁有什么功效| 反刍是什么意思| 胎毛什么时候剃最好| 纤维素纤维是什么面料| 什么不能带上高铁| 心肌炎吃什么药效果好| ige高是什么意思| 女性尿里带血是什么原因| 二尖瓣反流吃什么药| 有尿意但是尿不出来是什么原因| 五什么六什么| 长期吃避孕药有什么危害| 关二爷是什么神| 眉尾有痣代表什么| 吃青椒有什么好处| id锁是什么| 姓傅的男孩取什么名字| 黄体是什么意思| 观音菩萨成道日是什么意思| 黄色裤子搭配什么颜色上衣| 被蚊子咬了涂什么| 历时是什么意思| 喝酒对身体有什么危害| 一个雨一个散念什么| 起床头疼是什么原因| 妇科彩超主要检查什么| 政五行属什么| 鸽子拉水便是什么原因| 眼睛痒吃什么药| 大刀阔斧是什么意思| 北戴河是什么海| 榴莲对子宫有什么好处| 痔疮是什么原因| 1120是什么星座| 肝的功能是什么| 2011年是什么生肖| 子宫内膜回声欠均匀什么意思| 1992年是什么年| 3f是什么意思| 为什么坐月子不能吹风| 游泳比赛中wj是什么意思| 什么时候最热| 口腔溃疡反复发作是什么原因| 左手有点麻是什么原因| 小儿磨牙是什么原因引起的| 跳梁小丑是什么生肖| 总胆红素偏高是什么引起的| alt医学上是什么意思| 给老人过生日送什么礼物好| 甘油三酯偏高有什么危害| 啤酒加生鸡蛋一起喝有什么效果| 乱伦是什么| 做梦梦到理发是什么征兆| 血红蛋白是指什么| 舌面有裂纹是什么原因| 猫咪掉胡子是什么原因| 什么时候收花生| 女性腰疼去医院挂什么科| 吃什么解酒快| 中国特工组织叫什么| 肛周湿疹用什么药膏效果好| 开化龙顶属于什么茶| 肺部真菌感染用什么药最好| 为什么老是犯困| mr是什么检查项目| 靳东妹妹叫什么名字| 什么是贵妇脸| 水果的英文是什么| 蜘蛛的血液是什么颜色| 用淘米水洗脸有什么好处| 舌头上火吃什么药| 男性性功能减退吃什么药| 嗜碱性粒细胞比率偏高说明什么| 嘴巴干苦是什么原因| 红绳有什么寓意| 刮痧的痧是什么东西| 右眼跳代表什么| 左下腹疼痛是什么原因| 尐是什么意思| 为什么会被鬼压床| 印第安人是什么人种| 治疗褥疮用什么药| 积滞是什么意思| 白带异常是什么原因| 卤肉是什么肉| 控诉是什么意思| 吃什么对卵巢有好处| 左后背疼是什么原因| 1037年属什么生肖| 巨蟹座是什么象| 手脚肿胀是什么原因引起的| 什么是居间费| 床垫选什么材质的好| kda是什么意思| 4月20日什么星座| 澳门为什么叫澳门| 阴道口出血是什么原因| 负数是什么意思| 烊化兑服是什么意思| 5点是什么时辰| 土方是什么| 补钙多了有什么坏处| 今年是什么年庚| 左侧后背疼是什么原因男性| 什么睡姿对髋关节好| 麻雀长什么样| sm是什么意思| 湛蓝湛蓝的什么| 手牵手我们一起走是什么歌| 7月11是什么星座| 二氧化硅是什么氧化物| 十二年义务教育什么时候开始| 胜造七级浮屠是什么意思| 印模是什么意思| 桔子什么时候成熟| lively是什么意思| 轻度脂肪肝什么意思| 公蚊子吃什么| 老放臭屁是什么原因| 上眼皮突然肿了是什么原因| 铁剂什么时候吃最好| 鳊鱼是什么鱼| 晕车药什么时候吃最好| 邮电局是干什么的| 鳞状上皮细胞高是什么原因| 六畜兴旺是什么生肖| 十八反是什么意思| 彰字五行属什么| 更年期是什么| 庆帝为什么杀叶轻眉| 小丑代表什么生肖| 镁低了是什么原因| 什么纸| 淋巴细胞绝对值偏低说明什么| 五大三粗是什么意思| 指鹿为马指什么生肖| 鞋履是什么意思| 2010是什么年| 鲤鱼吃什么食物| 左腿麻木是什么征兆| 股票缺口是什么意思| 牙髓炎是什么原因引起的| 右手发麻是什么病的前兆| 肠炎挂什么科| 手串19颗代表什么意思| c1开什么车| 独白什么意思| 无话不谈是什么意思| 痔疮为什么会痒| 小孩积食发烧吃什么药| 怀孕什么时候可以做b超| 舌苔发黑是什么原因| 属狗的是什么命| 青蛙喜欢吃什么| 直率是什么意思| 为什么虾煮熟了会变红| 测怀孕什么时候最准| 一个口一个麦念什么| 河南是什么气候| 十月十二号是什么星座| 拂是什么生肖| 教师节送什么礼品| 脚心出汗是什么原因女| 安宫牛黄丸主治什么病| 为什么缺钾| o型血和b型血的孩子是什么血型| 而已是什么意思| 黄柏的功效与作用是什么| 什么的舞姿| 英文为什么怎么写| 什么是植物油| 女性婚检都检查什么| 什么的蜻蜓| 眼皮痒是什么原因| bang什么意思| 胃息肉吃什么药| 前列腺吃什么食物调理| 痛风什么引起的原因有哪些| 鹅喜欢吃什么食物| 父亲的弟弟叫什么| 敲打是什么意思| 4个火念什么| 大拇指旁边是什么指| 做nt挂什么科| 喜金是什么意思| 牙出血什么原因| 随诊是什么意思| 亚麻色是什么颜色| 金丝皇菊有什么功效| 什么最解渴| 五行什么意思| w是什么单位| bj什么意思| 范字五行属什么| 苍龙七宿的秘密是什么| 第二次世界大战是什么时候| 玻尿酸有什么作用| 语塞是什么意思| 越来越瘦是什么原因| 牙齿出血是什么病表现出来的症状| 什么是高情商| 结石挂什么科| 自身免疫性肝病是什么意思| 昱怎么读音是什么| 挂是什么意思| 什么叫快闪| 四月七号是什么星座| 怀孕的尿液是什么颜色| 牙齿疼是什么原因引起的| 什么是超话| 秦始皇的母亲叫什么名字| 十八反是什么意思| 什么是排卵期怎么计算| 日本人为什么喜欢喝冰水| 四叶草代表什么| 士多啤梨是什么水果| 老年人血压忽高忽低是什么原因| 跳楼是什么感觉| 吃什么增加白细胞最快| 梦见鞋丢了是什么意思| 不可小觑什么意思| 百度

西安市人民代表大会常务委员会公告[十五届]第61..

百度 下面来说说画质。

集成样例代码

我们提供了包含“微信登录,微信支付,高德地图、百度地图”功能的样式 DEMO 工程,开发者可以在Github(国外) (opens new window)Gitee(国内) (opens new window) 获取集成样例代码。

# 1. 获取凭据

请注意

集成 SDK 需要先在 “人民网+”小程序 平台中创建应用绑定小程序,获得每个应用专属的SDK KEYSDK SECRET后,随后就可以在集成 SDK 时填写对应的参数。打开小程序时 SDK 会自动初始化,并校验SDK KEYSDK SECRETBundleID(Application ID)是否正确。

# 2. 集成SDK

“人民网+”小程序 SDK 目前支持pod集成或者手动集成

# 2.1 Pod集成

# 2.1.1 安装pod环境

Cocoapods 提供了一个非常简单的依赖管理系统,避免手动导入产生的错误。 如果您没有安装过Cocoapods,可以查看官方安装指南(英文) (opens new window)CocoaPods安装教程(中文) (opens new window)

sudo gem install cocoapods
pod setup

# 2.1.2 创建Podfile文件

注意

2.8.5版本开始,“人民网+”小程序 SDK 拆分为多个SDK:FinApplet(核心SDK)FinAppletExtFinAppletBDMapFinAppletGDMapFinAppletWebRTCFinAppletBLEFinAppletAgoraRTCFinAppletContactFinAppletClipBoardFinAppletWXExtFinAppletShare

其中只有inApplet是必须的,其他扩展 SDK 可根据实际情况选择集成。

如果你不需要使用扩展 SDK,那么在podfile中只依赖FinApplet即可。如果你需要使用扩展 SDK 中的 API,那么你还需要依赖FinAppletExt

  • 当你在使用Map组件的功能时,如果想使用三方地图来实现的话,可引用FinAppletBDMap(百度地图)FinAppletGDMap(高德地图),默认情况下则由原生地图实现;
  • 如果需要在小程序中使用WebRTC功能,可以在podfile中添加FinAppletWebRTC依赖,这个库是我们基于Google WebRTC库的二次封装库,支持iOS9以上系统版本;
  • 如果需要在小程序中使用蓝牙功能,可以在podfile中添加FinAppletBLE依赖;
  • 如果需要在小程序中使用live-pusherlive-player功能,可以在podfile中添加FinAppletAgoraRTC依赖;
  • 如果需要在小程序中使用addPhoneContact,添加手机通讯录联系人,可以在podfile中添加FinAppletContact依赖;
  • 如果需要在小程序中使用剪贴板功能,可以在podfile中添加FinAppletClipBoard依赖;
  • 如果需要在小程序中接入微信的登录,支付,获取用户信息等能力,可以在podfile中添加FinAppletWXExt依赖;
    • 如果需要在小程序中接入分享到微信好友,朋友圈,网页链接,并能打开对应的小程序和分享时所在的页面的能力,可以在podfile中添加FinAppletShare依赖;

注意

在使用FinAppletWXExtFinAppletShare时,需要按照 微信接入指南-iOS 接入指南 (opens new window) 进行配置,具体有如下内容:

  1. 配置应用的Universal Links
  2. 打开Associated Domains开关,将Universal Links域名加到配置上;
  3. 在工程的Target -> 【Info】 -> 【URL Types】,新增一个URL Schemes(key为weixin,value为wx+在微信申请的Appid);
  4. 在工程info.plist中增加应用访问白名单LSApplicationQueriesSchemes,对应的要填写的值为wechatweixinweixinULAPI。记得在苹果开发者中心App ID Configuration处勾选Associated Domains
  5. 如果遇到引用微信头文件报错,把 target 下的 Build Settings 中的 Allow Non-modular includes in Framework Modules 设置成YES。

Xcode项目的根目录下,新建一个Podfile文件,在Podfile文件中添加对小程序SDK的依赖:

pod 'FinApplet'
pod 'FinAppletExt'
pod 'FinAppletBDMap'
pod 'FinAppletGDMap'
pod 'FinAppletWebRTC'
pod 'FinAppletBLE'
pod 'FinAppletAgoraRTC'
pod 'FinAppletContact'
pod 'FinAppletClipBoard'
pod 'FinAppletWXExt'
pod 'FinAppletShare'

Podfile示例:

platform :ios, "9.0"

inhibit_all_warnings!

target "FinoAppletDemo" do
    pod 'FinApplet'
end


post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ENABLE_STRICT_OBJC_MSGSEND'] = 'NO'
            config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'
        end
    end
end

# 2.1.3 安装或更新依赖

然后,执行 pod update 或者 pod install 即可。

# 2.1.4 打开工程

执行完 pod update 或者 pod install ,打开工程目录,找到xxx.xcworkspace文件,双击打开即可。

# 2.2 手动集成

为了方便开发者快速体验运行以及使用模拟器开发调试,我们的SDK中包含x86_64架构,所以在上架AppStore之前,一定要记得删除x86_64架构。

您可以自己手动删除,也可以自己网上找脚本删除,或者按照3.2.4给工程配置脚本。工程配置脚本,开发调试依然可以使用模拟器,但是archive时,会自动去除模拟器架构。

当然,你也可以说明只需要真机架构,那么我们就只交付包含真机架构的SDK。

注意

由于百度地图、高德地图、腾讯地图、微信SDK都是静态库,所以FinAppletBDMap(百度地图)FinAppletGDMap(高德地图)FinAppletTXMap(腾讯地图)FinAppletWXExt(微信拓展SDK)FinAppletShare(分享SDK)也均为静态库。

# 2.2.1 集成步骤

2.2.1.1 添加SDK至工程

将FinApplet.framework拖进工程。

当然,如果你需要用到FinAppletExtFinAppletWebRTCFinAppletBLEFinAppletAgoraRTCFinAppletContact中的 API,那么,你还得把FinAppletExt.frameworkFinAppletWebRTC.frameworkFinAppletBLE.frameworkFinAppletAgoraRTC.frameworkFinAppletContact.frameworkFinAppletClipBoard.framework也拖进工程。

2.2.1.2 修改工程配置

则需要按照如下配置即可:

如果你需要用到FinAppletExtFinAppletWebRTCFinAppletBLEFinAppletAgoraRTCFinAppletContactFinAppletClipBoardFinAppletGDMap.frameworkFinAppletBDMap.framework中的 API,那么,你还需要把对应的framework也添加进Copy Files中。

注意

  1. FinAppletWebRTC.framework是基于 Google 的 WebRTC 库做的二次封装,所以也需要导入GoogleWebRTC库 (opens new window)(需科学上网),如果因网络问题不能下载也可以在我们平台下载GoogleWebRTC库 (opens new window)
  2. FinAppletGDMap.framework是基于高德地图 SDK 做的二次封装,集成需要导入高德地图AMap3DMap-NO-IDFAAMapLocation-NO-IDFAAMapSearch-NO-IDFA这 3 个 SDK ,2.37.9及以上版本可以使用最新的9.40版本,2.37.9之前的版本需要用高德地图9.4.0之前的版本,可以去高德地图官网 (opens new window)下载相关 SDK ;
  3. FinAppletBDMap.framework是基于百度地图 SDK 做的二次封装,需要集成导入百度地图BMKLocationKitBaiduMapKit/MapBaiduMapKit/Search这 3 个 SDK ,可以去百度地图官网 (opens new window)下载相关 SDK ;
  4. FinAppletAgoraRTC.framework是基于声网 SDK 做的二次封装,可以去声网 (opens new window)下载对应 SDK 导入到工程;
  5. FinAppletWXExtFinAppletShare是基于微信终端 SDK 做的二次封装,可以去微信开放平台 (opens new window)下载sdk包导入到工程。

2.2.1.3 打开工程

双击xxxx.xcodeproj,打开工程。

2.2.1.4 配置archive脚本

小程序 SDK 中包含x86_64架构,便于我们开发时用模拟器调试。但是x86_64架构的SDK,打包上传应用市场时会报错,所以配置一个打包时自动去除模拟器架构的脚本,可以让我们既可以用模拟器开发调试,又能正常提交应用市场。

当然,你也可以找我们要一个不包含模拟器的SDK。

脚本内容如下:

#!/bin/sh

# Strip invalid architectures

strip_invalid_archs() {
binary="$1"
echo "current binary ${binary}"
# Get architectures for current file
archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)"
stripped=""
for arch in $archs; do
if ! [[ "${ARCHS}" == *"$arch"* ]]; then
if [ -f "$binary" ]; then
# Strip non-valid architectures in-place
lipo -remove "$arch" -output "$binary" "$binary" || exit 1
stripped="$stripped $arch"
fi
fi
done
if [[ "$stripped" ]]; then
echo "Stripped $binary of architectures:$stripped"
fi
}

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

strip_invalid_archs "$FRAMEWORK_EXECUTABLE_PATH"
done

请注意:

如果集成完后运行到模拟器上报如下错误:Building for iOS Simulator, but the linked and embedded framework 'FinApplet.framework' was built for iOS + iOS Simulator.则需要按照如下方式修改。

解决办法: 如下图修改Validate WorkspaceYes后,可以重新编译通过;之后可以改回成NO,就不会报错了。

image.jpg

# 2.3 Swift 工程集成OC第三方库

如果你的工程是用 Swift 写的,则集成 OC 第三方库需要额外配置。

  1. 如果你的工程从没添加过 OC 文件,则新建一个 OC 文件时,会询问你是否自动生成桥接文件,点Create Bridge Header以生成头文件。

    image.jpg

  2. 如果你的工程添加过 OC 文件,但没有生成桥接文件,则需要自己手动新建一个 Header ,命名为"{target名-Bridging-Header.h}",如"SwiftDemo-Bridging-Header.h"。并且在项目的 targets 里的 Build Settings 选项里,找到 Objective-c Bridging Header 选项,将这一项设置为刚刚创建的.h文件,如"SwiftDemo/SwiftDemo-Bridging-Header.h"。(其中 SwiftDemo 是 target 名)

    image.jpg

  3. 往该文件中添加一行代码:

    #include <FinApplet/FinApplet.h>
    

然后 Swift 工程就可以使用 FinApplet 的 OC 第三方库了。

# 3. 增加权限描述

根据您的实际需求,集成响应的SDK,并在工程info.plist文件中增加权限配置

如果您集成所有的 SDK,那么需要配置的权限包括:相册、相机、麦克风、位置、蓝牙、通讯录。这些权限,全都是调用相应的api和组件时才会触发。

权限名称
权限对应的 KEY
相册读取 NSPhotoLibraryUsageDescription
相册写入 NSPhotoLibraryAddUsageDescription
相机 NSCameraUsageDescription
麦克风 NSMicrophoneUsageDescription
位置 NSLocationAlwaysAndWhenInUseUsageDescription、NSLocationAlwaysUsageDescription、NSLocationWhenInUseUsageDescription
蓝牙 NSBluetoothAlwaysUsageDescription、NSBluetoothPeripheralUsageDescription
通讯录 NSContactsUsageDescription

其中各个SDK中涉及的权限如下(您可以根据实际情况选择集成):

其中核心SDK(FinApplet)涉及的权限:

权限名称 权限对应的 KEY 权限涉及的 API
相册读取 NSPhotoLibraryUsageDescription chooseImage、chooseVideo、chooseMedia
相册写入 NSPhotoLibraryAddUsageDescription saveImageToPhotosAlbum、saveVideoToPhotosAlbum
相机 NSCameraUsageDescription scanCode、chooseImage、chooseVideo、chooseMedia、CameraContext(Camera组件)
麦克风 NSMicrophoneUsageDescription chooseVideo、chooseMedia、CameraContext(Camera组件)

注意

录制视频时,系统会先后访问相机和麦克风权限。

扩展SDK(FinAppletExt)涉及的权限:

权限名称 权限对应的 KEY 权限涉及的 API
麦克风 NSMicrophoneUsageDescription startRecord、RecorderManager
位置 NSLocationAlwaysAndWhenInUseUsageDescription、NSLocationAlwaysUsageDescription、NSLocationWhenInUseUsageDescription chooseLocation、getLocation、openLocation、choosePoi

扩展SDK-WebRTC(FinAppletWebRTC)涉及的权限:

权限名称 权限对应的 KEY 权限涉及的 API
相机 NSCameraUsageDescription webrtc-video组件
麦克风 NSMicrophoneUsageDescription webrtc-video组件

扩展SDK-BDMap(FinAppletBDMap)涉及的权限:

权限名称 权限对应的 KEY 权限涉及的 API
位置 NSLocationAlwaysAndWhenInUseUsageDescription、NSLocationAlwaysUsageDescription、NSLocationWhenInUseUsageDescription Map组件

扩展SDK-GDMap(FinAppletGDMap)涉及的权限:

权限名称 权限对应的 KEY 权限涉及的 API
位置 NSLocationAlwaysAndWhenInUseUsageDescription、NSLocationAlwaysUsageDescription、NSLocationWhenInUseUsageDescription Map组件

扩展SDK-BLE(FinAppletBLE)涉及的权限:

权限名称 权限对应的 KEY 权限涉及的 API
蓝牙 NSBluetoothAlwaysUsageDescription、NSBluetoothPeripheralUsageDescription 蓝牙-通用、蓝牙-低功耗中心设备、蓝牙-低功耗外围设备、蓝牙-信标一些列api

扩展SDK-AgoraRTC(FinAppletAgoraRTC)涉及的权限:

权限名称 权限对应的 KEY 权限涉及的 API
相机 NSCameraUsageDescription live-pusher,live-player组件
麦克风 NSMicrophoneUsageDescription live-pusher,live-player组件

扩展SDK-Contact(FinAppletContact)涉及的权限:

权限名称 权限对应的 KEY 权限涉及的 API
通讯录 NSContactsUsageDescription addPhoneContact

分享SDK-shareSDK(FinAppletShare)涉及的权限:

权限名称 权限对应的 KEY 权限涉及的 API
相册写入 NSPhotoLibraryAddUsageDescription 保存按钮

注意

如果你的工程里已经配置过这些权限,那就不用再添加了。

另外,如果你的小程序中的请求或者网页有使用到http协议的,还需要在工程里配置如下参数:

<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>

也就是【App Transport Security Settings】-> 【Allow Arbitrary Loads】设置为YES。

# 4. 添加URL Type

注意

第4步和第7步不是必须项,如果您的 App 会通过其他 App(safari、微信等)打开您 App 中的小程序,那么就必须配置第4步和第7步。

选择 Target -> 【Info】 -> 【URL Types】,新增一个URL Schemes(URL Schemes的格式是fat+sdkKey的md5。)

先将 SDK KEY 生成 16 位小写 MD5 ,然后在加上fat前缀。
image.jpg


关于如何使用,可参考使用路由的形式打开小程序

# 5. 设置工程支持的方向

image.jpg

注意

1.由于小程序的公共UI,比如loading页、关于、设置、投诉反馈等页面都是固定竖屏,所以App需要勾选Portrait。 2.小程序内的app.json和page.json里pageOrientation可以设置为portrait、landscape、auto,所以App需要支持横屏和竖屏。

具体的关于SDK横竖屏的处理场景见SDK中横竖屏的详细说明

# 6. 添加SDK头文件

在需要使用 “人民网+”小程序 SDK 的地方,添加如下代码:

#import <FinApplet/FinApplet.h>

如果还集成了扩展 SDK,那么调用扩展 SDK 中的 API,还需要加上下面的代码:

#import  <FinAppletExt/FinAppletExt.h>

如果要使用封装的百度地图 SDK,还需要加上下面的代码:

#import  <FinAppletBDMap/FinAppletBDMap.h>

如果要使用封装的高德地图 SDK,还需要加上下面的代码:

#import  <FinAppletGDMap/FinAppletGDMap.h>

如果要使用封装的 WebRTC 库,还需要加上下面的代码:

#import <FinAppletWebRTC/FinAppletWebRTC.h>

如果需要使用蓝牙库,还需要加上下面的代码:

#import <FinAppletBLE/FinAppletBLE.h>

如果需要使用封装的声网 SDK,还需要加上下面的代码:

#import <FinAppletAgoraRTC/FinAppletAgoraRTC.h>

如果需要使用封装的联系人 SDK,还需要加上下面的代码:

#import <FinAppletContact/FinAppletContact.h>

如果需要使用封装的剪贴板 SDK,还需要加上下面的代码:

#import <FinAppletClipBoard/FinAppletClipBoard.h>

如果需要使用封装的微信扩展 SDK,还需要加上下面的代码:

#import <FinAppletWXExt/FinAppletWXExt.h>

如果需要使用封装的分享 SDK,还需要加上下面的代码:

#import <FinAppletShare/FinAppletShare.h>

当然,最方便的方式是在pch文件中添加以上代码,这样在使用的地方就不用再引用了。

# 7. 初始化 SDK

在工程的AppDelegate中的以下方法中,调用 SDK 的初始化方法。

注意

2.13.109版本开始,“人民网+”小程序 SDK 支持配置多个服务器信息,可以同时打开多个不同服务器上的小程序,所以初始化方式有所变更,您可以将服务器配置信息写入plist文件,然后按照如下示例初始化。

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"servers" ofType:@"plist"];
NSArray *array = [NSArray arrayWithContentsOfFile:plistPath];
NSMutableArray *storeArrayM = [NSMutableArray array];
for (NSDictionary *dict in array) {
    FATStoreConfig *storeConfig = [[FATStoreConfig alloc] init];
    storeConfig.sdkKey = dict[@"sdkKey"];
    storeConfig.sdkSecret = dict[@"sdkSecret"];
    storeConfig.apiServer = dict[@"apiServer"];
    storeConfig.apmServer = dict[@"apmServer"];
    if ([@"SM" isEqualToString:dict[@"cryptType"]]) {
        storeConfig.cryptType = FATApiCryptTypeSM;
    } else {
        storeConfig.cryptType = FATApiCryptTypeMD5;
    }
    
    [storeArrayM addObject:storeConfig];
}
FATConfig *config = [FATConfig configWithStoreConfigs:storeArrayM];
[[FATClient sharedClient] initWithConfig:config error:nil];

也可以这样初始化:

NSMutableArray *storeArrayM = [NSMutableArray array];
FATStoreConfig *storeConfig = [[FATStoreConfig alloc] init];
storeConfig.sdkKey = @"您的sdkKey信息";
storeConfig.sdkSecret = @"您的sdkSecret信息";
storeConfig.apiServer = @"服务器域名";
storeConfig.apmServer = @"apm统计事件的域名";
[storeArrayM addObject:storeConfig];
   
FATStoreConfig *storeConfig2 = [[FATStoreConfig alloc] init];
storeConfig2.sdkKey = @"您的sdkKey信息";
storeConfig2.sdkSecret = @"您的sdkSecret信息";
storeConfig2.apiServer = @"服务器域名";
storeConfig2.apmServer = @"apm统计事件的域名";
storeConfig2.cryptType = FATApiCryptTypeSM;
[storeArrayM addObject:storeConfig2];

FATConfig *config = [FATConfig configWithStoreConfigs:storeArrayM];
[[FATClient sharedClient] initWithConfig:config error:nil];

当需要使用百度地图/高德地图来实现MAP组件的功能时,需要去对应的平台申请 KEY,并进行初始化。

// 准备地图sdk初始化
[FATBDMapComponent setBDMapAppKey:@"申请的key"]
[FATGDMapComponent setGDMapAppKey:@"申请的key"]

当需要使用WebRTC组件的功能时,需要进行初始化注册组件。

// WebRTC初始化
[FATWebRTCComponent registerComponent]

当需要使用AgoraRTC组件的功能时,需要进行初始化注册组件。

// AgoraRTC初始化
[FATAgoraRTCComponent registerComponent]

当需要使用addPhoneContactAPI 的功能时,需要进行初始化注册组件。

// ContactSDK初始化
[FATContactComponent registerComponent]

当需要使用getClipboardDatasetClipboardDataAPI 的功能时,需要进行初始化注册组件。

// ClipBoard初始化
[FATClipBoardComponent registerComponent];

当需要使用微信的支付,登录,获取用户信息等能力时,需要进行初始化注册组件。

// 微信扩展SDL初始化
[FATWXExtComponent registerComponent:@"微信appid" universalLink:@"universalLink"];

并在AppDelegate.m中增加下面的代码。



- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    /*  微信登录和分享    */
    if ([WXApi handleOpenURL:url delegate:[FATWXApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

// iOS 9.0 之前
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    /*  微信登录和分享    */
    // `WeChatHandleURLDelegate ` 为 `WXApiDelegate`代理文件
    if ([WXApi handleOpenURL:url delegate:[FATWXApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    /*  微信登录和分享    */
    if ([WXApi handleOpenURL:url delegate:[FATWXApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
  return [WXApi handleOpenUniversalLink:userActivity delegate:[FATWXApiManager sharedManager]];
}

当需要使用分享能力时,需要进行初始化注册组件。

// 微信扩展SDL初始化
[FATShareComponent registerComponent:@"微信appid" universalLink:@"universalLink" scheme:@"配置的scheme"];

并在AppDelegate.m中增加下面的代码。



- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    if ([WXApi handleOpenURL:url delegate:[FATShareApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

// iOS 9.0 之前
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    if ([WXApi handleOpenURL:url delegate:[FATShareApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    if ([WXApi handleOpenURL:url delegate:[FATShareApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
  return [WXApi handleOpenUniversalLink:userActivity delegate:[FATShareApiManager sharedManager]];
}

注意

如果同时使用微信SDK和分享SDK,代理方法的实现类可以只设置[FATWXApiManager sharedManager]来实现。 如果工程中已经自己实现了微信代理方法的实现类,需要处理微信的请求- (void)onReq:(BaseReq*)req方法,并处理req为LaunchFromWXReq类型,得到对应的json字符串后,解析参数并通过核心SDK的打开小程序的方法,才能实现点击分享到微信的链接后打开对应的分享小程序,否则流程无法闭环。 下面是实例代码:

- (void)onReq:(BaseReq *)req {
    if ([req isKindOfClass:[LaunchFromWXReq class]]) {
        LaunchFromWXReq *launchReq = (LaunchFromWXReq *) req;
        [self managerDidRecvLaunchFromWXReq:launchReq];
    }
}

- (void)managerDidRecvLaunchFromWXReq:(LaunchFromWXReq *)launchReq {
    NSString *ext = launchReq.message.messageExt;
    NSDictionary *dic = [self dictionaryWithJsonString:ext];
    NSString *appId = dic[@"appId"];
    [[FATClient sharedClient] closeAllAppletsWithCompletion:^{
        [[FATClient sharedClient] startRemoteApplet:appId startParams:@{@"path":dic[@"path"] ? dic[@"path"] : @"", @"query":dic[@"query"] ? dic[@"query"] : @""} InParentViewController:[FATShareTools topViewController] completion:nil];
    }];
}

- (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
    if (jsonString == nil) {
        return nil;
    }
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err];
    if(err) {
        NSLog(@"json解析失败:%@",err);
        return nil;
    }
    return dic;
}

注意

使用微信扩展SDK必须保证核心SDK版本在2.37.13或以上,使用分享SDK必须保证核心SDK版本在2.39.11或以上。

注意

由于FinAppletWXExt需要覆盖buttonOpenTypeDelegate(2.37.13前的版本为FATAppletDelegate)中的open-type相关的方法,具体为chooseAvatar、contact、feedback、getPhoneNumber、launchApp、shareAppMessage六个方法。 因此若您实现了buttonOpenTypeDelegate并实现了以上六个方法,FinAppletWXExt将会接管getPhoneNumber,剩余的五个方法请按以下方式迁移,若您未实现buttonOpenTypeDelegate或没有用到以上六个方法,可以忽略此处,若是既需要集成FinAppletWXExt又需要实现open-type相关的方法,则参考下边的说明。 1.在核心SDK和微信扩展SDK初始化成功后,设置您的代理方法实现类

[FATDelegateClientHelper sharedHelper].buttonOpenTypeDelegate = [FINWXButtonDelegate sharedHelper];

2.实现buttonOpenTypeDelegate的代理方法

- (BOOL)forwardAppletWithInfo:(NSDictionary *)contentInfo completion:(void (^)(FATExtensionCode code, NSDictionary *result))completion {
    return YES;
}

- (BOOL)getUserInfoWithAppletInfo:(FATAppletInfo *)appletInfo bindGetUserInfo:(void (^)(NSDictionary *result))bindGetUserInfo {
    return YES;
}

- (BOOL)contactWithAppletInfo:(FATAppletInfo *)appletInfo sessionFrom:(NSString *)sessionFrom sendMessageTitle:(NSString *)sendMessageTitle sendMessagePath:(NSString *)sendMessagePath sendMessageImg:(NSString *)sendMessageImg showMessageCard:(BOOL)showMessageCard {
    return YES;
}

- (BOOL)getPhoneNumberWithAppletInfo:(FATAppletInfo *)appletInfo bindGetPhoneNumber:(void (^)(NSDictionary *result))bindGetPhoneNumber {
    NSLog(@"小程序信息:%@", appletInfo);
    return YES;
}

- (BOOL)launchAppWithAppletInfo:(FATAppletInfo *)appletInfo appParameter:(NSString *)appParameter bindError:(void (^)(NSDictionary *result))bindError bindLaunchApp:(void (^)(NSDictionary *result))bindLaunchApp {
    return YES;
}

- (BOOL)feedbackWithAppletInfo:(FATAppletInfo *)appletInfo {
    return YES;
}

- (BOOL)chooseAvatarWithAppletInfo:(FATAppletInfo *)appletInfo bindChooseAvatar:(void (^)(NSDictionary *result))bindChooseAvatar {
    return YES;
}

蓝牙库无需进行初始化,在项目中引用了头文件即可。

注意

2.21.1以及之后的版本,不再需要调用配置扩展 SDK,SDK 内部会自动判断是否集成扩展 SDK,自动触发配置扩展SDK。

当然,如果您需要使用到扩展 SDK 中的 API,那么您还需要在初始化 SDK 之后,配置扩展 API。 调用一次如下代码即可:

// 准备扩展api
[[FATExtClient sharedClient] fat_prepareExtensionApis];

注意

如果未设置currentUserId,则缓存数据会缓存到默认目录,获取最近打开小程序列表时,获取到的是默认目录下的小程序。如果要不同用户使用不同的缓存目录,请不同用户设置不同的currentUserId

# 8. handleOpenURL处理

小程序支持外部通过链接打开小程序,需要做如下处理。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([[FATClient sharedClient] handleOpenURL:url]) {
        return YES;
    }
    return YES;
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
    if ([[FATClient sharedClient] handleOpenURL:url]) {
        return YES;
    }
    return YES;
}

# 9. 打开小程序

FATAppletRequest *request = [[FATAppletRequest alloc] init];
request.appletId = @"小程序id";
request.apiServer = @"服务器地址";
request.transitionStyle = FATTranstionStyleUp;
request.startParams = startParams;
    
[[FATClient sharedClient] startAppletWithRequest:request InParentViewController:self completion:^(BOOL result, FATError *error) {
    NSLog(@"打开小程序:%@", error);
} closeCompletion:^{
    NSLog(@"关闭小程序");
}];

其他关于 “人民网+”小程序 SDK 的 API介绍,请查看 API 说明文档

# 10. 扩展SDK

对扩展SDK使用的快速集成说明,详细使用方式参考上面的 集成SDK

# 10.1 微信扩展SDK

微信SDK的快捷接入,提供调起微信通过微信小程序获得登录、用户信息、手机号、支付的能力。 快捷集成方式:

pod 'FinAppletWXExt'

注意

在使用FinAppletWXExt时,需要按照 微信接入指南-iOS 接入指南 (opens new window) 进行配置,具体有如下内容:

  1. 配置应用的Universal Links
  2. 打开Associated Domains开关,将Universal Links域名加到配置上;
  3. 在工程的Target -> 【Info】 -> 【URL Types】,新增一个URL Schemes(key为weixin,value为wx+在微信申请的Appid);
  4. 在工程info.plist中增加应用访问白名单LSApplicationQueriesSchemes,对应的要填写的值为wechatweixinweixinULAPI。记得在苹果开发者中心App ID Configuration处勾选Associated Domains

进行初始化注册组件:

// 微信扩展SDL初始化
[FATWXExtComponent registerComponent:@"微信appid" universalLink:@"universalLink"];

并在AppDelegate.m中增加下面的代码。



- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    /*  微信登录和分享    */
    if ([WXApi handleOpenURL:url delegate:[FATWXApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

// iOS 9.0 之前
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    /*  微信登录和分享    */
    // `WeChatHandleURLDelegate ` 为 `WXApiDelegate`代理文件
    if ([WXApi handleOpenURL:url delegate:[FATWXApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    /*  微信登录和分享    */
    if ([WXApi handleOpenURL:url delegate:[FATWXApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
  return [WXApi handleOpenUniversalLink:userActivity delegate:[FATWXApiManager sharedManager]];
}

注意

使用微信扩展SDK必须保证核心SDK版本在2.37.13或以上。

注意

由于FinAppletWXExt需要覆盖buttonOpenTypeDelegate(2.37.13前的版本为FATAppletDelegate)中的open-type相关的方法,具体为chooseAvatarcontactfeedbackgetPhoneNumberlaunchAppshareAppMessage六个方法。 因此若您实现了buttonOpenTypeDelegate并实现了以上六个方法,FinAppletWXExt将会接管getPhoneNumber,剩余的五个方法请按以下方式迁移,若您未实现buttonOpenTypeDelegate或没有用到以上六个方法,可以忽略此处,若是既需要集成FinAppletWXExt又需要实现open-type相关的方法,则参考下边的说明。
1.在核心SDK和微信扩展SDK初始化成功后,设置您的代理方法实现类

[FATDelegateClientHelper sharedHelper].buttonOpenTypeDelegate = [FINWXButtonDelegate sharedHelper];

2.实现buttonOpenTypeDelegate的代理方法

- (BOOL)forwardAppletWithInfo:(NSDictionary *)contentInfo completion:(void (^)(FATExtensionCode code, NSDictionary *result))completion {
    return YES;
}

- (BOOL)getUserInfoWithAppletInfo:(FATAppletInfo *)appletInfo bindGetUserInfo:(void (^)(NSDictionary *result))bindGetUserInfo {
    return YES;
}

- (BOOL)contactWithAppletInfo:(FATAppletInfo *)appletInfo sessionFrom:(NSString *)sessionFrom sendMessageTitle:(NSString *)sendMessageTitle sendMessagePath:(NSString *)sendMessagePath sendMessageImg:(NSString *)sendMessageImg showMessageCard:(BOOL)showMessageCard {
    return YES;
}

- (BOOL)getPhoneNumberWithAppletInfo:(FATAppletInfo *)appletInfo bindGetPhoneNumber:(void (^)(NSDictionary *result))bindGetPhoneNumber {
    NSLog(@"小程序信息:%@", appletInfo);
    return YES;
}

- (BOOL)launchAppWithAppletInfo:(FATAppletInfo *)appletInfo appParameter:(NSString *)appParameter bindError:(void (^)(NSDictionary *result))bindError bindLaunchApp:(void (^)(NSDictionary *result))bindLaunchApp {
    return YES;
}

- (BOOL)feedbackWithAppletInfo:(FATAppletInfo *)appletInfo {
    return YES;
}

- (BOOL)chooseAvatarWithAppletInfo:(FATAppletInfo *)appletInfo bindChooseAvatar:(void (^)(NSDictionary *result))bindChooseAvatar {
    return YES;
}

# 10.2 地图扩展SDK

当你在使用Map组件的功能时,如果想使用三方地图来实现的话,可引用FinAppletBDMap(百度地图)FinAppletGDMap(高德地图),默认情况下则由FinAppletExt(原生地图)实现。

高德地图SDK最多允许app同时有10个map视图对象

当超过10个map视图对象时,新的地图内容会显示黑屏。所以,当使用高德地图来实现map组件(即依赖高德地图扩展SDK)时,需要小程序在页面的onHide()里移除销毁map,然后在onShow()里创建地图和添加地图内容。

快捷集成方式:

#pod 'FinAppletBDMap'
#pod 'FinAppletGDMap'  // 选择一个放开即可
pod 'FinAppletExt'

进行初始化注册组件: 当需要使用百度地图/高德地图来实现MAP组件的功能时,需要去对应的平台申请 KEY,并进行初始化。

#import  <FinAppletExt/FinAppletExt.h>
// 根据你实际情况,引入对应的头文件
#import  <FinAppletBDMap/FinAppletBDMap.h>
#import  <FinAppletGDMap/FinAppletGDMap.h>
// 准备地图sdk初始化
// 根据你实际情况,初始化相应的地图
[FATBDMapComponent setBDMapAppKey:@"申请的key"]
[FATGDMapComponent setGDMapAppKey:@"申请的key"]

# 10.3 蓝牙扩展SDK

如果需要在小程序中使用蓝牙功能,可引入蓝牙扩展SDK 快捷集成方式:

pod 'FinAppletBLE'

蓝牙SDK不需要初始化,引入头文件即可

#import <FinAppletBLE/FinAppletBLE.h>

# 10.4 声网扩展SDK

如果需要在小程序中使用live-pusherlive-player功能,可引入声网SDK 快捷集成方式:

pod 'FinAppletAgoraRTC'

进行初始化注册组件:

#import <FinAppletAgoraRTC/FinAppletAgoraRTC.h>
// AgoraRTC初始化
[FATAgoraRTCComponent registerComponent]

# 10.5 WebRTC扩展SDK

如果需要在小程序中使用WebRTC功能,可引入WebRTCSDK 快捷集成方式:

pod 'FinAppletWebRTC'

进行初始化注册组件:

#import <FinAppletWebRTC/FinAppletWebRTC.h>
// WebRTC初始化
[FATWebRTCComponent registerComponent]

# 10.6 联系人扩展SDK

如果需要在小程序中使用addPhoneContact,添加手机通讯录联系人,可引入联系人SDK 快捷集成方式:

pod 'FinAppletContact'

进行初始化注册组件:

#import <FinAppletContact/FinAppletContact.h>
// ContactSDK初始化
[FATContactComponent registerComponent]

# 10.7 剪贴板扩展SDK

如果需要在小程序中使用剪贴板功能,可引入剪贴板SDK 快捷集成方式:

pod 'FinAppletClipBoard'

进行初始化注册组件:

#import <FinAppletClipBoard/FinAppletClipBoard.h>
// ClipBoard初始化
[FATClipBoardComponent registerComponent];

# 10.8 分享SDK

如果需要在小程序中分享功能,可引入分享SDK 快捷集成方式:

pod 'FinAppletShare'

进行初始化注册组件:

#import <FinAppletShare/FinAppletShare.h>
// share初始化
[FATShareComponent registerComponent:@"微信appid" universalLink:@"universalLink" scheme:@"配置的scheme"];

并在AppDelegate.m中增加下面的代码。



- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    if ([WXApi handleOpenURL:url delegate:[FATShareApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

// iOS 9.0 之前
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    if ([WXApi handleOpenURL:url delegate:[FATShareApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    if ([WXApi handleOpenURL:url delegate:[FATShareApiManager sharedManager]]) {
        return YES;
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
  return [WXApi handleOpenUniversalLink:userActivity delegate:[FATShareApiManager sharedManager]];
}
阴盛阳衰什么意思 中伤是什么意思 报考护士资格证需要什么条件 空调什么时候发明的 成五行属性是什么
天高云淡是什么季节 初中毕业可以考什么证 吃什么对子宫好 长期便秘喝什么茶好 隐血阴性是什么意思
有什么症状是肯定没怀孕 半套什么意思 身上长扁平疣是什么原因造成的 痛什么什么痛 hpv阳性是什么病
barry什么意思 12月18日什么星座 碳酸钠为什么显碱性 举世无双是什么意思 尿胆原高是什么原因
孩子注意力不集中是什么原因sanhestory.com 痛风不能吃什么食物hcv9jop3ns5r.cn 问号像什么kuyehao.com 序曲是什么意思hcv7jop7ns4r.cn 图什么是什么意思hcv7jop9ns1r.cn
abr是什么意思hcv8jop2ns4r.cn 心得安是什么药cl108k.com 瘆人是什么意思gangsutong.com 向左向右向前看是什么歌xianpinbao.com 金灿灿的什么hcv8jop4ns9r.cn
来苏水又叫什么名字hcv7jop6ns7r.cn 什么叫房颤hcv8jop8ns9r.cn 什么的波涛cj623037.com 豆绿色是什么颜色hcv8jop4ns6r.cn 1975年属兔五行属什么jingluanji.com
胰腺炎吃什么hcv8jop0ns4r.cn yjs是什么意思hcv8jop3ns1r.cn gp什么意思hcv8jop2ns9r.cn 汗疱疹用什么药hcv8jop4ns8r.cn cga是什么意思hcv9jop5ns9r.cn
百度