标签:tde 网络请求 images nfa ini work 写代码 werror miss
iOS 集成微信、QQ 、新浪微博API进行分享、登录、支付文档一、集成微信平台API
「强制」iOS 接入微信SDK封装的工具类BHTWeixinSDK(微信登录,微信好友和朋友圈分享,微信支付(客户端签名))
二、SDK下载(微信平台API)
2.1微信官方的SDK下载地址如下:
https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Resource_Center_Homepage.html?action=dir_list
2.2接入流程文档地址如下:
https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Resource_Center_Homepage.html?action=dir_list
三、手动集成的话需要添加依赖库
强制:将SDK文件中包含的 libWeChatSDK.a,WXApi.h,WXApiObject.h 三个文件添加到你所建的工程中,在Build Phases下面的Link Binary With Libraries项中添加下面所需的依赖库:
四、工程配置属性(微信平台API)
强制:在你的工程文件中选择Build Setting,在"Other Linker Flags"中加入"-Objc -all_load"
五、设置 URL Scheme(微信平台API)
强制:修改 info.plist 文件 URL types 项中后面的URL Schemes内容为"wx+ appid",例如:wx1234567890 (我这里设置了支付宝,qq,微信,微博,只用到微信的话,就添加微信的就ok)
六、添加URL Schemes 白名单(微信平台API)
强制:在“Info.plist”中增加一个LSApplicationQueriesSchemes值,设置为array, 添加微信需要的几个
? ? item:
? ? wechat
? ? weixin
七、签名安全问题(这里是客户端来签名的)
八、Cocoapods 集成微信平台API( 自动集成方式)
?? ? # 微信支付 微信分享 微信登录
?? ? pod ‘WechatOpenSDK‘
? ? 1.切换到项目工程路径下:执行pod install 命令
九、可以愉快的写代码了(微信平台API)
强制:创建了一个继承于NSObject的 BHTWeixinSDK工具类(涉及微信登录,微信好友和朋友圈分享,微信支付),而且我在其中封装了一下微信支付时向后台请求prepayId的方法和处理回调结果用到的方法.
? ? ps:这个类中有网络请求,BHTNetworkManager是我自己对AFNetworking3.0的二次封装,感兴趣的可以看一看,不感兴趣的同学可以用AFN或者自己的网络框架.
9.1.网络库的二次封装(基于AFNetworking网络第三方的封装)
强制:.h 文件声明
//? BHTNetworkManager.h
//? BHTIntegralMal
//
//? Created by 蔡令 on 2020/5/29.
// 网络管理工具类
/*
网络的库的二次封装(基于AFNetworking网络第三方库的封装)
/
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
#pragma mark - block --声明回调数据
typedef void (^BTHrequestUploadProgressBlock)(NSProgress downloadProgress);
typedef void (^BTHrequestSuccessBlock)(NSURLSessionDataTask _Nonnull task, id _Nullable JSONDict);
typedef void (^BTHrequestFailedBlock)(NSURLSessionDataTask _Nullable task, NSError _Nonnull error);
typedef void (^BTHrequestFormDataBlock)(id <AFMultipartFormData> formData);
typedef void (^BTHrequestCompletionHandlerBlock)(NSURLResponse response, NSURL filePath, NSError error);
typedef NSURL _Nullable(^BTHrequestDestinationBlock)(NSURL targetPath, NSURLResponse response);
@interface BHTNetworkManager : AFHTTPSessionManager
#pragma mark - 实例化对象
/*
实例化
/
#pragma mark - GET 请求方式
/*
?? 发送get请求
?
?? @param url? ? ? ? ? ? ? ? ? ? ? 请求路径
?? @param params ? ? ? ? ? ? ? 请求参数
?? @param header ? ? ? ? ? ? ? ? ? 请求头Header
?? @param downloadProgressBlock? ? 网络请求进度
?? @param success? ? ? ? ? ? ? ? ? 请求成功后的回调,参数为id类型
?? @param failure? ? ? ? ? ? ? ? ? 请求失败后的回调
?/
(NSURLSessionDataTask )GET:(NSString )url
?? ? ? ? ? ? ? ? ? ? ? params:(id)params
? ? ? ? ? httpHeaderKeyValues:(NSDictionary *)header
?? ? ? ? ? ? ? ? ? ? progress:(BTHrequestUploadProgressBlock)downloadProgressBlock
? ? ? ? ? ? ? ? ? ? ? success:(BTHrequestSuccessBlock)success
? ? ? ? ? ? ? ? ? ? ? failure:(BTHrequestFailedBlock)failure;
#pragma mark - POST 请求方式
/*
?? 发送post请求
?
?? @param url? ? ? ? ? 请求路径
?? @param params ? 请求参数
?? @param header ? ? ? 请求头Header
?? @param success? ? ? 请求成功后的回调,参数为id类型
?? @param failure? ? ? 请求失败后的回调
?*/
(NSURLSessionDataTask )POST:(NSString )url
? ? ? ? ? ? ? ? ? ? ? ? params:(id)params
?? ? ? ? ? httpHeaderKeyValues:(NSDictionary *)header
? ? ? ? ? ? ? ? ? ? ? progress:(BTHrequestUploadProgressBlock)downloadProgressBlock
?? ? ? ? ? ? ? ? ? ? ? success:(BTHrequestSuccessBlock)success
?? ? ? ? ? ? ? ? ? ? ? failure:(BTHrequestFailedBlock)failure;
#pragma mark -? 上传文件
/*
?? 上传文件
?
?? @param url? ? ? ? ? ? ? 请求路径
?? @param params ? ? ? 请求参数
?? @param header ? ? ? ? ? 请求头Header
?? @param formDataBlock? ? 上传文件的信息
?? @param success? ? ? ? ? 请求成功后的回调,参数为id类型
?? @param failure? ? ? ? ? 请求失败后的回调
?/
(NSURLSessionDataTask )upload:(NSString )url
? ? ? ? ? ? ? ? ? ? ? ? ? params:(id)params
?? ? ? ? ? ? httpHeaderKeyValues:(NSDictionary *)header
?? ? ? constructingBodyWithBlock:(BTHrequestFormDataBlock)formDataBlock
?? ? ? ? ? ? ? ? ? ? ? ? success:(BTHrequestSuccessBlock)success
?? ? ? ? ? ? ? ? ? ? ? ? failure:(BTHrequestFailedBlock)failure;
#pragma mark -? 下载文件(图片)
/*
?? 下载
?
?? @param url? ? ? ? ? ? ? ? ? ? ? 请求路径
?? @param params ? ? ? ? ? ? ? 请求参数
?? @param header ? ? ? ? ? ? ? ? ? 请求头Header
?? @param downloadProgressBlock? ? 下载进度
?? @param destination? ? ? ? ? ? ? 请求成功后的回调,参数为id类型
?? @param completionHandler? ? ? ? 请求失败后的回调
?/
(NSURLSessionDownloadTask )download:(NSString )url
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? params:(id)params
?? ? ? ? ? ? ? ? ? httpHeaderKeyValues:(NSDictionary *)header
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? progress:(BTHrequestUploadProgressBlock)downloadProgressBlock
?? ? ? ? ? ? ? ? ? ? ? ? ? destination:(BTHrequestDestinationBlock)destination
?? ? ? ? ? ? ? ? ? ? completionHandler:(BTHrequestCompletionHandlerBlock)completionHandler;
@end
NS_ASSUME_NONNULL_END
强制:.m 文件实现
//? BHTNetworkManager.m
//? BHTIntegralMal
//
//? Created by 蔡令 on 2020/5/29.
//
#import "BHTNetworkManager.h"
@implementation BHTNetworkManager
#pragma mark - 实例化对象
/*
实例化
/
static BHTNetworkManager *_instance = nil;
// 设置请求头
#pragma mark - GET 请求方式
/*
?? 发送get请求
?
?? @param url? ? ? ? ? ? ? ? ? ? ? 请求路径
?? @param params ? ? ? ? ? ? ? 请求参数
?? @param header ? ? ? ? ? ? ? ? ? 请求头Header
?? @param downloadProgressBlock? ? 网络请求进度
?? @param success? ? ? ? ? ? ? ? ? 请求成功后的回调,参数为id类型
?? @param failure? ? ? ? ? ? ? ? ? 请求失败后的回调
?/
(NSURLSessionDataTask )GET:(NSString )url
?? ? ? ? ? ? ? ? ? ? ? params:(id)params
? ? ? ? ? httpHeaderKeyValues:(NSDictionary )header
?? ? ? ? ? ? ? ? ? ? progress:(BTHrequestUploadProgressBlock)downloadProgressBlock
? ? ? ? ? ? ? ? ? ? ? success:(BTHrequestSuccessBlock)success
? ? ? ? ? ? ? ? ? ? ? failure:(BTHrequestFailedBlock)failure{
//? ? 可以接受的类型
? ? self.responseSerializer = [AFHTTPResponseSerializer serializer];
//? ? 请求超时的时间
? ? self.requestSerializer.timeoutInterval = 30;
//? Header 请求头
? ? if (header) {
?? ? ? ? ? [self setHTTPHeaderKeyValues:header];
? ? }
?? NSURLSessionDataTask task = [self GET:url parameters:params progress:downloadProgressBlock success:success failure:failure];
?? return task;
}
#pragma mark - POST 请求方式
/*
?? 发送post请求
?
?? @param url? ? ? ? ? 请求路径
?? @param params ? 请求参数
?? @param header ? ? ? 请求头Header
?? @param success? ? ? 请求成功后的回调,参数为id类型
?? @param failure? ? ? 请求失败后的回调
?*/
(NSURLSessionDataTask )POST:(NSString )url
? ? ? ? ? ? ? ? ? ? ? ? params:(id)params
?? ? ? ? ? httpHeaderKeyValues:(NSDictionary )header
? ? ? ? ? ? ? ? ? ? ? progress:(BTHrequestUploadProgressBlock)downloadProgressBlock
?? ? ? ? ? ? ? ? ? ? ? success:(BTHrequestSuccessBlock)success
?? ? ? ? ? ? ? ? ? ? ? failure:(BTHrequestFailedBlock)failure{
//? ? 可以接受的类型
? ? self.responseSerializer = [AFHTTPResponseSerializer serializer];
//? ? 请求超时的时间
? ? self.requestSerializer.timeoutInterval = 30;
//? ? Header 请求头
? ? if (header) {
?? ? ? ? ? [self setHTTPHeaderKeyValues:header];
?? ? ? }
? ? NSURLSessionDataTask task = [self POST:url parameters:params progress:downloadProgressBlock success:success failure:failure];
?? ? ? return task;;
}
#pragma mark -? 上传文件
/*
?? 上传文件
?
?? @param url? ? ? ? ? ? ? 请求路径
?? @param params ? ? ? 请求参数
?? @param header ? ? ? ? ? 请求头Header
?? @param formDataBlock? ? 上传文件的信息
?? @param success? ? ? ? ? 请求成功后的回调,参数为id类型
?? @param failure? ? ? ? ? 请求失败后的回调
?/
(NSURLSessionDataTask )upload:(NSString )url
? ? ? ? ? ? ? ? ? ? ? ? ? params:(id)params
?? ? ? ? ? ? httpHeaderKeyValues:(NSDictionary )header
?? ? ? constructingBodyWithBlock:(BTHrequestFormDataBlock)formDataBlock
?? ? ? ? ? ? ? ? ? ? ? ? success:(BTHrequestSuccessBlock)success
?? ? ? ? ? ? ? ? ? ? ? ? failure:(BTHrequestFailedBlock)failure{
//? 可以接受的类型
? ? self.responseSerializer = [AFHTTPResponseSerializer serializer];
//? 请求超时的时间
? ? self.requestSerializer.timeoutInterval = 30;
// ? Header 请求头
? ? if (header) {
? ? ? ? [self setHTTPHeaderKeyValues:header];
? ? }
? ? NSURLSessionDataTask task = [self POST:url parameters:params constructingBodyWithBlock:formDataBlock progress:nil success:success failure:failure];
?? ? ? return task;
}
#pragma mark -? 下载文件(图片)
/*
?? 下载
?
?? @param url? ? ? ? ? ? ? ? ? ? ? 请求路径
?? @param params ? ? ? ? ? ? ? 请求参数
?? @param header ? ? ? ? ? ? ? ? ? 请求头Header
?? @param downloadProgressBlock? ? 下载进度
?? @param destination? ? ? ? ? ? ? 请求成功后的回调,参数为id类型
?? @param completionHandler? ? ? ? 请求失败后的回调
?/
(NSURLSessionDownloadTask )download:(NSString )url
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? params:(id)params
?? ? ? ? ? ? ? ? ? httpHeaderKeyValues:(NSDictionary )header
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? progress:(BTHrequestUploadProgressBlock)downloadProgressBlock
?? ? ? ? ? ? ? ? ? ? ? ? ? destination:(BTHrequestDestinationBlock)destination
?? ? ? ? ? ? ? ? ? ? completionHandler:(BTHrequestCompletionHandlerBlock)completionHandler{
// ? Header 请求头
? ? if (header) {
?? ? ? ? ? [self setHTTPHeaderKeyValues:header];
?? ? ? }
? ? NSURLRequest request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
? ? NSURLSessionDownloadTask *task = [self downloadTaskWithRequest:request progress:downloadProgressBlock destination:destination completionHandler:completionHandler];
? ? [task resume];
? ? return task;
?? ?
}
@end
9.2 BHTWeixinSDK 工具类基于WechatOpenSDK API框架的二次封装
//? BHTWeixinSDK.h
//? BHTIntegralMal
//
//? Created by 蔡令 on 2020/5/28.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface BHTWeixinSDK : NSObject
#pragma mark - 方法声明
/*
?实例化
?/
+(instancetype)shareInstance;
#pragma mark - 注册APPKEY
/*
?初始化微信,注册APPKEY
?/
/*
?打开其他app的回调
?/
+(BOOL)handleOpenURL:(NSURL *)url;
#pragma mark - 微信登录
/*
?调用微信登录接口
?/
+(void)sendWeixinLoginRequest;
/*
?查看微信是否安装
?/
#pragma mark - 微信支付的功能
/*
?根据订单信息向后台申请prepayId以调用微信支付接口
?
?@param userId ? 用户登录app的标识id
?@param orderId? 订单号,由后台提供
?@param account? 金额
?/
#pragma mark - 微信分享的功能
/*
?分享到微信好友
?
?@param title? ? 分享的文字标题
?@param content? 分享的文字内容
?@param urlStr ? 分享的图片URL字符串
?/
/*
?分享到微信朋友圈
?
?@param title? ? 分享的文字标题
?@param content? 分享的文字内容
?@param subImage? 分享的图片URL字符串
?@param urlStr ? 分享链接的地址URL字符串
?/
@end
NS_ASSUME_NONNULL_END
//? BHTWeixinSDK.m
//? BHTIntegralMal
//
//? Created by 蔡令 on 2020/5/28.
//
#import "BHTWeixinSDK.h"
#import "BHTNetworkManager.h"
#pragma mark - 微信接口
#define Weixin_GetAccessTokenURL? ? @"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code"
#define Weixin_isAccessTokenCanUse ? ? @"https://api.weixin.qq.com/sns/auth?access_token=%@&openid=%@"
#define Weixin_UseRefreshToken? ? ? @"https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=wx8daa93036f9c7721&grant_type=refresh_token&refresh_token=%@"
#define Weixin_GetUserInformation? @"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@"
@interface BHTWeixinSDK()<WXApiDelegate>
@end
@implementation BHTWeixinSDK
#pragma mark - 实例化对象(单列)
/*
?实例化
?
? return 返回当前对象
?/
static BHTWeixinSDK* _instance = nil;
+(instancetype) shareInstance{
? ? static dispatch_once_t onceToken ;
? ? dispatch_once(&onceToken, ^{
? ? ? ? _instance = [[super allocWithZone:NULL] init] ;
? ? }) ;
? ? return _instance ;
}
+(id)allocWithZone:(struct _NSZone *)zone{
? ? return [BHTWeixinSDK shareInstance] ;
}
-(id)copyWithZone:(NSZone *)zone{
? ? return [BHTWeixinSDK shareInstance] ;//return _instance;
}
-(id) mutablecopyWithZone:(NSZone *)zone{
? ? return [BHTWeixinSDK shareInstance] ;
}
#pragma mark - 回调
-(void)onReq:(BaseReq *)req{
?? ?
}
/*
?微信支付/微信登录
?/
-(void)onResp:(BaseResp )resp{
// 微信登录
? ? if([resp isKindOfClass:[SendAuthResp class]]){
? ? ? ? if (resp.errCode == 0) {
? ? ? ? ? ? [self loginWeixinSuccessWithBaseResp:resp];
? ? ? ? }else{
? ? ? ? ? ? DSLog(@"%@",LOGINFAILED);
? ? ? ? ? ? [MBProgressHUD wj_showError:LOGINFAILED];
? ? ? ? }
? ? }
//微信支付
? ? if ([resp isKindOfClass:[PayResp class]]){
? ? ? ? [self handleWeixinPayCallBackResultWithPayResp:resp];
? ? }else{
? ? ? ? ? DSLog(@"%@",LOGINFAILED);
? ? ? ? [MBProgressHUD wj_showError:LOGINFAILED];
? ? }
}
#pragma mark - 注册APPKEY
/*
?初始化微信,注册APPKEY
?/
/*
?打开其他app的回调
?/
+(BOOL)handleOpenURL:(NSURL *)url{
? ? return [WXApi handleOpenURL:url delegate:[self shareInstance]];
}
+(void)sendWeixinLoginRequest{
? ? //构造SendAuthReq结构体
? ? SendAuthReq* req =[[SendAuthReq alloc ] init ];
? ? req.scope = @"snsapi_userinfo" ;
? ? req.state = @"123" ;
? ? //第三方向微信终端发送一个SendAuthReq消息结构
? ? [WXApi sendReq:req completion:^(BOOL success) {
?? ? ? DSLog(@"%@",success);
? ? }];
}
#pragma mark - 微信登录成功获取token
-(void)loginWeixinSuccessWithBaseResp:(BaseResp )resp{
?? ? SendAuthResp? auth = (SendAuthResp)resp;
?? ? NSString code = auth.code;
? ? DSLog(@"code:%@",code);
//? ? Weixin_AppID和Weixin_AppSecret是微信申请下发的.
? ? NSString strUrl = [NSString stringWithFormat:Weixin_GetAccessTokenURL,Weixin_AppID,Weixin_AppSecret,code];
? ? [[BHTNetworkManager shareInstance] GET:strUrl params:@{} progress:^(NSProgress _Nonnull downloadProgress) {
? ? ? ? //网络请求进度条(暂时未封装-这个根据客户需求而定)
? ? } success:^(NSURLSessionDataTask _Nonnull task, id? _Nullable JSONDict) {
? ? ? ? NSDictionary responseObject=(NSDictionary )JSONDict;
? ? ? ? NSString access_token = responseObject[@"access_token"];
? ? ? ? NSString refresh_token = responseObject[@"refresh_token"];
? ? ? ? NSString openid = responseObject[@"openid"];
? ? ? ? [self isAccess_tokenCanUseWithAccess_token:access_token openID:openid completionHandler:^(BOOL isCanUse) {
? ? ? ? ? ? if (isCanUse) {
? ? ? ? ? ? ? ? [self getUserInformationWithAccess_token:access_token openID:openid];
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? [self useRefresh_token:refresh_token];
? ? ? ? ? ? }
? ? ? ? }];
? ? } failure:^(NSURLSessionDataTask _Nullable task, NSError _Nonnull error) {
? ? ? ? DSLog(@"error:%@",error);
? ? ? ? [MBProgressHUD wj_showError:REQUESTFAIL];
? ? }];
?? ?
}
#pragma mark - 若过期,使用refresh_token获取新的access_token
#pragma mark - 判断access_token是否过期
#pragma mark - 向后台申请支付请求,获取prepayId
/**
根据订单信息向后台申请prepayId以调用微信支付接口
@param userId ? 用户登录app的标识id
@param orderId? 订单号,由后台提供
@param account? 金额
*/
/**
调起微信客户端,申请支付
@param prepayID ? 得到prepayId后客户端生成签名然后发送支付请求
*/
#pragma mark - 微信支付是否成功的回调
-(void)handleWeixinPayCallBackResultWithPayResp:(BaseResp )resp{
? ? PayResp response=(PayResp *)resp;
? ? switch (response.errCode) {
?? ? ? ? ? case WXSuccess:
?? ? ? ? ? ? ? //服务器端查询支付通知或查询API返回的结果再提示成功
?? ? ? ? ? ? ? DSLog(@"支付成功");
?? ? ? ? ? ? ? break;
?? ? ? ? ? case WXErrCodeUserCancel:
?? ? ? ? ? ? ? //服务器端查询支付通知或查询API返回的结果再提示成功
?? ? ? ? ? ? ? DSLog(@"用户点击取消并返回");
?? ? ? ? ? ? ? break;
?? ? ? ? ? default:
?? ? ? ? ? ? ? DSLog(@"支付失败,retcode=%d",resp.errCode);
?? ? ? ? ? ? ? /*
? ? ? ? ? ? ? ? WXErrCodeCommon ? ? = -1, ? 普通错误类型
? ? ? ? ? ? ? ? WXErrCodeUserCancel = -2, ? 用户点击取消并返回
? ? ? ? ? ? ? ? WXErrCodeSentFail ? = -3, ? 发送失败
? ? ? ? ? ? ? ? WXErrCodeAuthDeny ? = -4, ? 授权失败
? ? ? ? ? ? ? ? WXErrCodeUnsupport? = -5, ? 微信不支持
? ? ? ? ? ? ? ? /
?? ? ? ? ? ? ? break;
?? ? ? }
}
#pragma mark - 微信分享
/*
?分享到微信好友
?
?@param title? ? 分享的文字标题
?@param content? 分享的文字内容
?@param urlStr ? 分享的图片URL字符串
?/
/*
?分享到微信朋友圈
?
?@param title? ? 分享的文字标题
?@param content? 分享的文字内容
?@param urlStr ? 分享的图片URL字符串
?/
? ? - (void)handleOpenURLWithURLHost:(NSURL *)url{
?? ? NSLog(@"url.host:%@", url.host);
?? ? ? //微信(登录,支付,分享)
?? ? ? if ([url.host isEqualToString:@"oauth"]||[url.host isEqualToString:@"pay"]||[url.host isEqualToString:@"platformId=wechat"]) {
? ? ? ? ? ? [BHTWeixinSDK shareInstance] handleOpenURL:url];
? }
}
十一、调用(微信平台API)
11.1调用之前需要判断是否安装了微信
/*
?查看微信是否安装
?/
#pragma mark - 微信分享的功能
/*
?分享到微信好友
?
?@param title? ? 分享的文字标题
?@param content? 分享的文字内容
?@param urlStr ? 分享的图片URL字符串
?/
/*
?分享到微信朋友圈
?
?@param title? ? 分享的文字标题
?@param content? 分享的文字内容
?@param subImage? 分享的图片URL字符串
?@param urlStr ? 分享链接的地址URL字符串
?/
十五、工程配置属性(QQ 平台的API)
?强制:在工程配置中的Build Settings一栏中找到Linking配置区,给Other Linker Flags配置项添加属性值:
? ? -fobjc-arc
十六、设置 URL Scheme (QQ 平台API)
强制:修改 info.plist 文件 URL types 项中后面的URL Schemes内容为"tencent + appid",例如:tencent1234567890
(我这里设置了支付宝,qq,微信,微博,只用到QQ的话,就添加QQ的就ok)
十七、添加URL Schemes 白名单(QQ 平台的API)
强制:在“Info.plist”中增加一个LSApplicationQueriesSchemes值,设置为array, 添加QQ和QQ空间需要的几个item(图片中我还添加了别的,只用QQ的话就填加下面这些就可以):
? ? ? ? mqqapi
? ? ? ? mqq
? ? ? ? mqqOpensdkSSoLogin
? ? ? ? mqqconnect
? ? ? ? mqqopensdkdataline
? ? ? ? mqqopensdkgrouptribeshare
? ? ? ? mqqopensdkfriend
? ? ? ? mqqopensdkapi
? ? ? ? mqqopensdkapiV2
? ? ? ? mqqopensdkapiV3
? ? ? ? mqzoneopensdk
? ? ? ? wtloginmqq
? ? ? ? wtloginmqq2
? ? ? ? mqqwpa
? ? ? ? mqzone
? ? ? ? mqzonev2
? ? ? ? mqzoneshare
? ? ? ? wtloginqzone
? ? ? ? mqzonewx
? ? ? ? mqzoneopensdkapiV2
? ? ? ? mqzoneopensdkapi19
? ? ? ? mqzoneopensdkapi
? ? ? ? Mqzoneopensdk
十八、Cocoapods 集成QQ平台的API(自动集成)
? pod ‘TencentOpenApiSDK‘, ‘~> 2.9.5‘
? ? 1.切换到项目工程路径下:执行pod install 命令
十九、可以写代码了(QQ平台的API)
//? BHTTencentSDK.h
//? BHTIntegralMal
//
//? Created by 蔡令 on 2020/5/29.
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface BHTTencentSDK : NSObject
#pragma mark - 方法声明
/*
实例化
/
+(instancetype) shareInstance;
/*
?初始化
?/
-(void)initSDK;
/*
?openURL
?/
+(BOOL)handleOpenURL:(NSURL *)url;
#pragma mark -? QQ 第三方登录
/*
?请求调用qq登录
?/
#pragma mark ---- QQ 分享到QQ好友/分享到QQ空间
/*
?分享到QQ好友
?
?@param title ? ? 分享的文字标题
?@param content ? 分享的文字内容
?@param urlStr? ? 分享的图片URL字符串
?/
+(QQApiSendResultCode)shareToQQWithTitle:(NSString )title Content:(NSString )content imageURLStr:(NSString *)urlStr;
/*
?分享到QQ空间
?
?@param title ? ? 分享的文字标题
?@param content ? 分享的文字内容
?@param urlStr? ? 分享的图片URL字符串
?/
+(QQApiSendResultCode)shareToQZoneWithTitle:(NSString )title Content:(NSString )content imageURLStr:(NSString *)urlStr;
@end
NS_ASSUME_NONNULL_END
//
//? BHTTencentSDK.m
//? BHTIntegralMal
//
//? Created by 蔡令 on 2020/5/29.
//
#import "BHTTencentSDK.h"
@interface BHTTencentSDK ()<TencentSessionDelegate>
@property (strong, nonatomic)TencentOAuth *tencentOAuth;br/>@end
@implementation BHTTencentSDK
#pragma mark - 将传过来的URL地址转成UTF8格式
static NSURL safeURL(NSString origin) {
? ? return [NSURL URLWithString:[origin stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}
static BHTTencentSDK _instance = nil;
//单例模式供外调用基类对象
+(instancetype) shareInstance{
? ? static dispatch_once_t onceToken ;
? ? dispatch_once(&onceToken, ^{
? ? ? ? _instance = [[super allocWithZone:NULL] init] ;
? ? }) ;
? ? return _instance ;
}
+(id) allocWithZone:(struct _NSZone )zone{
? ? return [BHTTencentSDK shareInstance] ;
}
-(id) copyWithZone:(NSZone *)zone{
? ? return [BHTTencentSDK shareInstance] ;
}
-(id) mutablecopyWithZone:(NSZone *)zone{
? ? return [BHTTencentSDK shareInstance] ;
}
#pragma mark -? QQ 第三方登录
//登录成功后的回调
//获取用户信息回调
//登录时网络有问题的回调
//初始化
-(void)initSDK{
? ? //appID:从腾讯那里申请的你的应用的AppID
? ? _tencentOAuth = [[TencentOAuth alloc] initWithAppId:QQ_AppID andDelegate:self];
}
//openURL
+(BOOL)handleOpenURL:(NSURL *)url {
? ? return [TencentOAuth HandleOpenURL:url];
}
#pragma mark ---- QQ 分享到QQ好友/分享到QQ空间
//分享到QQ好友
+(QQApiSendResultCode)shareToQQWithTitle:(NSString )title Content:(NSString )content imageURLStr:(NSString )urlStr{
? ? QQApiNewsObject newsObj = [QQApiNewsObject objectWithURL:safeURL(urlStr)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? title:title
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? description:content
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? previewImageURL:safeURL(urlStr)];
? ? SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
? ? return [QQApiInterface sendReq:req];
}
//分享到QQ空间
+(QQApiSendResultCode)shareToQZoneWithTitle:(NSString )title Content:(NSString )content imageURLStr:(NSString )urlStr{
? ? QQApiNewsObject newsObj = [QQApiNewsObject objectWithURL:safeURL(urlStr)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? title:title
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? description:content
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? previewImageURL:safeURL(urlStr)];
? ? SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
? ? return [QQApiInterface SendReqToQZone:req];br/>}
@end
二十、设置(QQ平台的API)
20.1在AppDelegate.m文件中初始化
? ? - (void)handleOpenURLWithURLHost:(NSURL *)url{
?? ? NSLog(@"url.host:%@", url.host);
?? ? ? ? ? //qq(分享,登录)
? ? ? ? if ([url.host isEqualToString:@"response_from_qq"]||[url.host isEqualToString:@"qzapp"]){
? ? ? ? ? ? [BHTTencentSDK shareInstance] handleOpenURL:url];
? ? ? ? }
? ? }
二十一、调用(QQ平台的API)
22.1 分享是方法,直接调用就好
#pragma mark ---- QQ 分享到QQ好友/分享到QQ空间
/*
?分享到QQ好友
?
?@param title ? ? 分享的文字标题
?@param content ? 分享的文字内容
?@param urlStr? ? 分享的图片URL字符串
?/
+(QQApiSendResultCode)shareToQQWithTitle:(NSString )title Content:(NSString )content imageURLStr:(NSString *)urlStr;
/
?分享到QQ空间
?
?@param title ? ? 分享的文字标题
?@param content ? 分享的文字内容
?@param urlStr? ? 分享的图片URL字符串
?/
+(QQApiSendResultCode)shareToQZoneWithTitle:(NSString )title Content:(NSString )content imageURLStr:(NSString )urlStr;
22.2 登录需要先实列化再调用一下接口
/
?请求调用qq登录
?*/
[[BHTTencentSDK shareInstance] sendQQLoginRequest];
标签:tde 网络请求 images nfa ini work 写代码 werror miss
原文地址:https://blog.51cto.com/14833121/2500839