在 iOS 开发中,要调用微信登录功能,需要首先在微信开放平台注册您的 App,并获取 AppID 和 AppSecret。然后,按照以下步骤进行操作:
安装微信 SDK:
将微信官方提供的 SDK 添加到项目中,或者使用 CocoaPods 安装。
如果使用 CocoaPods,请在Podfile文件中添加以下内容:
pod'WechatOpenSDK'
然后运行pod install安装 WechatOpenSDK。
导入微信 SDK:
在需要调用微信登录功能的类中,导入微信 SDK:
#import <WXApi.h>
注册 AppID:
在AppDelegate.m文件中导入 SDK,并在- (BOOL)application:didFinishLaunchingWithOptions:方法中注册您的 AppID:
#import <WXApi.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 注册微信 AppID
[WXApi registerApp:@"your_wechat_appid"];
//...
PS:如果集成了蚂蚁的mPaaS分享功能仍需要微信注册
代码如下
NSDictionary*configDic =@{@"weixin" : @{@"key":@"xxx", @"secret":@"xxx",@"universalLink":@"xxx"}};
[APSKClientregisterAPPConfig:configDic];
[WXApi registerApp:@"xxx" universalLink:@"xx"];
return YES;
}
调用微信登录功能:
if ([WXApi isWXAppInstalled]) {
// 构建微信登录授权请求
SendAuthReq *authReq = [[SendAuthReq alloc] init];
authReq.scope = @"snsapi_userinfo";
authReq.state = @"your_state";
authReq.openID = @“your_wechat_appid”;
// 发送请求
[WXApi sendReq:authReq completion:nil];
} else {
NSLog(@"微信未安装");
}
处理微信返回的结果:
在AppDelegate.m文件中实现- (BOOL)application:openURL:sourceApplication:annotation:和- (BOOL)application:openURL:options:方法,处理微信返回的结果:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
return [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:self];
}
实现WXApiDelegate代理方法:
在AppDelegate.h文件中声明实现WXApiDelegate代理:
#import <UIKit/UIKit.h>
#import <WXApi.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, WXApiDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
在AppDelegate.m文件中实现代理方法- (void)onResp:(BaseResp *)resp,处理微信登录授权结果:
- (void)onResp:(BaseResp *)resp {
if ([resp isKindOfClass:[SendAuthResp class]]) {
SendAuthResp *authResp = (SendAuthResp *)resp;
if (authResp.errCode == WXSuccess) {
// 授权成功
NSString *code = authResp.code;
NSLog(@"获取到的授权code: %@", code);
// 使用 code 获取 access_token 和 openid,然后获取用户信息
} else {
// 授权失败
NSLog(@"微信授权失败,错误码:%d", authResp.errCode);
}
}
}
使用 code 获取 access_token 和 openid,然后获取用户信息:
在授权成功后,您需要使用获取到的授权 code 向微信请求 access_token 和 openid。之后,您可以使用这些信息来获取用户的基本信息。这通常在服务器端进行,但这里将展示一个简单的客户端实现:
- (void)getAccessTokenWithCode:(NSString *)code {
NSString *urlString = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code", @"your_wechat_appid", @"your_wechat_appsecret", code];
NSURL *url = [NSURL URLWithString:urlString];
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (data) {
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSString *accessToken = json[@"access_token"];
NSString *openID = json[@"openid"];
if (accessToken && openID) {
// 获取用户信息
[self getUserInfoWithAccessToken:accessToken andOpenID:openID];
} else {
NSLog(@"获取 access_token 和 openid 失败");
}
} else {
NSLog(@"请求错误: %@", error);
}
}];
[task resume];
}
- (void)getUserInfoWithAccessToken:(NSString *)accessToken andOpenID:(NSString *)openID {
NSString *urlString = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@", accessToken, openID];
NSURL *url = [NSURL URLWithString:urlString];
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (data) {
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"用户信息: %@", json);
} else {
NSLog(@"请求错误: %@", error);
}
}];
[task resume];
}
在AppDelegate.m文件的- (void)onResp:(BaseResp *)resp方法中,授权成功后调用getAccessTokenWithCode:方法:
if (authResp.errCode == WXSuccess) {
// 授权成功
NSString *code = authResp.code;
NSLog(@"获取到的授权code: %@", code);
[self getAccessTokenWithCode:code]; // 添加这一行
} else {
// 授权失败
NSLog(@"微信授权失败,错误码:%d", authResp.errCode);
}
现在,当用户通过微信登录时,您将能够获取用户的基本信息。在实际应用中,您需要将这些信息传递给您的应用服务器,以便在您的系统中为该用户创建一个会话。