在日常开发的过程中,我们经常会遇到重复劳动的问题,UI的问题就算了,不同阶段不同时期UI变化多端,很难做到代码复用。这里就说说两个业务吧,微信,支付宝。相信大家都不陌生。
微信sdk在iOS中的应用
微信sdk在iOS程序中的应用场景还是比较多的,比如,分享图片,分享网址,分享小程序,授权登录,微信支付,跳转小程序等。如果涉及到到多个app,那么就存在重复劳动的可能,另外如果换工作了,也需要重复劳动,为了避免 重复劳动我这边进行了封装。具体代码如下:
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef void(^wxSuccessBlock)(id data);
typedef void(^wxFailureBlock)(NSError *error);
@interface JKWechatHelper : NSObject
+ (instancetype)shareInstance;
/**
初始化微信sdk
@param model 0:开发环境 1:正式环境 开发环境会涉及到日志的打印
@param appId 微信开发平台注册的appID
*/
+ (void)configModel:(NSInteger)model appId:(NSString *)appId;
/**
处理app跨应用跳转,主要在AppDelegate中应用
@param url 跳转的url
@return 处理结果
*/
+ (BOOL)handleOpenURL:(NSURL *)url;
/**
微信登录
@param success 成功回调
@param failure 失败回调
*/
+ (void)wxLoginSuccess:(wxSuccessBlock)success
failure:(wxFailureBlock)failure;
/**
微信充值
@param params 参数如:
@"appid" : 由用户微信号和AppID组成的唯一标识,发送请求时第三方程序必须填写,用于校验微信用户是否换号登录
@"partnerid" : 商家向财付通申请的商家id
@"prepayid" : 预支付订单id
@"noncestr" : 随机串,防重发
@"timestamp" : 时间戳,防重发
@"package" : 商家根据财付通文档填写的数据和签名
@"sign" : 商家根据微信开放平台文档对数据做的签名
@param success 成功回调
@param failure 失败回调
*/
+ (void)wxPayWithParams:(NSDictionary *)params
success:(wxSuccessBlock)success
failure:(wxFailureBlock)failure;
/**
微信拉取小程序
@param params 参数如下:
@"userName" : 小程序username
@"type" : 0:小程序正式版, 1:小程序开发版,2:小程序体验版
@"path" : 小程序页面的路径,不填默认拉起小程序首页
@param success 成功回调
@param failure 失败回调
*/
+ (void)wxLaunchMiniProgramWithParams:(NSDictionary *)params
success:(wxSuccessBlock)success
failure:(wxFailureBlock)failure;
/**
微信小程序分享
@param params 参数如下:
@"userName" : 小程序username
@"type" : 0:小程序正式版, 1:小程序开发版,2:小程序体验版
@"path" : 小程序页面的路径,不填默认拉起小程序首页
@"title" : 分享的标题
@ "webpageUrl" : 低版本网页链接,长度不能超过1024字节
@"image" : 小程序新版本的预览图,大小不能超过128k
@"scene": 发送的目标场景,0: 聊天会话界面, 1: 朋友圈, 2: 收藏, 3: 指定联系人 默认发送到会话。
@param success 成功回调
@param failure 失败回调
*/
+ (void)wxShareMiniProgramWithParams:(NSDictionary *)params
success:(wxSuccessBlock)success
failure:(wxFailureBlock)failure;
/**
微信分享图片,具体参数配置参考下面的方法
@param url url
@param extra 额外的参数
@param completeBlock 完成回调
*/
+ (void)wxShareImage:(NSURL *)url extra:(NSDictionary *)extra complete:(void(id result,NSError *error))completeBlock;
/**
微信图片分享
@param params 参数如下:
@"image" : 要分享的图片
@"scene": 分享的目标场景, 0: 聊天会话界面, 1: 朋友圈, 2: 收藏, 3: 指定联系人 默认发送到会话。
@param success 成功回调
@param failure 失败回调
*/
+ (void)wxShareImageWithParams:(NSDictionary *)params
success:(wxSuccessBlock)success
failure:(wxFailureBlock)failure;
/**
微信网页分享
@param params 参数如下:
@"title" : 标题,长度不能超过512字节
@"desc" : 描述内容,长度不能超过1K
@"url" : 网页的url地址,不能为空且长度不能超过10K
@"scene" : 分享的目标场景, 0: 聊天会话界面, 1: 朋友圈, 2: 收藏, 3: 指定联系人 默认发送到会话。
@param success 成功回调
@param failure 失败回调
*/
+ (void)wxShareUrlWithParams:(NSDictionary *)params
success:(wxSuccessBlock)success
failure:(wxFailureBlock)failure;
/**
微信分享
@param shareType 分享类型 0:图片,1:网页 2:小程序
@param params 分享参数 具体参数根据对应的分享类型参考上面的方法
@param success 成功回调
@param failure 失败回调
*/
+ (void)wxShareWithType:(NSInteger)shareType
params:(NSDictionary *)params
success:(wxSuccessBlock)success
failure:(wxFailureBlock)failure;
@end
注释已经写得很清楚了,大家可以详细看注释哦。源码地址:https://github.com/xindizhiyin2014/JKWechatHelper
pod 'JKWechatHelper'
使用时appDelegate中的处理如下:
//- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
// return [JKWechatHelper handleOpenURL:url];
//}
//
//- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
//
// if([url.scheme hasPrefix:@"wx"]){
// return [JKWechatHelper handleOpenURL:url];
// }
//
// return NO;
//}
//
//- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
//
// if([url.scheme hasPrefix:@"wx"]){
// return [JKWechatHelper handleOpenURL:url];
// }
//
// return NO;
//}
这几个方法具体根据自己的需要进行使用。
支付宝sdk在iOS中的应用
支付宝小程序目前在iOS中的应用主要体现在支付,后期可能会涉及到小程序相关。我这边也进行了封装,具体代码如下:
@interface JKAliPayHelper : NSObject
+ (instancetype)shareInstance;
//配置urlScheme,用来处理app跳转后的返回
+ (void)conifgAppScheme:(NSString *)appScheme;
+ (void)pay:(NSString *)orderString success:(void(^)(NSString *msg))success failuer:(void(^)(NSError *))failure;
+ (void)pay:(NSString *)orderString dynamicLaunch:(BOOL)dynamicLaunch success:(void(^)(NSString *msg))success failuer:(void(^)(NSError *))failure;
+ (void)handleURL:(NSURL *)url;
@end
支付宝的sdk处理起来比较的简单。在appDelegate中的处理如下:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[JKAliPayHelper handleURL:url];
return YES;
} else{
return NO;
}
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[JKAliPayHelper handleURL:url];
return YES;
}else{
return NO;
}
}
这样封装起来省事多了,每次直接拖代码就可以了,不用操心太多。源码地址:
https://github.com/xindizhiyin2014/JKAliPayHelper
pod 'JKAliPayHelper'
更多优质文章,可以微信扫码关注: