iOS微信第三方登錄

1.先拿微信開路。级野。。辰企。

設置微信的appKey和appSecret

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:KWechatKey appSecret:KWechatAppSecret redirectURL:@"http://mobile.umeng.com/social"];

}

2.applicationDelegate中

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication

annotation:(id)annotation {

    if([[url absoluteString] hasPrefix:@"wx"]) {
        return [WXApi handleOpenURL:url delegate:self];
    }
    return YES;

}

3.回調

-(void)onResp:(BaseResp*)resp{

    if ([resp isKindOfClass:[SendAuthResp class]])

        {

        SendAuthResp *aresp = (SendAuthResp *)resp;

        [[NSNotificationCenter defaultCenter] postNotificationName:WXAUTH_NOTIFICATION object:self userInfo:[NSDictionary dictionaryWithObject:aresp forKey:@"wxAuthReturn"]];

        NSString *shareStr = [[NSUserDefaults standardUserDefaults]objectForKey:@"share"];

    if (![shareStr  isEqual: @"share"] && aresp.errCode == 0)

        {

        //微信登錄成功,調用接口獲取進一步的數據

        [LoginViewController WeChatLogin:aresp.code];

        }
    }
}

4.在登錄頁面中的.h文件添加

+(void)WeChatLogin:(NSString *)code;

5.登錄頁面中的.m文件

//微信登錄

+(void)WeChatLogin:(NSString *)code

{

    [self.class getaccess_token:code];

}

+ (void)getaccess_token:(NSString*)code

{

//檢查網絡

    NSError *error = nil;

    if (![[Reachability reachabilityForInternetConnection] isReachable]) {

        UIAlertView *alertViews = [[UIAlertView alloc] initWithTitle:@"該功能需要連接網絡才能使用潜索,請檢查您的網絡連接狀態(tài)" message:nil delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil];

        [alertViews show];

        return;

    }

    NSString *weixinUrl = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",KWechatKey,KWechatAppSecret,code];

    NSLog(@"weixinUrl=%@",weixinUrl);

    NSString *urlString = [weixinUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];

    NSData *response = [NSURLConnection sendSynchronousRequest:req returningResponse:nil error:&error];

    if (response != nil){

        NSDictionary  *dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];

        if (dict) {

            NSNumber *retcode = [dict objectForKey:@"errcode"];

                if ([retcode integerValue] == 0) {

                    NSLog(@"登錄成功 access_token=%@ openid=%@",[dict objectForKey:@"access_token"],[dict objectForKey:@"openid"]);

                    [self getUserInfo:[dict objectForKey:@"access_token"] openid:[dict objectForKey:@"openid"]];

                    [[NSUserDefaults standardUserDefaults] setObject:[dict objectForKey:@"access_token"] forKey:@"ACCESS_TOKEN"];

                    [[NSUserDefaults standardUserDefaults] setObject:[dict objectForKey:@"openid"] forKey:@"OPENID"];

                    //注意竹习,這里用通知來處理你接下來要做什么列牺,與服務器對接的事件

                    [[NSNotificationCenter defaultCenter]postNotificationName:@"wxLogData" object:nil];

                  }
              }
          }
}

#pragma mark

#pragma mark-- 微信返回數據

+(void)getUserInfo:(NSString*)access_code openid:(NSString*)openid

{

    NSError *error = nil;

    NSString *weixinUrl = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",access_code,openid];

    NSLog(@"weixinUrl=%@",weixinUrl);

    NSString *urlString = [weixinUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];

    NSData *response = [NSURLConnection sendSynchronousRequest:req returningResponse:nil error:&error];

    if (response != nil)

        {

            NSDictionary  *dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];

            if (dict) {

            //NSLog(@"微信返回數據--%@",dict);

            NSNumber *retcode = [dict objectForKey:@"errcode"];

                if ([retcode integerValue] == 0){

                    NSLog(@"獲取用戶信息成功 nickName=%@ headImgUrl=%@",[dict objectForKey:@"nickname"],[dict objectForKey:@"headimgurl"]);

                    [[NSUserDefaults standardUserDefaults] setObject:[dict objectForKey:@"nickname"] forKey:@"wxNickName"];

                    [[NSUserDefaults standardUserDefaults] setObject:[dict objectForKey:@"headimgurl"] forKey:@"wxAvatar"];

                    [[NSUserDefaults standardUserDefaults] setObject:openid forKey:@"wxOpenid"];

                    }
              }
        }
}

6.最后在點擊微信登錄的按鈕上添加調起微信的方法就完成了喔

if ([WXApi isWXAppInstalled]) {

    SendAuthReq *req = [[SendAuthReq alloc] init];

    req.scope = @"snsapi_userinfo";

    req.state = @"App";

    [WXApi sendReq:req];

}

到此泌辫,已經完成 了微信登錄了震放,如果出現錯誤碼,你可以對照微信返回的錯誤碼殿遂,上次有人修改了微信的Secret 導致返回錯誤碼結尾是100025什么的邪锌,具體不太記得了癌瘾,拿到正確的secret就可以了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市妇萄,隨后出現的幾起案子冠句,更是在濱河造成了極大的恐慌幸乒,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聚唐,死亡現場離奇詭異,居然都是意外死亡扮惦,警方通過查閱死者的電腦和手機崖蜜,發(fā)現死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門客峭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舔琅,你說我怎么就攤上這事搏明。” “怎么了星著?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵同欠,是天一觀的道長横缔。 經常有香客問我茎刚,道長,這世上最難降的妖魔是什么膛锭? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任初狰,我火速辦了婚禮,結果婚禮上筝闹,老公的妹妹穿的比我還像新娘关顷。我一直安慰自己肩杈,他們只是感情好扩然,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布夫偶。 她就那樣靜靜地躺著兵拢,像睡著了一般逾礁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腻扇,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天幼苛,我揣著相機與錄音舶沿,去河邊找鬼配并。 笑死溉旋,一個胖子當著我的面吹牛,可吹牛的內容都是我干的召夹。 我是一名探鬼主播恕沫,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纱意,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了褐筛?” 一聲冷哼從身側響起渔扎,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎信轿,沒想到半個月后晃痴,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡财忽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年倘核,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片即彪。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡紧唱,死狀恐怖,靈堂內的尸體忽然破棺而出隶校,到底是詐尸還是另有隱情漏益,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布深胳,位于F島的核電站遭庶,受9級特大地震影響,放射性物質發(fā)生泄漏稠屠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一龙屉、第九天 我趴在偏房一處隱蔽的房頂上張望转捕。 院中可真熱鬧五芝,春花似錦沉删、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尊残,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間慰毅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人轨奄。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓枝冀,卻偏偏與公主長得像球切,于是被迫代替她去往敵國和親吨凑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內容

  • 注意:代碼自己動手寫怠堪,不要復制粟矿! GitHub 一、接入微信第三方登錄準備工作掏秩。 移動應用微信登錄是基于OAuth...
    大沖哥閱讀 15,100評論 0 7
  • 這是本人寫的第一篇文章,寫的不好還望見諒!~ 在做項目的時候,由于本人最先使用原生的微信集成第三方登錄,測試是沒有...
    哭與行閱讀 2,076評論 0 0
  • 標簽(空格分隔): iOS 我的計劃1.使用微信SDK實現微信第三方登錄2.使用友盟實現第三方登錄3.使用open...
    iOS_愛OS閱讀 5,778評論 1 9
  • multipliedBy(約束值為約束對象的百分比)用法: 動態(tài)布局,根據內容的大小构诚,父視圖大小根據子視圖大小改變...
    Cooperluffy丨路飛閱讀 640評論 0 0