可以通过两种方式来集成智能证件照 SDK:「快速集成」和「自定义集成」。
快速集成:使用 SDK 提供的界面,只需调用入口函数并注册回调
自定义集成:仅使用 SDK 提供的网络接口,自定义实现界面及相关逻辑
快速集成使用 SDK 实现的相机、打分、抠图制作等预置界面,只需少量代码即可快速集成。
智能证件照 SDK 使用 CocoaPods 进行安装。需要在 Podfile
中添加依赖。
source 'https://git.coding.net/leqi/Specs.git'
use_frameworks!
target '<Your Target Name>' do
pod 'Safelight', '~> 1.3.0'
end
@import Safelight
SafelightDelegate
,在代码中调用如下:[Safelight makeWithKey:APP_KEY
secret:APP_SECRET
specKey:specKey
beginColor:beginColor
endColor:endColor
viewController:self
delegate:self]
参数说明:
beginColor
、endColor
同时传nil
则表示使用原背景(请在证件照规格列表中查找 SPEC_KEY
参数,请在背景色列表中查找 begin_color
以及end_color
参数);APP_KEY
、APP_SECRET
可以去证件照SDK官网获取。
成功回调方法:
- (void)safelightFinishedWithImage:(UIImage * _Nonnull)image score:(NSInteger)score;
参数说明:
若回调该方法则表示证件照任务已完成,image
为最终处理生成的图片,score
为证件照对传入照片的综合打分。
失败回调方法:
- (void)safelightFinishedWithError:(NSError * _Nullable)error;
参数说明:
若回调该方法则表示证件照任务发生错误,error
为证件照返回的错误信息。当[error.domain isEqualToString:[Safelight errorDomain]]
为YES
并且error.code
也同时为-1001时,表示该错误是由于用户主动取消了操作导致;其它错误信息可以根据[error localizedDescription]
来查看。
对于需要自己定义 UI 样式的开发者,可以选择自行实现界面及跳转逻辑,仅使用 SDK 提供的证件照制作接口。
打开Xcode,将下载好的SDK中下列文件拖入工程并勾选,具体如下图所示:
在Build Settings->Linking->Other Linker Flags中加上-all_load,具体如下图所示:
在Build Phases->Link Binary With Libraries->添加libc++.tbd,具体如下图所示:
JYNetwork
初始化需要传入appKey
、appSecret
两个参数。
#import "safelight_filament.h"
JYNetwork *network = [JYNetwork sharedNetwork];
[network setAppKey:appKey appSecret:appSecret];
注意事项:
APP_KEY
、APP_SECRET
可以去证件照SDK官网获取。此处若不使用单例,则下述所有步骤之前,都需重复该操作。
#import "safelight_filament.h"
UIImage *img = [UIImage imageNamed:@"测试照片.jpg"];
[JYNetwork createTask:img
beginColor:16777215
endColor:16777215
SpecKey:specKey
successBlock:^(NSDictionary *dict) {
NSLog(@"任务ID\n%@",dict[@"task_id"]);
} failBlock:^(NSString *errorMessage) {
NSLog(@"%@",errorMessage);
}];
注意事项:
beginColor
和endColor
参数用于生成照片背景色。(请在颜色列表中查找beginColor
和endColor
参数)
SpecKey
是将要生成的规格参数KEY
,请在规格列表中查找SpecKey
参数。
successBlock
中获取的任务ID将被用于之后的调用。
#import "safelight_filament.h"
[JYNetwork getTaskState:taskId successBlock:^(NSDictionary *dict) {
NSLog(@"任务状态%@",dict[@"status"]);
NSLog(@"预览图URL%@",dict[@"image_preview_url"]);
NSLog(@"描述%@",dict[@"description"]);
} failBlock:^(NSString *errorMessage) {
NSLog(@"%@",errorMessage);
}];
注意事项:
taskId
在创建照片任务请求中得到的。
任务状态:SUCCESS
成功;PENDING
等待处理;STARTED
开始处理;RETRY
重试;FAILURE
失败。
只有SUCCESS
状态下才能获得预览图URL。
只有FAILURE
状态下才能获得失败原因。
STARTED
状态表示开始处理了,PENDING
状态表示正在处理,RETRY
表示需要重试。
出现STARTED
、PENDING
、RETRY
这三种状态中任意一种,都可以再请求一次。
#import "safelight_filament.h"
if (taskId != nil) {
[JYNetwork createOrder:taskId successBlock:^(NSDictionary *dict) {
if (dict[@"message"] !=nil) {
NSString *str = dict[@"message"];
NSLog(@"%@",str);
}else{
NSDictionary *order = dict[@"order"];
NSLog(@"ID\n%@",order[@"id"]);
NSLog(@"订单号\n%@",order[@"order_no"]);
NSLog(@"付款时间\n%@",order[@"paid_at"]);
NSLog(@"付款状态\n%@",order[@"state"]);
}
} failBlock:^(NSString *errorMessage) {
NSLog(@"%@",errorMessage);
}];
}
注意事项:
创建订单时候taskId
不能为空。付款状态有已创建created
和已付款paid
,目前只会返回paid
,建议使用时候判断一下。
#import "safelight_filament.h"
if (order_no != nil) {
[JYNetwork getURLofOrder:order_no successBlock:^(NSDictionary *dict) {
NSLog(@"%@",dict);
} failBlock:^(NSString *errorMessage) {
NSLog(@"%@",errorMessage);
}];
}
注意事项:
获取订单的时候order_no
不能为空(order_no
是在创建订单时得到的订单号)。
#import "safelight_filament.h"
UIImage *img = [UIImage imageNamed:@"测试照片.jpg"];
NSDictionary *dict = [JYGrade getScore:img];
for (NSString *key in dict) {
//评分项目--->分数
NSLog(@"%@ --> %@",key,dict[key]);
}
注意事项:
若不需要该照片的综合打分,则此步骤省略。