不想重复写代码了怎么办?来!造一个好的轮子吧

  在日常开发的过程中,我们经常会遇到重复劳动的问题,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'

更多优质文章,可以微信扫码关注:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/HHL110120/article/details/88765647