рд╣рдо iPhone рдХреЗ рд▓рд┐рдП Yandex.Metrics рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ, Yandex.Metrica рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд API рд╣реИ рдЬреЛ рдЖрдкрдХреЛ XML рдпрд╛ JSON рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд▓рдВрдмреЗ рд╕рдордп рддрдХ, рдореЗрд░реЗ рд╣рд╛рдереЛрдВ рдиреЗ рдореЛрдмрд╛рдЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдХреЛ рдЦрд░реЛрдВрдЪ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рджрд┐рди рдХреЗ рджреМрд░рд╛рди рдореИрдВ рдЕрдХреНрд╕рд░ рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВред

IPhone рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрд░реЗ рд▓рд┐рдП рднрдпрд╛рдирдХ рд▓рдЧ рд░рд╣реЗ рдереЗ рдФрд░ рдЖрдЦрд┐рд░рдХрд╛рд░ рдореЗрд░реЗ рд╣рд╛рдереЛрдВ рдиреЗ рдЦрд░реЛрдВрдЪ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛

рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  1. рдпреИрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдЖрд╡реЗрджрди рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ
  2. OAuth рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ
  3. рдЯреЛрдХрди рд╕рд╣реЗрдЬ рд░рд╣рд╛ рд╣реИ
  4. рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
  5. рдкреНрд░рджрд░реНрд╢рди

рдкрдВрдЬреАрдХрд░рдг


рдЖрд╡реЗрджрди рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд╣рдо рдЖрд╡реЗрджрди рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЙрди рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдиреЛрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрд╡реЗрджрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рджреМрд░рд╛рди, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдпрд╛ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╡рд╣ рджреЗрдЦреЗрдЧрд╛ рдХрд┐ рдЖрд╡реЗрджрди рдХрд┐рд╕ рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИред

OAuth рдкреНрд░рд╛рдзрд┐рдХрд░рдг


рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдирдзрд┐рдХреГрдд рдЧреНрд░рд╛рд╣рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдпрд╣ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдЖрдкрд╕реЗ рдЖрдкрдХрд╛ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЖрдкрдХреЗ рдлреЙрд░реНрдо рдореЗрдВ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдлрд┐рд░ рдХрд╣рд╛рдВ рдЬрд╛рдПрдВред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рд╕реЗрд╡рд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде рдкреЙрдк рдЕрдк рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдзрд┐рдХ рдкрд╛рд░рджрд░реНрд╢реА рджрд┐рдЦрддреА рд╣реИред

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, OAuth рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рд╣рдо рдЕрдкрдиреА рдЦреБрдж рдХреА URL-рдпреЛрдЬрдирд╛ рдХреЛ рдЖрд╡реЗрджрди рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, myapp), Yandex рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ (рдЬрд╣рд╛рдБ рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХреГрдд рдерд╛), myapp: // рдЬреИрд╕реА рдХреБрдЫ рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ: Caller URI рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕рд▓рд┐рдП рдХреЛрдб рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рдПрдкреНрд▓рд┐рдХреЗрд╢рди myl рдкрд░ url рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ: //, рдЗрд╕рд▓рд┐рдП url рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЦреБрд▓реЗрдЧрд╛, рдФрд░ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА access_token рд╕рд╣рд┐рдд рд╕рднреА рдбреЗрдЯрд╛ рд╣реИрдВред
Habr├й рдкрд░ рд╕рд┐рд░реНрдл рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдпреИрдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд▓реЗрдЦ рд╣реИ , рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╕рдордп рдмрдЪрд╛рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рддрд╛рдХрд┐ рджреЛрд╣рд░рд╛рдпрд╛ рди рдЬрд╛рдПред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреЛрдХрди рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдмрдЪрд╛рдПрдВрдЧреЗред

рддрдХрдиреАрдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ : рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╡реЗрджрди рдореЗрдВ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рддрд╛рдХрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЙрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдЖрдВрдХрдбрд╝реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рди рд╣реЛ, рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдЦрд╛рддреЗ рдХреЗ рддрд╣рдд рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рдХреГрдд рдХрд░рддреЗ рд╕рдордп (рдпрд╛рдиреА, UIWebView рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдпрд╣ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред UIWebView рдореЗрдВ рдЖрдкрдХрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдХреБрдХреАрдЬрд╝ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрдиреНрдпрдерд╛, рдЬрдм рдЕрдзрд┐рдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕реА рдЦрд╛рддреЗ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВрдЧреЗред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд░рд▓ рдХреЛрдб рдкрд░реНрдпрд╛рдкреНрдд рдерд╛:

NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; for (cookie in [storage cookies]) { [storage deleteCookie:cookie]; } [NSUserDefaults standardUserDefaults] synchronize]; 


рдЯреЛрдХрди рд╕рд╣реЗрдЬ рд░рд╣рд╛ рд╣реИ


рдкреИрд░рд╛рдиреЙрдпрдб рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рдХрд╛ рд╕рдВрд░рдХреНрд╖рдг рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕реЗ NSUserDefaults рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рд╡рд╣рд╛рдБ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЬреЗрд▓рдмреНрд░реЗрдХ, рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕ рдЯреЛрдХрди рдХреЛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЪреНрдЫреА рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдХреАрдЪреЗрди рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХреАрдЬ, рд▓реЙрдЧрд┐рди рдФрд░ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЙрдард╛рддреЗ рд╣реБрдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдкрдиреА рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреЗ рд╕рд╛рде, рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЛ рд╣рд░рд╛ рджреЗрдиреЗ рдХреА рдереЛрдбрд╝реА рд╕реА рдЗрдЪреНрдЫрд╛ рд╣реИред рдпрд╣ рд╕рдм рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрди-рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд╕реЗ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдореЗрд░реЗ рдЬреИрд╕реЗ рдЖрд▓рд╕реА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, Apple рдиреЗ KeychainItemWrapper рд╡рд░реНрдЧ рдХреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рд╣реИред рдирд╛рдо рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИ - рдХрд┐рдЪреЗрди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд╡рд░рдгред рд╕рдЪ рд╣реИ, рдпрд╣ рд╡рд░реНрдЧ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдФрд░ рдПрдЖрд░рд╕реА рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬреАрдердм рдкрд░ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдЖрд░рд╕реА рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдХрд╛рдВрдЯрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП (рдЗрд╕реЗ рдХреЛрдХреЛрдЖрдкреЙрдбреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдЦреИрд░, рдЕрдм рдЯреЛрдХрди рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рдХреБрдЫ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ:

 //  KeychainItemWrapper *keychainWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"OAuthToken" accessGroup:nil]; [keychainWrapper setObject:@"accountName" forKey:(__bridge id)(kSecAttrAccount)]; [keychainWrapper setObject:tokenToSave forKey:(__bridge id)(kSecValueData)]; 


 //  KeychainItemWrapper *keychainWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"OAuthToken" accessGroup:nil]; [keychainWrapper resetKeychainItem]; 


рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ JSON рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИред рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рд╣рдо рдПрдкреАрдЖрдИ рд╕реЗ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, рд╣рдо рд╢реАрд░реНрд╖рдХ рдореЗрдВ OAuth <access_token> рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рдЯреЛрдХрди рдХреЛ рдЧреЗрдЯ-рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
api-metrika.yandex.ru/counters?oauth_token=<access_token>

рдЪреВрдВрдХрд┐ рд╣рдо рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реБрд░реВ рд╕реЗ рд╣реА рдкрд╛рдЧрд▓ рд╣реИрдВ, рддреЛ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ https рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдпрд╣ http рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рд╣рдо JSON рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд NSJSONSerialization рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ:

 dataObject = [NSJSONSerialization JSONObjectWithData:result options:NSJSONReadingMutableContainers error:&e]; 


рдкрд░рд┐рдгрд╛рдо, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рдареАрдХ рд╣реИ, рдлрд┐рд░ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкреНрд░рджрд░реНрд╢рди


рдпрджрд┐ рдЖрдк рдореАрдЯреНрд░рд┐рдХ рд╡реЗрдм-рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ 2 рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИрдВ - рдкрд╛рда рдбреЗрдЯрд╛ рдФрд░ рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛рдПрдВред
рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ - рд╣рдо UITableView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓рдЧрднрдЧ рд╕рднреА рдбреЗрдЯрд╛ рдореЗрдВ рд╕рдорд╛рди рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХреЗрддрдХ рд╣реЛрддреЗ рд╣реИрдВ - рджреГрд╢реНрдп, рд╡рд┐рдЬрд╝рд┐рдЯ, рдЕрджреНрд╡рд┐рддреАрдп рдЖрдЧрдВрддреБрдХ, рдЧрд╣рд░рд╛рдИ рдХреЛ рджреЗрдЦрдиреЗ, рд╕рд╛рдЗрдЯ рдкрд░ рд╕рдордп рдФрд░ рдЙрдЫрд╛рд▓ рджрд░ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ UITableViewCell рдХрд╛ рдПрдХ рд╡рдВрд╢рдЬ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рддрд╛рдХрд┐ UIViewController рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рд╣реА рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЙрддреНрдкрдиреНрди рди рд╣реЛ рдФрд░ рдлрд┐рд░ рд╡рд┐рдзрд┐ рдореЗрдВ
- (UITableViewCell *) tableView: (UITableView *) tableView рд╕реЗрд▓рдлреЛрд░рд░рд╛рдЙрдЯ IndexPath: (NSIndexPath *) indexPath
рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 NSString *CellIdentifier = [NSString stringWithFormat:@"CellId_%li_%li", (long)indexPath.section, (long)indexPath.row]; SourcesTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if ( cell == nil ) { cell = [[SourcesTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier textOnLabel:@"" labelTextColor:[UIColor black]]; } //   [cell changeValuesWithpageViewsNum:pageViewsNum visitTime:visitTime denials:denialsValue visitsNum:visitsNum ]; 

рд╕рд╛рдЗрдЯ рдкрд░ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдордп рд╡реИрд╕реЗ рднреА рд╕реЗрдХрдВрдб рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрднреА рднреА рдорд┐рдореА: рдПрд╕рдПрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдХреА рджрд░ 0 рд╕реЗ 1 рддрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП 50% 0.5 рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред

рдбреНрд░рд╛рдЗрдВрдЧ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП, рдХрдИ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рдХреБрдЫ, рдлрд┐рд░ рд╕реЗ, рд╣реИрдмреЗ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЧрд┐рдиреНрде рдкрд░ PNChart рдкрд╕рдВрдж рдЖрдпрд╛ - рдиреНрдпреВрдирддрдо, рд╕реБрдВрджрд░ред рд╣рдо рдХреЛрдХреЛрдкреЛрдбреНрд╕ рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдЫрд╡рд┐
PNChart рдореЗрдВ рдЪрд╛рд░реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЧрд┐рддреБрдм рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреЗрдЬ рдкрд░ рд╣реИрдВред

рд╣рдо рд╕рдм рдХреБрдЫ UITabsViewController рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдереЛрдбрд╝рд╛ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреА рдЬреЗрдм рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред


рдореИрдВрдиреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ AppStore рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдХреЛрдИ рднреА рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ ред

рд╡рд┐рдХрд╛рд╕ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЖрд╡реЗрджрди рдХрд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ред рдореИрдВ 10 рдкреНрд░рдЪрд╛рд░ рдХреЛрдб рд╕рдВрд▓рдЧреНрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
A49RNFA4W6KR
37LWRW7TYH36
RMPHML3EL6EL
JKWWFATEJ4YE
4RETFRLEPRFW
AWKN4LYRM4LK
L4K6NJNTN4RJ
NT9Y97HN7HKA
TRPXHFXX47PE
E96MN3JP9X9Y

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:
CocoaPods рдПрдХ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ
IOS рдореЗрдВ Yandex OAuth рдкреНрд░рд╛рдзрд┐рдХрд░рдг
PNChart (рдЪрд╛рд░реНрдЯрд┐рдВрдЧ)
рдХреАрдЪреИрдирдЗрдорд╡реЕрдкрд░ ( рдХреАрдЪреЗрди рдХреЗ рдЖрд╕рдкрд╛рд╕ рд░реИрдкрд░)

Source: https://habr.com/ru/post/In217989/


All Articles