一般第三方登錄都有集成好的SDK,比方說友盟的 shareSDK的 ,都集成的非常好了,知道要按照步驟配置就可以實現功能了.但是筆者在做微信第三方登陸的時候,發現shareSDK直接把注冊微信的appSecret暴露在代碼中,私底下認為是有問題的,于是查看了微信原生的api ,配合后臺做了微信原生SDK的登錄功能.
1.去微信官網下載最新sdk,并且按照步驟注冊微信信用,比方說你獲取到道德微信的id 是
static NSString* wechat_AppId =@"wx1234567789";
在AppDelegate.m中導入 WXApi
import "WXApi.h"
并且讓AppDelegate 類遵守 WXApiDelegate 協議
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXApi registerApp:wechat_AppId withDescription:@"Wechat"];
}
并且實現以下方法
//ios9 之前
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [WXApi handleOpenURL:url delegate:self];
}
-(BOOL)application:(UIApplication)app openURL:(NSURL)url options:(NSDictionary<NSString *,id> *)options
{
return [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if([sourceApplication isEqualToString:@"com.tencent.xin"])
{
return [WXApi handleOpenURL:url delegate:self];
}
return YES;
實現微信代理的協議方法
-(void) onResp:(BaseResp*)resp
{
NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
if ([resp isKindOfClass:[SendAuthResp class]])
{ SendAuthResp *aresp = (SendAuthResp *)resp;
NSString* state=aresp.state;
NSString *code = aresp.code;
DDLog(@"---code--%@-----",code);
if ([state isEqualToString:@"Apps"]&&aresp.errCode==0)
{
if (code) {
[self getWeiXinOpenId:code];
}
}
}
}
通過code獲取access_token,openid,unionid 此處需要后臺接口配合
-
(void)getWeiXinOpenId:(NSString *)code{
//發送網絡請求獲取到 access_token,openid,unionid 等參數
具體如何設計需要和后臺人員協商制定
//登錄成功后發送通知通知回調處理事件
[[NSNotificationCenter defaultCenter]postNotificationName:@"wechatSuccess" object:nil userInfo:returnValue];
}
總的來說就是微信授權登錄時分兩部分完成的 ,第一步是點擊彈出一個微信授權 的頁面 ,在你點擊確認授權后會調用 -(void) onResp:(BaseResp*)resp 從而獲取到那個code碼 ,然后根據這個code碼 去后臺那邊獲取openid 和access_token等.這樣做的好處是數據和授權在后臺都有記錄,可以讓微信號和自己的注冊登陸的賬號關聯起來使用