Autenticar a un usuario con Instagram en iOS: especificando redirect_uri
swift oauth-2.0 (1)
Después de descubrirlo, pensé en publicar mi solución para cualquier persona que se encuentre con el mismo problema.
En primer lugar, aceptaré que Instagram ya no permite esquemas personalizados en el campo "Seguridad" -> "URI de redirección válida". En cambio, ingresaré un URI arbitrario pero válido que puedo identificar de manera única. Por ejemplo: http://www.mywebsite.com/instagram_auth_ios
Ahora, cuando intento autorizar con Instagram, lo usaré como el URI de redirección, aunque en realidad no existe ninguna página web en ese URI. Ejemplo: https://api.instagram.com/oauth/authorize/?client_id=xxx&redirect_uri=http://www.mywebsite.com/instagram_auth_ios&response_type=code
Finalmente, shouldStartLoadWithRequest
método shouldStartLoadWithRequest
para interceptar la solicitud de redireccionamiento antes de que se ejecute, y en su lugar llamar a mi uri personalizado original (de esa manera no tengo que reescribir nada). Así es como escribí ese método:
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
}
Hay una pequeña advertencia con return false en el método shouldStartLoadWithRequest en el sentido de que siempre se quejará con un error "Frame Load Interrupted". Esto no parece afectar negativamente a nada y puede (probablemente) ignorarse con seguridad.
Estoy desarrollando una aplicación para iOS (usando Swift) que permite al usuario autenticarse a través de Instagram usando OAuth 2.0
En el pasado, todo funcionaba bien, ya que pude especificar la URL de autorización como tal: https://api.instagram.com/oauth/authorize/?client_id=xxx&redirect_uri=myiosapp://authorize&response_type=code
El punto clave aquí es redirect_uri myiosapp://authorize
Mi problema es que ya no puedo registrar un esquema de URL personalizado con Instagram, por lo que es imposible (?) Manejar el redireccionamiento exclusivamente a través de mi aplicación. Si intento agregar dicho URI en el campo "URI de redirección válida:", aparece el siguiente error:
You must enter an absolute URI that starts with http:// or https://
¿Cuál es la forma recomendada de manejar la autenticación con Instagram exclusivamente a través de una aplicación nativa de iOS?