# **小鹅通原生SDK- iOS端接入指南**
小鹅通 SDK 依托于 XEWebView 来进行页面展示. 类似 UIWebView, 传入店铺页面地址,就可以进行完整的商品展示购买流程。具体可参考 DEMO。
<br/>
<font color='red'>**iOS App中课程支付必须接入iOS代币支付方案,因苹果对于虚拟产品有收取“苹果税”的规则,如不遵守会有下架风险**</font> [详细了解请点击](recall_scene/lnline_sdk/business/pay.md)
<br/>
### **1.前置条件**
* 注册使用小鹅店铺,取得店铺app\_id。
* 购买小鹅店铺sdk接入服务,取得client\_id。
#### **1.1 SDK相关参数名词解释**
| **参数名** | **描述** | **备注** |
| --- | --- | --- |
| app\_id | 店铺id | 小鹅店铺的店铺id,在管理台获取 |
| client\_id | sdk客户端ID(对应Client ID) | 开通sdk服务后在管理台获取 |
| secret\_key | 店铺配置安全密钥 | 开通sdk服务后在管理台获取 |
#### **1.2 SDK-URL链接配置规则说明**
| **参数名** | **规则说明** | **备注** |
| --- | --- | --- |
| 店铺首页 | [https://{{app\_id}}.h5.xiaoeknow.com](https://%7B%7Bapp_id%7D%7D.h5.xiaoeknow.com/) | 动态参数 app\_id:小鹅店铺id |
| 其他页面 | 通过小鹅店铺管理台以下路径:“课程管理-图文(课程类型,以图文为例)-点击某个具体的课程分享按钮-点击复制按钮”得到链接:[https://appidxxxxxx.h5.xiaoeknow.com/v1/course/text/i\_5e7f809dd6317\_qSMuUoAi?type=2SDK](https://appidxxxxxx.h5.xiaoeknow.com/v1/course/text/i_5e7f809dd6317_qSMuUoAi?type=2SDK)展示链接需要替换链接域名部分为{{app\_id}}.h5.xiaoeknow ,例如,您的appid参数为”apprnDA0ZDw4581”,那么适配SDK展示的链接如下:[https://apprnDA0ZDw4581.h5.xiaoeknow.com/v1/course/text/i\_5e7f809dd6317\_qSMuUoAi?type=2](https://apprnDA0ZDw4581.h5.xiaoeknow.com/v1/course/text/i_5e7f809dd6317_qSMuUoAi?type=2) | 动态参数 “appXXXXXXXXXX”:需动态替换为您的小鹅店铺id |
## **2\. 接入要求**
* iOS 8.0 或更高
* Xcode 9.0 或更高版本(建议使用最新版本)
## **3\. 接入流程**
[Github链接](https://github.com/xiaoeteam/XiaoeAppSDK-iOS) 推荐使用 CocoaPods 导入 framework。如有特殊需求,也可以手动导入。
#### **3.1 CococaPods 导入**
在你的 Podfile 文件中加入一行:
~~~
pod 'XEShopSDK'
~~~
运行 pod install
#### **3.1 手动导入**
XEShopSDK.framework 加入到工程 将对应的 framework 添加到 Embedded Binaries 中
⚠️注意:需要在 Build Settings 的 Other Linker flags 加上 -ObjC
### **3.2 配置 Info.plist 中的权限**
~~~
<key>NSCameraUsageDescription</key>
<string>请允许访问您的相机</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>请允许保存图片到相册</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>请允许访问您的相册</string>
<key>NSMicrophoneUsageDescription</key>
<string>请允许访问您的麦克风</string>
<key>UIRequiredDeviceCapabilities</key>
~~~
为了能够拉起微信支付,你需要配置如下
~~~
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
~~~
### **3.3 配置 app scheme(微信支付完成后跳转回App,无支付可忽略)**
然后通过 XEConfig 将 scheme 传递给 SDK。
⚠️只有配置了 Scheme, 并正确调用 SDK 的对应方法,微信支付完成后才能正确跳转回到你的 app 中。
### **3.4 初始化 SDK**
使用 SDK 前需要先初始化。
~~~
// 生成一个配置对象 从小鹅通申请的 clientId,appId 从小鹅通申请的店铺 Id
XEConfig *config = [[XEConfig alloc] initWithClientId:clientId appId: APPID]
config.scheme = SCHEME; // 配置 scheme 以便微信支付完成后跳转
config.enableLog = NO; // 关闭 sdk 的 log 输出
[XESDK.shared initializeSDKWithConfig:conf]; // 使用配置初始化 SDK
~~~
### **3.5 界面展示**
使用 XEWebView 来展示店铺界面
~~~
...
// 初始化 XEWebView,纯代码或者 Storyboard
self.webView.noticeDelegate = self; // 实现代理方法,监听相关的通知
// 加载链接
[self.webView loadRequest:urlRequest];
~~~
### **3.6 认证**
#### **3.6.1 同步认证信息**
登录后获取认证信息。同步给 SDK 的方法如下:
~~~
- (void)synchronizeCookieKey:(nullable NSString *)key
cookieValue:(nullable NSString *)value;
~~~
⚠️注意,接受到下文回调 XENoticeTypeLogin 时,应从通过您的App后台到小鹅云获取最新token并使用此方法同步到sdk内部
#### **3.6.2 清除认证信息**
在您的 App 内发生用户切换或用户退出的时, 为了避免出现客户信息混乱, 请务必执行如下代码登出小鹅通用户角色.
代码示例:
~~~
- (void)logout;
~~~
### **3.7 接收回调事件**
当遇到需要登陆才可以访问的页面,会触发下面的回调,此时去获取登录态信息,并同步给 SDK。(⚠️强烈建议在展示XEWebView前同步token到sdk中,以避免异步同步token方法导致用户体验不佳)
~~~
#pragma mark - XEWebViewNoticeDelegate
- (void)webView:(XEWebView *)webView didReceiveNotice:(XENotice *)notice
{
switch (notice.type) {
case XENoticeTypeLogin: // 收到登陆请求⚠️必须实现以在token失效时同步登录态至sdk内部
{
// 这里应该调用登陆接口,获取到cookie_key, cookie_value,
// 并通过 -synchronizeCookieKey:cookieValue: 同步至SDK
break;
}
case XENoticeTypeShare: // 收到分享的回调数据
{
// 在这里自定义分享操作
break;
}
case XENoticeTypeReady: // Web页面已准备好,可以调用分享接口
{
// 这里可以启用分享按钮
break;
}
default:
break;
}
}
~~~
#### **3.7.1 XENotice 类型**
XENotice 是 XEShopSDK 提供给商家的一种事件通知,用来告知特定事件的发生,并提供相关参数,以便商家针对特定事件进行二次开发。
目前所提供的类型如下:
##### **3.7.1.1 XENoticeTypeLogin 登录通知**
收到该通知时代表需要登录,请调用小鹅通登录态接口进行登录,并将返回值通过 SDK 的接口设置给 XESDK。
##### **3.7.1.2 XENoticeTypeShare 接收到分享结果的通知**
回调数据:
~~~
{
"share_content": "小鹅通分享描述",
"share_image": "小鹅通分享图片链接",
"share_link": "http://appTCVlUyvG2205.h5.xiaoeknow.com",
"share_title": "小鹅通分享标题"
}
~~~
说明
| 字段 | 说明 |
| --- | --- |
| share\_image | 图片链接 |
| share\_title | 标题 |
| share\_link | 页面链接 |
| share\_content | 描述 |
##### **3.7.1.3 XENoticeTypeTitleChange WebView 标题改变**
##### **3.7.1.3 XENoticeTypeOutLinkUrl 点击自定义链接回调**
规则为带参数 needoutlink=1 的链接, 例:[https://xiaoe-tech.com/?needoutlink=1](https://xiaoe-tech.com/?needoutlink=1)
### **3.8 页面分享**
如需要获取页面的分享信息, 需要调用 XEWebView 的share()方法来触发分享事件:
~~~
- (void)share;
~~~
触发分享操作后, XEWebView 会异步调用 webView:didReceiveNotice:代理方法,XENotice 的 response 会包含分享需要的各种信息。
并不是所有可见页面都能触发分享. 没有回调则代表该页面不可分享。
### **3.9 日志开关**
SDK 提供了日志功能,默认日志为关闭状态. 开发者可以通过 XEConfig 中的设置打开日志开关.
~~~
// 是否开启控制台日志输出,默认为NO。仅在 DEBUG 模式下有效
@property (nonatomic, assign) BOOL enableLog;
~~~
## **4 常见问题**
#### **4.1 iOS 使用 SDK 时,出现支付后不能返回 APP**
请参考上方接入指南,配置 app scheme.
#### **4.2 iOS点击去支付无法跳转到对应客户端微信**
首先确认用户设备是否安装相应客户端,其次确认 shouldStartLoadWithRequest 里是否拦截微信的 scheme,最后确认工程是否加了微信 scheme 白名单。
#### **4.3 pod 搜索不到最新的 SDK 呀?**
您电脑本地的 pod repo 没有更新。运行 pod repo update 即可。
#### **4.4点击分享按钮没有弹出分享。**
点击分享按钮后,SDK 会将页面相关信息返回到应用中。应用开发者需要自行实现分享的 UI。 监听一下消息即可获取分享相关信息:
~~~
- (void)webView:(id<XEWebView>)webView didReceiveNotice:(XENotice *)notice {
switch (notice.type) {
case XENoticeTypeShare: // 收到分享的回调数据
{
NSLog(@"分享数据:%@", notice.response);
break;
}
}
~~~
#### **4.5 分享回调没有图片等数据?**
需在B端后台开通配置
#### **4.6 接入过程中的问题及其他未注明事宜,请咨询您的专属管家。**
- 开发前必读
- 小鹅云介绍
- 更新日志
- 开始开发
- 开发指南
- 创建并授权应用
- 获取access_token(含代码示例)
- 开通接口权限
- 全局返回码
- 常用工具
- 日志排查工具
- 场景方案
- 同步用户场景
- 同步商品场景
- 同步订购关系场景
- 同步积分场景
- 同步页面统计场景
- 同步学习数据场景
- 同步推广员场景
- 内嵌SDK服务场景
- 产品介绍
- 产品简介
- 客户案例
- 接入流程
- 业务文档
- 账号打通
- 支付
- 直播带货
- 商品同步
- 订单同步
- 学习数据同步
- 企业内训
- PCweb
- H5web
- 流量变现
- App分享
- 微页面装修
- 直播连麦
- 技术文档
- 小鹅通SDK开发者声明
- 小鹅通SDK个人信息保护政策(2022年9月28日生效)
- 小鹅通SDK个人信息保护政策(2022年9月28日失效)
- 开发指南
- 原生SDK登录态
- Android-SDK 接入
- iOS-SDK 接入
- WebSDK接入
- 小程序接入
- 小程序支付接入
- 代币支付签名算法
- SDK&H5账号详解
- 发布日志(iOS)
- 发布日志(Android)
- 常见问题
- 消息推送
- 使用说明
- 消息加/解密
- 消息接收URL校验说明
- 订单状态推送
- 用户手机号变更推送
- 用户状态变更推送
- 积分变更消息推送
- 商品变更推送
- 考试消息推送
- 活动签到推送
- 订单支付推送
- 账号合并推送
- 用户注册推送
- 优惠券消息推送
- 信息采集推送
- 权益变更推送
- 用户标签变更消息推送
- API列表
- 获取access_token(含代码示例)
- 用户管理
- 使用说明
- 注册新用户
- 更新用户信息
- 获取用户列表2.0
- 获取用户列表1.0
- 查询单个用户信息
- 批量查询用户信息
- 获取用户消费信息
- 获取课程学员列表
- 获取训练营pro学员列表
- 获取会员卡用户信息
- 查询单个用户标签列表
- 查询用户合并记录
- 获取标签列表
- 添加/修改标签
- 添加/修改用户标签
- 获取用户反馈列表
- 获取用户反馈回复列表
- 回复用户反馈
- 学习数据管理
- 获取学习记录列表
- 获取每日学习记录
- 获取指定资源学习记录信息
- 获取营期下用户的学习情况
- 获取训练营pro学员任务详情
- 直播管理
- 获取直播列表
- 批量查询指定直播间列表信息
- 获取班课列表
- 获取签到列表
- 获取签到学员列表
- 获取直播红包列表
- 获取红包领取记录
- 获取直播数据概览
- 获取直播详情
- 获取直播详情2.0
- 获取红包数据概况
- 获取直播间讨论区消息列表
- 获取直播间多段推流记录
- 创建直播
- 编辑直播
- 上架/下架直播
- 删除直播
- 获取直播间用户列表
- 商品管理
- 查询商品列表2.0
- 查询商品列表1.0
- 查询组合课资源列表4.0
- 查询组合课资源列表3.0
- 获取训练营营期任务
- 商品详情2.0
- 商品详情1.0
- 获取课程关联的助学工具
- 获取直播带货商品列表
- 获取实物商品评论列表
- 商品增加库存
- 商品减少库存
- 新建实物商品
- 编辑实物商品
- 删除实物商品
- 获取实物商品类目列表
- 获取C端搜索商品列表
- 商品分组管理
- 获取店铺商品分组列表
- 获取商品分组内商品列表
- 批量新建/更新商品分组
- 删除商品分组
- 素材管理
- 获取素材列表
- 获取素材分组列表
- 素材分组编辑
- 素材分组移动
- 素材分组删除
- 订单管理
- 获取订单列表2.0
- 获取订单详情2.0
- 获取订单列表1.1
- 获取订单列表1.0
- 查询用户订单列表
- 获取订单详情
- 获取买赠订单信息
- 待付款订单改价
- 获取售后订单列表
- 获取售后订单详情
- 订单退款
- 订购管理
- 用户开通产品包权益2.0
- 用户开通产品包权益
- 查询用户订购资源列表
- 用户购买关系查询
- 查询用户资源权益2.0
- 查询用户资源权益1.0
- 取消订购
- 批量开通用户产品包权益-创建任务
- 批量开通用户产品包权益-查询任务列表
- 批量开通用户产品包权益-查询任务详情
- 物流管理
- 普通实物单发货(即将下线)
- 获取物流公司信息列表
- 订单全部商品发货
- 订单部分商品发货
- 修改已发货订单的物流信息
- 获取运费模板列表
- 推广员管理
- 查询推广员列表
- 查询推广员客户列表
- 查询推广员的下级推广员列表
- 查询指定推广员的信息
- 查询客户所属推广员
- 查询推广员名下新增/过期客户
- 新增推广员
- 推广员绑定客户
- 修改/解除绑定关系
- 设置推广员上级
- 推广订单详情
- 按日期查询推广员的收益和新增加的下级
- 推广订单详情(支持购物车订单返回多条记录)
- 信息采集管理
- 获取信息采集列表
- 获取单个信息采集结果
- 获取用户信息采集结果
- 根据表单ID以及用户ID获取信息采集结果
- 营销码券管理
- 优惠券列表
- 获取优惠券详情2.0
- 获取优惠券详情
- 获取优惠券领券用户
- 发放优惠券2.0
- 发放优惠券
- 优惠券核销
- 获取优惠码列表
- 获取优惠码码库列表
- 获取优惠码效果数据
- 创建优惠码
- 优惠码添加库存
- 优惠码失效
- 编辑优惠码
- 优惠码删除
- 获取兑换码码库列表
- 追加兑换码库存
- 创建兑换码
- 编辑兑换码
- 兑换码失效
- 用户使用兑换码
- 获取兑换码批次列表
- 作废单个兑换码
- 积分管理
- 查询用户积分日志
- 获取单个用户积分信息
- 批量获取用户积分列表
- 获取店铺积分信息
- 批量发放积分
- 批量扣减积分
- 解冻冻结积分
- 设置店铺积分过期时间
- 业务类型说明
- 页面统计管理
- 新建页面统计
- 编辑页面统计
- 获取页面统计列表
- 获取页面统计详情
- 获取页面统计订单列表
- 新建投放渠道
- 获取投放渠道列表
- 打卡管理
- 获取打卡列表
- 获取打卡参与用户
- 获取指定学员活动日记列表
- 获取活动点赞列表
- 获取指定学员被点赞总数和列表
- 获取用户日记被点评/评论列表
- 获取指定打卡的作业列表
- 获取学员的打卡日记列表
- 获取打卡关联的课程信息
- 练习管理
- 获取练习基本信息列表
- 获取练习结果列表
- 获取练习详情
- 获取学员练习答题详情
- 作业管理
- 获取作业本列表
- 获取作业基本信息列表
- 获取作业结果列表
- 获取作业详情
- 获取学员作业答题详情
- 圈子管理
- 获取用户参与的圈子
- 考试管理
- 获取考试列表
- 获取考试详情
- 获取考试结果列表信息
- 获取考试结果详细信息
- 活动管理
- 获取活动列表
- 获取签到列表
- 获取活动报名列表
- 获取活动签到信息
- 组织管理
- 获取员工列表
- 获取员工详细信息
- 添加或者保存员工信息
- 启用员工
- 停用员工
- 删除员工
- 根据员工账号获取用户ID
- 获取组织结构树
- 添加或修改组织架构
- 移除组织架构
- 微页面管理
- 获取微页面列表
- 企学院专用(不对外开放)
- 学员管理(限企学院)
- 企学院获取学员列表
- 企学院添加学员
- 企学院修改学员
- 企学院删除学员
- 企学院添加组织架构
- 企学院删除组织架构
- 企学院编辑组织架构
- 企学院获取组织架构
- 企学院获取部门信息
- 活动管理(限企学院)
- 企学院用户签到活动列表
- 培训计划管理(限企学院)
- 获取培训计划列表
- 获取培训计划详情
- 获取用户培训学习数据
- 获取员工的培训计划列表
- 常见问题
- 问题汇总
- 问题反馈
