不知道从什么时候开始,app要集成微信登录必须要配置universalLink了。否则调不起来微信。之前只需要[WXApi registerApp:SDK_WX];就可以了,现在必须要[WXApi registerApp:SDK_WX universalLink:UNIVERSAL_LINK];才行。
配置UNIVERSAL_LINK分为几下几步。
一、登录开发者网站进入证书配置页面,进入 Identifiers里面把对应的Bundle ID下的Associated Domains勾选上。
在把xcode对应的applinks添加上。
然后在配置下URL Types
“LSApplicationQueriesSchemes“栏添加
新建一个不带后缀名的文件,(必须纯文本,命名为apple-app-site-association,去除后缀名)。最好让后台人员在其本地创建,因为我创建完发给后台时,自动生成了后缀名,改完也不行,所以让他自己建。内容是这样的,XXX表示苹果账号的团队ID,OOO表示项目的BundleID。
放在后台配置的域名服务下就行了。然后让他给你一个地址,例如这样:https://www.baidu.com/apple-app-site-association。
如果后台提供的url地址是https://www.baidu.com/apple-app-site-association。那么,
Associated Domains中填写applinks:www.baidu.com,
代码注册方法及微信开放平台中都填https://www.baidu.com/,
配置就差不多了。
如果在appdelegate里面回调不走,看看加没加这个方法。
- (BOOL)application:(UIApplication*)applicationcontinueUserActivity:(NSUserActivity*)userActivity
restorationHandler:(void(^)(NSArray> *__nullablerestorableObjects))restorationHandler {
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}。
接下来就是获取信息了。
//微信回调代理
- (void)onResp:(BaseResp*)resp{
// =============== 获得的微信登录授权回调 ============
if([respisMemberOfClass:[SendAuthRespclass]]) {
NSLog(@"******************获得的微信登录授权******************");
SendAuthResp*aresp = (SendAuthResp*)resp;
if(aresp.errCode!=0) {
dispatch_async(dispatch_get_main_queue(), ^{
[PKProgressHUD pkShowErrorWithStatueTitle:@"微信授权失败"];
});
return;
}
//授权成功获取 OpenId
NSString*code = aresp.code;
[selfgetWeiXinOpenId:code];
}
// =============== 获得的微信支付回调 ============
if([respisKindOfClass:[PayRespclass]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
}
}
//通过code获取access_token,openid,unionid
- (void)getWeiXinOpenId:(NSString *)code{
/*
appid 是 应用唯一标识,在微信开放平台提交应用审核通过后获得
secret 是 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code 是 填写第一步获取的code参数
grant_type 是 填authorization_code
*/
NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",SDK_WX,SDK_WX_SECRET,code];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL*zoneUrl = [NSURLURLWithString:url];
NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];
NSData *data1 = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];
if(!data1) {
[PKProgressHUD pkShowErrorWithStatueTitle:@"微信授权失败"];return ;
}
// 授权成功,获取token、openID字典
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data1 options:NSJSONReadingMutableContainers error:nil];
NSLog(@"token、openID字典===%@",dic);
NSString*access_token = dic[@"access_token"];
NSString*openid= dic[@"openid"];
// 获取微信用户信息
[self getUserInfoWithAccessToken:access_token WithOpenid:openid];
});
}
-(void)getUserInfoWithAccessToken:(NSString *)access_token WithOpenid:(NSString *)openid
{
NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",access_token,openid];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL*zoneUrl = [NSURLURLWithString:url];
NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];
NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
// 获取用户信息失败
if(!data) {
[PKProgressHUD pkShowErrorWithStatueTitle:@"微信授权失败"];return ;
}
// 获取用户信息字典
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//用户信息中没有access_token 我将其添加在字典中
[dicsetValue:access_tokenforKey:@"token"];
NSLog(@"用户信息字典:===%@",dic);
//微信返回信息后,会跳到登录页面,添加通知进行其他逻辑操作
[[NSNotificationCenter defaultCenter] postNotificationName:GETWXPARAMS object:dic];
});
});
}