金服宝SDK

xuguoyong 41388bb246 导入 SDK的集成步骤 2 years ago
FINSwanSDK 839db711da jisimet 2 years ago
.gitignore a9b8e01cd6 Initial commit 2 years ago
LICENSE a9b8e01cd6 Initial commit 2 years ago
README.md 69a7990521 read me 2 years ago
导入SDK 0.jpg 41388bb246 导入 SDK的集成步骤 2 years ago
导入SDK 1.jpg 41388bb246 导入 SDK的集成步骤 2 years ago
导入SDK 2.jpg 41388bb246 导入 SDK的集成步骤 2 years ago
导入SDK 3.jpg 41388bb246 导入 SDK的集成步骤 2 years ago
导入SDK 4.jpg 41388bb246 导入 SDK的集成步骤 2 years ago

README.md

Swan SDK iOS demo app

本项目演示了如何调用凡泰极客Swan SDK快速构建客户端和员工端App。开发者通过这个示范项目了解如何能通过简单的代码把社交能力通过FinChat SDK嵌入到自己的现有App中。本示范项目的编译打包,利用了凡泰极客开发者社区提供的Cocopod工件仓库,把所需要的SDK系列组件在构建时通过依赖关系管理动态下载。

注意:目前的Swan SDK默认是不包含模拟器的架构,所以运行Demo时,请使用真机进行调试。切记!切记!切记!

金服宝iOS集成

注册申请凡泰极客开发者账号,申请AppId,AppKey

详细请咨询相关对接人。

iOS SDK 介绍及导入

iOS SDK 介绍

FinoChat SDK 为用户开发 IM 相关的应用提供的一套完善的开发框架。包括以下几个部分:

  • SDK_Core: 为核心的消息协议实现,完成与服务器之间的信息交换。
  • SDK: 是基于核心协议实现的完整的 IM 功能,实现了不同类型消息的收发、会话管理、群组、好友、聊天室等功能。
  • HttpEngine: H5资源加速服务组件
  • ConvoUI: 会话型UI交互组件
  • FinoChatClient: 是 SDK 的入口,主要完成初始化等功能,也是获取其他模块的入口。
  • AccountApi: 负责账户管理相关功能,包括登入、登出等。
  • ContacApi: 负责好友的添加删除,黑名单的管理。
  • GroupApi: 负责群组的管理,创建、删除群组,管理群组成员等功能。
  • ChatRoomApi: 负责聊天室的管理。
  • UIApi: 是一组 IM 相关的 UI 控件,旨在帮助开发者快速集成FinoChat SDK。
  • ChatUI: 消息聊天界面UI
  • ConversationUI: 会话列表UI
  • MineUI: “我”的信息UI
  • ContactUI: 通讯录UI

集成 iOS SDK

在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验和cocoapod使用经验,并能够理解相关基础概念,SDK支持iOS8及以上iOS版本。

为了保证SDK的不至于太大,我们目前提供的SDK是不支持模拟器架构的版本,如果在后期集成中需要支持模拟器架构,请联系对接人员。

第三方库介绍

FinoChatUI 中用到的第三方库:

  • MWPhotoBrowser: 图片处理库,浏览显示
  • MJRefresh: 用于页面刷新
  • libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换
  • Masonry: 布局
  • ReactiveObjc: 响应式框架
  • SDWebImage: 图片缓存

金服宝集成指南

因为金服宝分为两个移动端:客户端和投顾端(即员工端),两个端对配置有一些差异,但是基础配置过程一样。

金服宝基础配置

1.下载金服宝SDK,下载地址:https://git.finogeeks.com/finchat/FINSwanSDK

Framework的介绍

  • FinApplet.framework : 小程序framework
  • FinChat.framework : SDK核心组件
  • FinChatSDK.framework: 核心SDK,提供定制化接口以及SDK的初始化类
  • fincore.framework: SDK核心组件
  • JitsiMeet.framework: SDK音视频核心框架
  • Realm.framework: 数据存储服务,详情: https://realm.io/cn/docs/
  • MatrixSDK.framework :IM核心组件
  • FINWebRTC.framework :音视频会议核心组件

2.创建一个新工程,导入SDK,具体步骤如下

2.1.将下载的SDK导入到工程中。 2.2.打开Xcode配置 General,将全部framework文件添加到 Linked Frameworks and Libraries 。 2.3.打开Xcode配置 General,将全部framework文件添加到 Embedded Binaries 。

3.修改工程配置

在【project】 ---> 【Build Settings】--->bitcode 设置为NO。

在【Build Settings】 中修改Swift配置 设置Always Embed Swift Standard Libraries为YES。

4.编译工程,没有报错说明SDK集成完毕,下面开始使用SDK(如有不了解的地方,可查看demo的集成做相关的比较)。

5.在appDelegate中设置SDK的配置信息

在AppDelegate 中配置初始化SDK,首先要引用SDK:

#import <FinChatSDK/FinoChat.h>

然后设置配置信息,在application:didFinishLaunchingWithOptions:中配置

示例:

// 1.构造配置信息对象
FinoChatConfig *config = [[FinoChatConfig alloc] initWithDict:[FINAppDemoTool  appConfigurationWithAppType:[FINAppDemoTool currentAppType]]];
FinoChatOptions *options = [FinoChatOptions optionsWithConfig:config];
options.isAPNSRegistered = YES;

NSError *error = nil;
//2.初始化SDK
[[FinoChatClient sharedInstance] fino_initSDK:options error:&error];

因为控制的项比较细,所以需要配置的字典信息比较长,可以参考Demo工程制做一个工具类(FINAppDemoTool)来生成这个配置的字典,在里面填入相关的apiURL、appid 等参数。

+ (NSDictionary *)appDemoTypeCustConfiguration_Cust
{
//1.apiURL
NSString *apiKey = @"RETAIL_Finochat_Apiurl";
NSString *apiURL = [self localApiURLWithApikey:apiKey];
if (!apiURL) {
apiURL = apiURLDes;
}

//2.appType
NSString *appType = @"RETAIL";

//3.appId
NSString *appid= @"com.finogeeks.finchat.swan.cust";

//4.会话列表的配置
NSDictionary *conversationDict = @{@"isHideMenuItem":@(NO),
@"isHideSearchBar":@(YES),
@"isShowGroupChat":@(YES),//是否显示创建群聊
@"isHideInviteRoom":@(YES),//是否隐藏邀请房间
};
//5.聊天房间的配置
NSDictionary *chatDict = @{
@"isVideoChat":@(NO),
@"isVideoConference":@(NO),
@"isShowWaterMark":@(NO),
@"convoUIHyperTextLines":@(0),
@"identificationStockCode":@(YES),
@"showLeaveMessageKeyBoardItem":@(YES),
@"hideSecurityNetdisk": @(YES),
@"hideInviteOpenAccount":@(YES),//是否隐藏开户邀请
@"hideProductRecommend":@(YES),//是否隐藏开户产品推荐
@"hideForwardMenue":@(NO),//是否隐藏转发
@"hideFavoriteMenue":@(NO),//是否隐藏收藏
@"hideAllSelectMenue":@(NO),//是否隐藏全选
@"hideAddKnowledge":@(NO),//是否隐藏添加知识库
@"hideRoomSetting":@(NO),//是否隐藏房间设置
@"memberAvatarClickEnable":@(YES),//房间内头像是否可点击
@"hideStaffCard":@(NO),//是否隐藏投顾名片
@"hideCustomerCard":@(NO),//是否隐藏客户名片
@"hideMultiSelectMenue":@(YES),//是否隐藏多选功能

};

//6.app的派单模式(可选 默认B模式)
NSString *dispatchMode = [[NSUserDefaults standardUserDefaults] objectForKey:@"FSWDispatch"];
if (!dispatchMode) {
dispatchMode = @"B";
}


//7.swan的配置
NSDictionary *swanSetting = @{
@"hideInviteOpenAccount":@(NO),//是否隐藏开户邀请
@"hideProductRecommend":@(NO),//是否隐藏开户产品推荐
@"hideForwardMenue":@(NO),//是否隐藏转发
@"hideFavoriteMenue":@(NO),//是否隐藏收藏
@"hideAllSelectMenue":@(NO),//是否隐藏全选
@"hideMySpace":@(NO),//是否隐藏我的空间
@"showThemeSetting":@(YES),//是否显示主题设置
@"hideMywallet":@(NO),//是否隐藏我的钱包
@"hideShare":@(YES),// 是否隐藏我的-->分享
@"hideLoginSetting":@(NO),//是否隐藏登录界面的设置
@"hideChangePassword":@(YES),//是否隐藏修改密码
@"hidePracticeNmber":@(NO),//是否隐藏执业编号
@"hideDepartment":@(NO),//是否隐藏营业部
@"hideRoomSetting":@(NO),//是否隐藏房间设置
@"swanRoomMemberAvatarClickEnable":@(NO),//房间内头像是否可点击
@"hideStaffCard":@(NO),//是否隐藏投顾名片
@"hideCustomerCard":@(NO),//是否隐藏客户名片
@"hideOrderLoading":@(NO),//是否派单的loading界面
@"isSwanCloud":@(NO),//是否是公有云版
@"chatRecordCombine":@(YES),//是否合并聊天记录
@"dispatchMode":dispatchMode,//app的派单模式
@"hideKnowledge":@(YES),//是否隐藏知识库
@"hideBrowsingHistory":@(YES),//是否隐藏浏览历史
@"hideViewManagement":@(YES),//是否观点管理
@"hideActivityManagement":@(YES),//是否活动管理
@"hideProductManagement":@(YES),//是否合产品管理

};
//8.addressBook的配置
NSDictionary *addressBookSetting = @{
@"autoAddFriend":@(YES),//是否自动添加好友
@"hideMyFriend":@(NO),//是否隐藏我的好友
@"deleteFriend":@(NO),//是否开启删除好友功能
@"hideSearchFile":@(YES),//是否隐藏搜索文件菜单
@"hideSearchAddressBook":@(NO),//是否隐藏搜索通讯录菜单
@"hideSearchKnowledge":@(YES),//是否隐藏搜索知识库菜单
@"hideSearchCommunity":@(YES),//是否隐藏搜索合规社区菜单
@"hideSearchApplet":@(YES),//是否隐藏搜索小程序菜单
@"hideSearchChannel":@(YES),//是否隐藏搜索频道菜单
@"hideNewChat":@(NO),//是否隐藏新的会话
};



//9.mine的配置
NSDictionary *mineSetting = @{
@"disableEditName":@(YES),//是否不允许允许修改用户名
};

//10.appkey (获取方式请登录官网 https://www.finogeeks.com)
NSString *appKey = @"w9BRUmE10xT0KgG4tPcwST4bw5y59SXkNZ6FzlsZOhnd6FaISbEpxrJOUFR7wop/RekxCzEjwgVj2GlO7ZVCxjNC/dWp3P1U7mjpjyKoJfRF6TELMSPCBWPYaU7tlULGbu2qV4VyEnoNcO7iZP3KDeC=";


//11.
NSString *urlSchemaPrefix = @"jfbcust";

NSDictionary *appConfir = [self appConfigrWithApiURL:apiURL appType:appType appKey:appKey appid:appid urlSchemaPrefix:urlSchemaPrefix conversationDict:conversationDict chatDict:chatDict swanSetting:swanSetting addressBookSetting:addressBookSetting mineSetting:mineSetting];

return appConfir;
}

5.1 注意事项

如果要多个app共享数据,则要把【工程】 --->【Capabilities】中的App Groups 开关打开。

如果不需要多个app共享数据功能,则可以跳过此步骤。

5.2 注意事项----打开工程对swift支持

在【project】 ---> 【Build Settings】--->Always Embed Swift Standard Libraries 设置为 YES。

客户端配置

因为SDK是针对客户咨询,投顾给予解决问题等场景,所以会有两个端,那么客户端和投顾端的配置必然是会有差异的。

1.配置客户端需要的配置参数

这里主要是针对上面步骤 5中的configDict 中的一些参数做一些修改。 apiURL:是客户端后台的域名或者服务器地址。 appType:客户端需填RETAILappid:是客户端工程的bundleId。 appKey: 是客户端使用的appKey。(员工端跟客户端使用的appkey有可能是不一样的) appGroupIdentifier:如果有需要以后跟其他的app间做数据共享,那么才需要配置,如果不需要,则就不用配置了,这个参数与步骤5.1的配置要保持一致。

其他一些开关的配置,比如要隐藏立即咨询按钮。 需要在conversation 字典里配置@"isShowImmediateBtn":@(NO), 比如要隐藏右上角的+,则需要在conversation 字典里配置 @"isHideMenuItem":@(YES),

2.客户端登录

客户端的登录接口与投顾端的登录接口也有不同。 客户端使用的接口如下:

- (void)loginWithUsername:(NSString *)username
password:(NSString *)password
accountType:(NSString *)accountType
success:(void (^)(NSDictionary *result))success
failure:(void (^)(NSError *error))failure;

你可以这样调用:

[[FinoChatClient sharedInstance].finoAccountManager loginWithUsername:@"" password:@"" accountType:@"" success:^(NSDictionary *result) {

} failure:^(NSError *error) {

}];

其中,accountType根据券商需要自己配置,也可参考我们的类型,"device"、"phone"、"trade"。"device"代表游客,"phone"代表注册账号,"trade"代表交易账号。

游客登录也可以使用我们的如下Api:

- (void)guestLoginWithAccountType:(NSString *)accountType
Success:(void (^)(NSDictionary *))success
failure:(void (^)(NSError *))failure

调用方式:

[[FinoChatClient sharedInstance].finoAccountManager guestLoginWithAccountType:@"device" Success:^(NSDictionary *) {

} failure:^(NSError *) {

}];

该API内容维护了一个设备的唯一标识,不管是否卸载的App,使用的都是同一个标识,可以避免产生过多的僵尸游客账号。

3.添加游客登录的时机

可以在初始化SDK成功后,根据自己的需求,看是否要调用游客登录的接口,如果需要可以像如下这样做:

// 1. 游客登录 设置一个loading
FINNewSplashViewController *splashViewController = [[FINNewSplashViewController alloc] init];
self.splashVC = splashViewController;
self.window.rootViewController = splashViewController;

// 2. 调用游客登录接口
[[FinoChatClient sharedInstance].finoAccountManager guestLoginWithAccountType:@"device" success:^(NSDictionary *result) {
// 不用设置 根视图  initSync会设置(会发送一个通知)
} failure:^(NSError *error) {
}];

当然,你也可以根据自己的需求在合适的时机调用游客登录。

4.访问会话列表页面

1、首先倒入相应头文件

#import <FinChatSDK/FinoChat.h>

2、如果要访问会话列表页面,可以按照如下方式调用:

UIViewController *viewController =  [[FinoChatClient sharedInstance].finoChatUIManager conversationViewController];

注意,该接口如果未登录时调用,会返回nil

至于是push 还是present 出来,就看自己情况使用即可。

Demo中是将会话列表作为TabbarController的第一个子栏目显示的。

投顾(员工)端配置

1.配置客户端需要的配置参数

这里也是针对上面步骤 5中的configDict 中的一些参数做一些修改。 apiURL:是投顾端后台的域名或者服务器地址。 appType:投顾端需填STAFFappid:是投顾端工程的bundleId。 appKey: 是投顾端使用的appKey。(员工端跟客户端使用的appkey有可能是不一样的) appGroupIdentifier:如果有需要以后跟其他的app间做数据共享,那么才需要配置,如果不需要,则就不用配置了,这个参数与步骤5.1的配置要保持一致。

2.投顾端登录

投顾端的登录接口与客户端的登录接口是不同的。 投顾端登录接口是:

- (void)login:(NSString*)username
password:(NSString*)password
success:(void (^)(NSDictionary*))success
failure:(void (^)(NSError *))failure;

你可以这样调用:

[[FinoChatClient sharedInstance].finoAccountManager login:@"" password:@"" success:^(NSDictionary *result) {

} failure:^(NSError *error) {

}];

3.投顾端主页分为消息、工作、通讯录、我的

// 获取会话列表界面,未登录时,返回nil
UIViewController *message = [[FinoChatClient sharedInstance].finoChatUIManager conversationViewController];
// 获取工作界面,未登录时,返回nil
UIViewController *work =  [[FinoChatClient sharedInstance].finoSwanUIManager swanOrderListViewController];
// 获取通讯录列表界面,未登录时,返回nil
UIViewController *contacts =  [[FinoChatClient sharedInstance].finoChatUIManager addressBookControllerWithContactsDelegate:nil contactsDataSource:nil];
// 获取我的界面,未登录时,返回nil
UIViewController *user =  [[FinoChatClient sharedInstance].finoSwanUIManager swanMineViewController];


4.将各个子页面添加到TabbarController中即可。

// 添加为tabbar控制器的子控制器
FINNavigationController *nav = [[FINNavigationController alloc] initWithRootViewController:childVc];
[self addChildViewController:nav];

也可以参考Demo工程

更多接口信息请查看接口文档 接口文档