2016-08-16 1 views
6

ich einen iOS-App entwickle (mit Swift), die der Benutzer durch Instagram OAuth zur Authentifizierung ermöglicht 2.0einen Benutzer mit Instagram auf iOS Authentifizieren: Angabe redirect_uri

In der Vergangenheit hatte alles gut funktioniert, wie ich in der Lage war, die Autorisierung URL als solche zu spezifizieren: https://api.instagram.com/oauth/authorize/?client_id=xxx&redirect_uri=myiosapp://authorize&response_type=code

der Schlüssel hier Punkt myiosapp://authorize

Mein Problem der redirect_uri zu sein, ist, dass ich nicht mehr in der Lage eine eigene URL-Schema mit Instagram registrieren was es unmöglich macht (?) mit dem Redirect exc umgehen Lustig durch meine App. Wenn ich versuche so in der ein URI hinzufügen „Gültiges Umleitung URIs:“ Feld, erhalte ich folgende Fehlermeldung:

You must enter an absolute URI that starts with http:// or https://

Was ist die empfohlene Weg-Authentifizierung mit Instagram zu behandeln ausschließlich thrugh einer iOS-native Anwendung ?

+1

Mir ist klar, dass dies zuvor als "nicht mehr möglich" beantwortet worden ist, aber wenn das wirklich der Fall ist, frage ich mich, ob jemand mich auf irgendeine Dokumentation oder Blogpost von Instagram verweisen könnte –

Antwort

8

Nachdem ich es herausgefunden hatte, dachte ich, ich würde meine Lösung für jeden veröffentlichen, der auf das gleiche Problem stößt.

Als Erstes akzeptiere ich, dass Instagram keine benutzerdefinierten Schemas mehr im Feld "Sicherheit" -> "Gültige Weiterleitungs-URIs" erlaubt. Stattdessen gebe ich einen beliebigen aber gültigen URI ein, den ich eindeutig identifizieren kann. Zum Beispiel: http://www.mywebsite.com/instagram_auth_ios

Jetzt, wenn ich versuche, mit Instagram zu autorisieren, werde ich das als Weiterleitungs-URI verwenden - obwohl tatsächlich keine Webseite in diesem URI existiert. Beispiel: https://api.instagram.com/oauth/authorize/?client_id=xxx&redirect_uri=http://www.mywebsite.com/instagram_auth_ios&response_type=code

Schließlich werde ich die UIWebViewDelegate ‚s shouldStartLoadWithRequest Methode verwenden, um die Umleitungsanforderung abzufangen, bevor es läuft, und stattdessen meinen ursprünglichen Brauch uri nennen (so ich habe nichts neu zu schreiben). Hier ist, wie ich diese Methode geschrieben:

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    guard let url = request.URL where url.host == "www.mywebsite.com" && url.path == "/instagram_auth_ios" else { return true } 
    guard let authUrl = NSURLComponents(URL: url, resolvingAgainstBaseURL: false) else { return true } 

    // Customize the scheme/host/path, etc. as desired for your app 
    authUrl.scheme = "myappschema" 
    authUrl.host = "instagram" 
    authUrl.path = "" 
    UIApplication.sharedApplication().openURL(authUrl.URL!) 

    return false 
} 

Es gibt einen kleinen Nachteil mit der Rückkehr falsch in der should Methode, dass sie immer mit einem „Frame laden Interrupted“ Fehler beschweren. Dies scheint nichts zu beeinträchtigen und kann (wahrscheinlich) sicher ignoriert werden.

Verwandte Themen