最近項目中需要做一個第三方登錄的功能,在此之中自己也是遇到了一個小坑,總得來說操作還是算簡單的,但是覺得這個坑有點意思,估計后面也會有人遇見,希望這篇文章會對別人有幫助
1、去微信開放平臺下載最新的SDK:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&token=791a4d35d71674aedd29bcd3aefab39f198d902d&lang=zh_CN
2、自己創建一個應用,獲取到需要的APP ID和APP Secret
3、將SDK中的三個文件導入你需要接入第三方工程中:libWeChatSDK.a,WXApi.h,WXApiObject.h?
4、添加以下依賴庫
SystemConfiguration.framework,
libz.dylib,
libsqlite3.0.dylib,
libc++.dylib,
Security.framework,
CoreTelephony.framework。
5、在你的工程文件中選擇Build Setting,在Search Paths中添加上面導入的三個文件的路徑(如果你的三個文件在一個文件夾里面,那是非誠簡單的)
6、在你的工程文件中選擇TARGETS 一欄,在info標簽欄的URL type添加URL scheme,
到這里,基本上的配置就完成了
下面開始代碼部分
為了不在APPDelegate寫太多的代碼,我自己新建了一個NSObject文件,作為一個單列,在這個單列中有許多的事情都可以在這里做,這樣會讓你的程序看起來不那么雜亂無章,也方便了我們的管理
當然這里必須得添加微信的頭文件 #import "WXApi.h"
WeChatManager.h文件
WeChatManager.m文件
@implementation WeChatManger
#pragma mark - LifeCycle
+(instancetype)sharedManager {
static dispatch_once_t onceToken;
static WeChatManger *instance;
dispatch_once(&onceToken, ^{
instance = [[WeChatManger alloc] init];
});
return instance;
}
- (void)dealloc
{
self.delegate = nil;
}
#pragma mark - WXApiDelegate微信回調
- (void)onResp:(BaseResp *)resp
{
/*微信登錄的回調*/
if ([resp isKindOfClass:[SendAuthResp class]])
{
//拿到微信返回的Code
}
}
- (void)onReq:(BaseReq *)req
{
}
/*微信登錄調起事件*/
+ (void)sendAuthRequest
{
//構造SendAuthReq結構體
SendAuthReq* req =[[SendAuthReq alloc ] init];
req.scope = @"snsapi_userinfo";
req.openID = @"wxdd13dcdbe6174bcf";
//第三方向微信終端發送一個SendAuthReq消息結構
[WXApi sendReq:req];
}
寫好了以上的方法,我們還是要遵循APP Delegate里面的方法的
首先少不了的還是微信的注冊
接下來是兩個APPDelegate方法的實現
到這里就基本上完成了微信的登錄的實現:
現在只需要在你要點擊的地方加上 [WeChatManger sendAuthRequest];這句代碼就可以實現了,
最后我要說的是我以為到了這里就已經完成了,確實也完成了,但是這是當我運行我的程序的時候我發現這個方法不是直接去違心的客戶端授權,而是跳轉到了一個網頁,這時候還需要用戶手動輸入自己的手機號才能授權,這樣會不會不太好呢,于是我問朋友找方法,終于讓我找到了問題的所在:原因就是在iOS 9中蘋果公司進行了策略更新,限制了http協議的訪問,所以當我們需要使用QQ/QQ空間/支付寶/微信的相關能力的時候,我們需要添加開白名單:
在你工程的info.plist里面添加如下配置:
你要做那個操作的時候添加對應的開白名單就好了,添加完成之后運行就可以跳轉到對應的應用中進行授權了