рдпрд╛рдВрдбреЗрдХреНрд╕ рдПрдкреАрдЖрдИ рдкрд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рдЗрд╕реЗ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП
рдкреВрдЫреЗрдВ рдФрд░
oauth.yandex.ru/token рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдЦрд╛рддреЗ рд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдирд╣реАрдВ рд╕реМрдВрдкрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рдпреИрдВрдбреЗрдХреНрд╕ рд╕реНрд╡рдпрдВ
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред рджреВрд╕рд░реА рд╡рд┐рдзрд┐, рдЬрд┐рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ, рдЗрд╕ рд╡рд┐рд╖рдп рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ - OAuth рдкреНрд░рд╛рдзрд┐рдХрд░рдгред
рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХрд░рдг
рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛
api.yandex.ru/oauth/doc/dg/tasks/register-client.xml рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ
рд╡рд░реНрдгрд┐рдд рд╣реИ ред
рдкрдВрдЬреАрдХрд░рдг рд╕реНрддрд░ рдкрд░, рд╣рдо рдПрдХ рдпреВрдЖрд░рдПрд▓ рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ

рдФрд░ рдЖрд╡реЗрджрди рдХреА рдЖрдИрдбреА рдпрд╛рдж рд░рдЦреЗрдВ

рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдк
рд╣рдо рдлрд┐рд░
рд╕реЗ рдкреНрд░рд▓реЗрдЦрди
рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, url рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдЙрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрдВрдЬреАрдХрд░рдг рдЪрд░рдг рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред
рдпрд╣рд╛рдВ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрднрд╡ рд╣реИрдВред
1) рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ URL рдпреЛрдЬрдирд╛ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕рдлрд╝рд╛рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рдкреБрдирдГ рдЖрд░рдВрдн рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рдпреВрдЖрд░рдПрд▓ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡реЗрджрди рджрд░реНрдЬ рдХрд░рдирд╛
рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддреГрдд
рд╣реИред2) рд╣рдо UIWebView рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╣рдо рдЕрдкрдиреА рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдХреНрд░рдордг рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВред
рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореБрдЭреЗ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпреИрдВрдбреЗрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдХреЛрдб рд▓рд┐рдЦрдирд╛
Xcode рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред


YandexOauthViewController рдЬреЛрдбрд╝реЗрдВред * рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП (рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ)ред
YandexOauthViewController.h рдореЗрдВ, рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓реЗрдВ:
#define URL_SCHEME @"iostestapp"
#define CLIENT_ID @"6ef1c6dc6f134a2daa67cc905e5c1a3d"
ViewController.h рдореЗрдВ, рд╣рдо YandexOauthViewController.h рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЦреБрдж рдХреЛ YandexOauthViewControllerDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛" рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
#import <UIKit/UIKit.h>
#import "YandexOauthViewController.h"
@interface ViewController : UIViewController <YandexOauthViewControllerDelegate>
@end
рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдЕрдзрд┐рдХреГрдд рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ViewController.m рдореЗрдВ рд╣рдо ViewDidLoad рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
- (рд╢реВрдиреНрдп) viewDidLoad
{
[рд╕реБрдкрд░ рд╡реНрдпреВрдбреАрдбрд▓рдб];
// рджреГрд╢реНрдп рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдИ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрдЕрдк рдХрд░реЗрдВ, рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдиреАрдм рд╕реЗред
YandexOauthViewController * cntrl = [[YandexOauthViewController рдЖрд╡рдВрдЯрди] init];
cntrl.delegate = self;
[self.navigationController presentModalViewController: cntrl рдПрдирд┐рдореЗрдЯреЗрдб: YES];
}
рдЖрддреНрдордирд┐рд░реНрднрд░рддрд╛ рдХреНрдпрд╛ рд╣реИ, рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд╕рд╣реА рд╣реЛрдВрдЧреЗ - рдЕрднреА рддрдХ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ AppDelegate.m рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
- (BOOL) рдЖрд╡реЗрджрди: (UIApplication *) рдЖрд╡реЗрджрди рдХрд┐рдпрд╛ рдЧрдпрд╛
{
self.window = [[UIWindow рдЖрдмрдВрдЯрд┐рдд] initWithFrame: [[рдпреВрдЖрдИрд╕реНрдХреНрд░реАрди рдореЗрдирд╕реНрдХреНрд░реАрди] рд╕реАрдорд╛]];
// рдЖрд╡реЗрджрди рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдб рдмрд┐рдВрджреБред
self.viewController = [[ViewController рдЖрд╡рдВрдЯрд┐рдд] initWithNibName: @ "ViewController" рдмрдВрдбрд▓: nil];
UINavigationController * nav = [[UINavigationController рдЖрдмрдВрдЯрд┐рдд] initWithRootViewController: self.viewController];
self.window.rootViewController = nav;
[self.window makeKeyAndV рдЕрджреГрд╢реНрдп];
YES рд╡рд╛рдкрд╕ рдХрд░реЗрдВ;
}
рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлреЙрд░реНрдо рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдмрд╛рдИрдВ рдУрд░ рдХрд╛ рдмрдЯрди (рдХреНрд░реЙрд╕ рдХреЗ рд╕рд╛рде) рд╕реНрдХреНрд░реАрди рд╕реЗ рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рджрд╛рдпрд╛рдВ рдмрдЯрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдЧрд┐рди рдкреГрд╖реНрда рдкрд░ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпреИрдВрдбреЗрдХреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓реЙрдЧрд┐рди рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдЦреЛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╡реЗ рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЯреЛрдХрди рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдкрд╛рд╕рд╡рд░реНрдб рд▓реЙрдЧрд┐рди рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕ рдЙрдкрдХрд░рдг рдкрд░ рд╕реНрдерд╛рдпреА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, Yandex рд╣рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрдВрдЬреАрдХрд░рдг рдХреА URL рдпреЛрдЬрдирд╛ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрдХреНрд░рдордг рдХреЛ YandexOauthViewController.m рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
- (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest: (NSURLRequest *) рдЕрдиреБрд░реЛрдз рдиреЗрд╡рд┐рдЧреЗрд╢рдирдЯрд╛рдЗрдк: (UIWebViewNavigationType) рдиреЗрд╡рд┐рдЧреЗрд╢рдирдЯрд╛рдЗрдк
{
// URL рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
NSURL * url = [URL рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ];
// рдХрд╕реНрдЯрдо URL рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
рдЕрдЧрд░ ([url.scheme isEqualToString: URL_SCHEME])
{
// рдиреЗрдЯрд╡рд░реНрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕рдВрдХреЗрддрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
UIApplication * app = [UIApplication sharedApplication];
app.networkActivityIndicatorV рдЕрджреГрд╢реНрдп = рд╕рдВ;
// URL рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрддреНрд╡реЛрдВ рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
// рд╣рдорд╛рд░рд╛ рдЯреЛрдХрди рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ 2 рдХреЗ рддрд╣рдд рдЧрд┐рд░рдлреНрддрд╛рд░реА рд╕рд░рдгреА рдореЗрдВ рд╣реЛрдЧрд╛
NSArray * arr = [[url description] ComponentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @ "# = &"];
// рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ рдФрд░ рдЯреЛрдХрди рдкрд╛рд╕ рдХрд░реЗрдВ
рдЕрдЧрд░ ([рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдЬрд╡рд╛рдм рд╣реИред рдЙрддреНрддрд░: @selector (yandexOauthViewController: succesfullLoginWithToken :)])
{
[рдкреНрд░рддрд┐рдирд┐рдзрд┐ yandexOauthViewController: рд╕реНрд╡рдпрдВ succesfullLoginWithToken: [рдЧрд┐рд░рдлреНрддрд╛рд░ objectAtIndex: 2]];
}
// URL рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП UIWebView рдЕрдХреНрд╖рдо рдХрд░реЗрдВ
рд╡рд╛рдкрд╕ рдирд╣реАрдВ;
}
// UIWebView URL рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
YES рд╡рд╛рдкрд╕ рдХрд░реЗрдВ;
}
рдпрд╣ YandexOauthViewControllerDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ViewController.m рдореЗрдВ рдмрдиреА рд╣реБрдИ рд╣реИред
- (рд╢реВрдиреНрдп) yandexOauthViewController: (YandexOauthViewController *) рдирд┐рдпрдВрддреНрд░рдХ
succesfullLoginWithToken: (NSString *) рдЯреЛрдХрди
{
[self.navigationController рдмрд░реНрдЦрд╛рд╕реНрдд рдХрд░реЗрдВрдореЙрдбрд▓ рд╡реНрдпреВрдХреНрд░реЙрдиреНрдЯреНрд░реЛрд▓рд░рдирд┐рд░реАрдХреНрд╖рд┐рдд: рд╣рд╛рдБ];
UIAlertView * рдЪреЗрддрд╛рд╡рдиреА = [[UIAlertView рдЖрд╡рдВрдЯрди] initWithTitle: @ "рд▓реЗрдЦрдХ рд╡рд┐рдлрд▓"
рд╕рдВрджреЗрд╢: [NSString stringWithFormat: @ "рдЯреЛрдХрди% @", рдЯреЛрдХрди]
рдбреЗрд▓реАрдЧреЗрдЯ: рдиреАрд▓
рд░рджреНрдж рдХрд░реЗрдВрдмрдЯрдирдЯрди: @ "рдареАрдХ рд╣реИ"
рдЕрдиреНрдпрдмрдЯрдирдЯрди: рдиреАрд▓];
[рдЕрд▓рд░реНрдЯ рд╢реЛ];
}

рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред
рд╕рдВрджрд░реНрдн
1) рдкреНрд░реЛрдЬреЗрдХреНрдЯ:
github.com/eltiren/YandexOauth2) Yandex OAuth рдкреНрд░рд▓реЗрдЦрди:
api.yandex.ru/oauth/doc/dg/concepts/About.xml