Swiftyinsta: рддрд╛рдЬрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди рд╕рдорд╕реНрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдЕрдЧре░ 2019  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: TheM4hd1/SwiftyInsta

рдПрдХ рдирдП рдкрдВрдЬреАрдХреГрдд рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╡реЗрдм рд▓реЙрдЧрд┐рди рдХрднреА-рдХрднреА рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо рдПрдХ рдЕрд▓рдЧ рдпреВрдЬрд░ рд╕реБрдЭрд╛рд╡ рдкреЗрдЬ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдореИрдВ 1 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, 1 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рднреА рдореЗрд░рд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ (рдпрд╣ рдлрд╝реАрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛) рдЬреНрдпрд╛рджрд╛рддрд░ рд╡реЗрдм рд▓реЙрдЧрд┐рди рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2-3 рдмрд╛рд░ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

  • рдирдВрдмрд░ 2FA - рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╕реАрдзрд╛ рд▓реЙрдЧрд┐рди

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдирдпрд╛ рдкрдВрдЬреАрдХреГрдд рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡реЗрдм рджреГрд╢реНрдп рд╕реЗ рд╕рд╛рдЗрди рдЕрдк рдХрд░рддреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдРрд╕реЗ рдЦрд╛рддреЗ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЕрднреА-рдЕрднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рдФрд░? @canaksoy
рдмрд╕ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдЖрдЬрдорд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдП

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдХрд┐рд╕реА рджрд┐рдП рдЧрдП url рдХреЗ рдмрдЬрд╛рдп рд╕реАрдзреЗ рдХреБрдХреАрдЬрд╝ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╡реЗ рдЙрдкрд░реЛрдХреНрдд рд╕реБрдЭрд╛рд╡ рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рд╣реИрдВ)ред рдореИрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз ASAP рднреЗрдЬ рд░рд╣рд╛ рд╣реВрдБред

#76 рдЪреЗрдХ рдХрд░реЗрдВ, @canaksoy

рдореБрдЦреНрдп рдкрд░рд┐рд╡рд░реНрддрди, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ instagram.com рд▓рд┐рдП рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╡реИрдз рдХреБрдХреАрдЬрд╝ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рднреА init рдкреНрд░рдХреНрд░рд┐рдпрд╛ async , рддрд╛рдХрд┐ рдмрд╣реБ рдЦрд╛рддрд╛ рд╕рдорд░реНрдерди рдХреЛ рди рддреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗ ( рдореИрдВ 2.0 рдореЗрдВ рдЗрд╕рд╕реЗ рдареАрдХ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╛ рддреЛ UIViewController рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ LoginManager рд╡реЗрдм рджреГрд╢реНрдп рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ)ред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @ TheM4hd1 рдХреА рдордВрдЬреВрд░реА рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ LoginWebView рдЕрднреА рднреА, рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдорд╛рдорд▓реЗ рд╕реЗ рдКрдкрд░ (рдореИрдВ рджреЛрдиреЛрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреА рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреЗрдЦ рд▓рд┐рдпрд╛ рд╣реИ) @canaksoy рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рддреЛ рдореИрдВ рджреВрд░ рдХрд░рдиреЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ bug рдПрдХ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ help wanted рдПрдХред
рдлрд┐рд░ рднреА, рдкреАрдЖрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреВрд░реА рдЪреАрдЬ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдпрджреЗрдордВрдж рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЗрдореНрд╣реЛ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП ... рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рд╣реИред
(@mkeshnoda)

class LoginViewController: UIViewController {
    var webView: InstagramLoginWebView? {
        didSet {
            oldValue?.removeFromSuperview()
            guard let webView = webView else { return }
            // add to view hierarchy (NECESSARY).
            view.addSubview(webView)
            // always request log in page when setting a new web view.
            webView.loadInstagramLogin()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // create a new `InstagramLoginWebView`.
        InstagramLoginWebView.create(with: view.bounds,
                                     completionHandler: { _, _ in /* deal with login and failures */ },
                                     returnHandler: { [weak self] in self?.webView = $0 })
    }
}

рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП ... рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рд╣реИред
(@mkeshnoda)

class LoginViewController: UIViewController {
    var webView: InstagramLoginWebView? {
        didSet {
            oldValue?.removeFromSuperview()
            guard let webView = webView else { return }
            // add to view hierarchy (NECESSARY).
            view.addSubview(webView)
            // always request log in page when setting a new web view.
            webView.loadInstagramLogin()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // create a new `InstagramLoginWebView`.
        InstagramLoginWebView.create(with: view.bounds,
                                     completionHandler: { _, _ in /* deal with login and failures */ },
                                     returnHandler: { [weak self] in self?.webView = $0 })
    }
}

рдореИрдВрдиреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рд▓реЙрдЧ-рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЙрдЧ рдЗрди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реИрдВрдбрд▓рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдмрд╕ рдереЛрдбрд╝рд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд┐рдпрд╛ рдФрд░ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ filtered.count = 1 рдХрд╛рд░рдг рд▓реЙрдЧрд┐рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред isUserLoggedIn(instagramCookies: [HTTPCookie]?) рдХреЗрд╡рд▓ 2 рдХреБрдХреАрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ

let filtered = cookies.filter {
            !$0.value.isEmpty
                && $0.properties?[.init(rawValue: "Created")] as? TimeInterval ?? 0 > startedAt.timeIntervalSinceReferenceDate
                && ($0.name == "ds_user_id" || $0.name == "csrftoken" || $0.name == "sessionid") }
        guard filtered.count >= 3 else { return }

рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдкреНрд░рд╡рд╛рд╣ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? @mkeshnoda
рдХреНрдпреЛрдВрдХрд┐ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЙрди 3 рдХреБрдХреАрдЬрд╝ рдХреА рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ... рдЙрдирдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрде рд╣реИ "рдЖрдк рд▓реЙрдЧ рдЗрди рд╣реИрдВ"ред
рдФрд░ рдпрд╣ рдЕрдЬреАрдм рдХрд╛рд░рдг рд╣реИ рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо 2 рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░ рдЪреБрдХрд╛ рд╣реИ)ред рдореИрдВрдиреЗ 4 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЦрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╡реЗ рд╕рднреА рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

sbertix picture sbertix  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sbertix picture sbertix  ┬╖  27рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

biox86 picture biox86  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

effecttwins picture effecttwins  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sbertix picture sbertix  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ