今天分享的是一些第三方分享,登录 我认为的可能会遇到的坑点(国内的分享一般都是 腾讯平台、QQ平台、微博平台)(尤其是微信,QQ的这两个平台存在好多一样的方法名,基础公共类,初次使用可能会遇到好多坑,可能还会涉及到微信支付)
基础的环境配置,以及对应的平台注册这些相信这些方面没有太多的坑 这里就不说了
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 在这个方法里面就要区分是哪个平台操作行为来的回调 这里面我是按照他们的 appid 进行区分的 (这里区分QQ平台是登录 还是分享,我记得之前一个是带着 QQ是分享 一个带的是 tencent 是登录,这个建议自己打印验证一下)
-(void) onResp:(BaseResp*)resp 微信登陆,分享,支付 QQ 的分享都会以代理的形式回调这个方法 所以这里需要处理一下
-(void) onResp:(BaseResp*)resp{
WS(weakSelf);
if ([resp isKindOfClass:[SendAuthResp class]]) {
// 微信登陆的返回信息
SendAuthResp *sendAuthResp = (SendAuthResp *)resp;
[self getAccess_Token:sendAuthResp.code];
}else if ([resp isKindOfClass:[SendMessageToQQResp class]]) {
// QQ分享
SendMessageToQQResp * tmpResp = (SendMessageToQQResp *)resp;
if (tmpResp.type == ESENDMESSAGETOQQRESPTYPE && [tmpResp.result integerValue] == 0) {
// 分享成功
}else if (tmpResp.type == ESENDMESSAGETOQQRESPTYPE && [tmpResp.result integerValue] == -4){
// 取消分享
}
}else if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
// 微信分享
//把返回的类型转换成与发送时相对于的返回类型,这里为SendMessageToWXResp
SendMessageToWXResp *sendResp = (SendMessageToWXResp *)resp;
if (sendResp.errCode == 0) {
// 分享成功
} else if (sendResp.errCode == -2) {
// 取消分享
}
}else if ([resp isKindOfClass:[PayResp class]]) {
// 微信支付回调
//支付返回结果,实际支付结果需要去微信服务器端查询
NSString *strMsg;
switch (resp.errCode) {
case WXSuccess:
strMsg = @"支付结果:成功!";
NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
break;
default:
strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
break;
}
}
}
这里需要注意的是 QQ 登录的话 返回信息需要自己来处理 自己主动调用接口去获取信息
- (void)tencentDidLogin
{
// 获取用户信息
if (tencentOAuth.accessToken && 0 != [tencentOAuth.accessToken length])
{
// 记录登录用户的OpenID、Token以及过期时间
[tencentOAuth getUserInfo];
}
}
在调取 getUserInfo 获得登录后返回的信息之后 那么下面的方法会回调回来登陆的具体信息
#pragma mark 微信 登录后的信息需要 代理的方法获取
- (void)getUserInfoResponse:(APIResponse *)response
{
WS(weakSelf);
if (response.retCode == URLREQUEST_SUCCEED && kOpenSDKErrorSuccess == response.detailRetCode) {
NSMutableDictionary *dic = (NSMutableDictionary *)response.jsonResponse;
[dic setObject:tencentOAuth.accessToken forKey:@"access_token"];
[dic setObject:tencentOAuth.openId forKey:@"idstr"];
if (weakSelf.mFinsihBlock) {
weakSelf.mFinsihBlock([dic JSONString],nil);
}
}else{
if (weakSelf.mFinsihBlock) {
weakSelf.mFinsihBlock(nil,[NSError errorWithDomain:@"授权失败" code:400 userInfo:nil]);
}
}
}
// 这个是微博的回调处理 我们只是需要区分是登录回调 还是 分享回调就行 这个坑不多
#pragma mark -- WeiboSDKDelegate 微博代理方法
- (void)didReceiveWeiboResponse:(WBBaseResponse *)response {
WS(weakSelf);
if ([response isKindOfClass:WBSendMessageToWeiboResponse.class])
{
if (response.statusCode == 0) {
// 分享成功
}else {
// 分享失败
}
}
else if ([response isKindOfClass:WBAuthorizeResponse.class]){
if (response.statusCode == 0) {
// 登录成功
}
else {
// 登录失败
}
}
}
、、到这里那么一些第三方平台的登录,分享需要注意的坑点就基本解决了 (接下来会给大家分享一下推送方面的处理) 另外笔者正在学习cordova + ionic 混合开发,OC swift 这一块最近有点放下