iOS 使用Instagram授權(quán)登錄

移動(dòng)端集成Instagram登錄授權(quán)目前是不支持SDK哮伟,需要通過web形式加載url來獲取授權(quán)信息

1、申請(qǐng)應(yīng)用

先去https://developers.facebook.com/apps/創(chuàng)建應(yīng)用炬太,過程比較簡(jiǎn)單略過魂务。設(shè)置完成后進(jìn)入應(yīng)用炎疆,在控制面板中往下翻會(huì)找到Instagram點(diǎn)擊設(shè)置

這是我添加產(chǎn)品后的

可以看到應(yīng)用的所有信息,Instagram 應(yīng)用編號(hào)Instagram 應(yīng)用密鑰是自動(dòng)生成的勾拉;Instagram Display 名稱自定義煮甥;有效 OAuth 跳轉(zhuǎn) URI需要能正常跳轉(zhuǎn)的網(wǎng)址并且是https開頭的,這個(gè)后面授權(quán)成功會(huì)回調(diào)跳轉(zhuǎn)藕赞;取消授權(quán)回調(diào)網(wǎng)址數(shù)據(jù)刪除請(qǐng)求網(wǎng)址可以與上面一樣成肘。
image.png

往下翻,找到

image.png

添加一名Instagram測(cè)試人員(必須添加否則會(huì)授權(quán)失敻伞)
image.png

到這里Instagram準(zhǔn)備工作已經(jīng)做完了双霍。

2、iOS授權(quán)

主要思路就是:通過webView加載獲取codeurl批销,攔截回調(diào)的有效 OAuth 跳轉(zhuǎn) URI獲取里面的code值洒闸,通過code獲取user_idaccess_token,在通過user_idaccess_token獲取用戶名等信息均芽。

直接上代碼:

#import "WebLoginController.h"

@interface InstagramLoginController : WebLoginController

@property (nonatomic, copy) void (^getUserInfoCallback)(BOOL isSuccess, NSDictionary * _Nullable userInfo) ;

@end

#import "InstagramLoginController.h"

#define Instagram_client_id @""
#define Instagram_client_secret @""
#define Instagram_URI @"https://www.baidu.com/"

@interface InstagramLoginController ()

@end

@implementation InstagramLoginController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSString *urlString = [NSString stringWithFormat: @"https://api.instagram.com/oauth/authorize?client_id=%@&redirect_uri=%@&scope=user_profile,user_media&response_type=code", Instagram_client_id, Instagram_URI];
    
    [self loadUrl:urlString];
    
}

- (BOOL)judgeUrl:(NSString *)urlString {
    if ([urlString hasPrefix:Instagram_URI]) {
        NSString *replaceString = [NSString stringWithFormat:@"%@?code=", Instagram_URI];
        urlString = [urlString stringByReplacingOccurrencesOfString:replaceString withString:@""];
        NSString *code = [urlString stringByReplacingOccurrencesOfString:@"#_" withString:@""];
        NSLog(@"%@", urlString);
        [self getUserDateWidthCode:code];
        
        return NO;
    }
    NSLog(@"%@", urlString);
    return YES;
}

//處理請(qǐng)求用戶數(shù)據(jù)
- (void)getUserDateWidthCode:(NSString *)code {
    
    NSDictionary *params = @{
        @"client_id": Instagram_client_id,
        @"client_secret": Instagram_client_secret,
        @"grant_type": @"authorization_code",
        @"redirect_uri": Instagram_URI,
        @"code": code,
    };
    
    [PublicDialogManager showWaittingInView:self.view];
    [HTTPMANAGER startPostUrl:@"https://api.instagram.com/oauth/access_token" param:params success:^(NSDictionary * _Nullable resultDict) {
        NSLog(@"%@", resultDict);
        NSString *user_id = [resultDict stringWithFilted:@"user_id"];
        NSString *access_token = [resultDict stringWithFilted:@"access_token"];
        if (user_id.length > 0 && access_token.length > 0) {
            NSString *userInfoUrl = [NSString stringWithFormat:@"https://graph.instagram.com/%@?fields=id,username&access_token=%@", user_id, access_token];
            [HTTPMANAGER startGetUrl:userInfoUrl param:nil success:^(NSDictionary * _Nullable resultDict) {
                [PublicDialogManager hideWaittingInView:self.view];
                NSLog(@"%@", resultDict);
                if (self.getUserInfoCallback) {
                    self.getUserInfoCallback(YES, resultDict);
                }
                [self popBack];
            } failure:^(NSError * _Nullable error) {
                [PublicDialogManager hideWaittingInView:self.view];
                if (self.getUserInfoCallback) {
                    self.getUserInfoCallback(NO, nil);
                }
                NSLog(@"%@", error);
                [self popBack];
            }];
        }else {
            [PublicDialogManager hideWaittingInView:self.view];
            if (self.getUserInfoCallback) {
                self.getUserInfoCallback(NO, nil);
            }
            [self popBack];
        }
    } failure:^(NSError * _Nullable error) {
        [PublicDialogManager hideWaittingInView:self.view];
        if (self.getUserInfoCallback) {
            self.getUserInfoCallback(NO, nil);
        }
        [self popBack];
        NSLog(@"%@", error);
    }];
    
}

- (void)popBack {
    [self dismissViewControllerAnimated:YES completion:nil];
}

@end

再上一下WebLoginController部分代碼:

@interface WebLoginController : BaseViewController

@property (nonatomic, strong) WKWebView *webView ;
@property (nonatomic, strong) NSString *urlString ;

- (void)loadUrl:(NSString *)urlString ;

@end

#import "WebLoginController.h"

@interface WebLoginController ()<WKNavigationDelegate>

@end

@implementation WebLoginController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    WKWebViewConfiguration *webConfiguration = [WKWebViewConfiguration new];
    
    WKWebView *webView = [[WKWebView alloc] initWithFrame:[UIScreen mainScreen].bounds configuration:webConfiguration];
    [self.view addSubview:webView];
    webView.navigationDelegate = self;
    webView.opaque = NO;
    webView.backgroundColor = UIColorHex(#f6f6f6);
    self.webView = webView;
    
    [webView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(navigationBgView.mas_bottom);
        make.left.right.bottom.mas_equalTo(0);
    }];
    
}

- (void)loadUrl:(NSString *)urlString {
    
    NSString *urlStr = urlString;
    NSURL *url = [NSURL URLWithString:urlStr];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    [self.webView loadRequest:request];
    
}

//子類重寫
- (BOOL)judgeUrl:(NSString *)urlString {
    return YES;
}

#pragma mark - WKNavigationDelegate
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    // 獲取完整url并進(jìn)行UTF-8轉(zhuǎn)碼
    NSString *strRequest = [navigationAction.request.URL.absoluteString stringByRemovingPercentEncoding];
    if ([self judgeUrl:strRequest]) {
        // 允許跳轉(zhuǎn)
        decisionHandler(WKNavigationActionPolicyAllow);
    }else {
        // 不允許跳轉(zhuǎn)
        decisionHandler(WKNavigationActionPolicyCancel);
    }
}

@end

最后成功獲取信息丘逸,做一下回調(diào)就好了。


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掀宋,一起剝皮案震驚了整個(gè)濱河市深纲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劲妙,老刑警劉巖湃鹊,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異镣奋,居然都是意外死亡币呵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門唆途,熙熙樓的掌柜王于貴愁眉苦臉地迎上來富雅,“玉大人,你說我怎么就攤上這事肛搬。” “怎么了毕贼?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵温赔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我鬼癣,道長(zhǎng)陶贼,這世上最難降的妖魔是什么啤贩? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮拜秧,結(jié)果婚禮上痹屹,老公的妹妹穿的比我還像新娘。我一直安慰自己枉氮,他們只是感情好志衍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著聊替,像睡著了一般楼肪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惹悄,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天春叫,我揣著相機(jī)與錄音,去河邊找鬼泣港。 笑死暂殖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的当纱。 我是一名探鬼主播呛每,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼惫东!你這毒婦竟也來了莉给?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤廉沮,失蹤者是張志新(化名)和其女友劉穎颓遏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滞时,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叁幢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坪稽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曼玩。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窒百,靈堂內(nèi)的尸體忽然破棺而出黍判,到底是詐尸還是另有隱情,我是刑警寧澤篙梢,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布顷帖,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贬墩。R本人自食惡果不足惜榴嗅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陶舞。 院中可真熱鬧嗽测,春花似錦、人聲如沸肿孵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)颁井。三九已至厅贪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雅宾,已是汗流浹背养涮。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眉抬,地道東北人贯吓。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜀变,于是被迫代替她去往敵國(guó)和親悄谐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容