Ich versuche OAuth 2 Authentifizierung für die Meetup API mit Retrofit zu implementieren. Ich habe den Autorisierungscode, aber ich habe Probleme, den Access Token zu bekommen. Hier alle relevanten Bits des Codes:Trouble Meetup APIs Access Token mit Retrofit - Android
Meine onResume Methode:
override fun onResume() {
super.onResume()
// the intent filter defined in AndroidManifest will handle the return from ACTION_VIEW intent
val uri = intent.data
if (uri != null && uri.toString().startsWith(CALL_BACK)) {
val code = uri.getQueryParameter("code")
if (code != null) {
// get access token
// we'll do that in a minute
//"authorize code: $code".show(this)
Log.i("Rakshak","Code: $code") // The Authorization Code is printed
val loginService = ServiceGenerator.createService(LoginService::class.java)
//var request = RequestBody(CLIENT_ID,CLIENT_SECRET,"authorization_code",CALL_BACK,code)
val requestBody = "client_id=$CLIENT_ID"+
"&client_secret=$CLIENT_SECRET"+
"&grant_type=authorization_code"+
"&redirect_uri=$CALL_BACK+" +
"&code=$code"
val call = loginService.getAccessToken(requestBody)
//val accessToken = call.execute().body()
call.enqueue(object : retrofit2.Callback<AccessToken>{
override fun onResponse(call: Call<AccessToken>?, response: Response<AccessToken>?) {
Log.i("Rakshak","Response: ${response.toString()}") // Prints: "Response{protocol=h2, code=400, message=, url=https://secure.meetup.com/oauth2/access}"
Log.i("Rakshak","Access token: ${response?.body()?.accessToken}")// Prints: "Access token: null"
}
override fun onFailure(call: Call<AccessToken>?, t: Throwable?) {
Log.i("Rakshak","Didn't work. ${t?.localizedMessage}")
}
})
} else if (uri.getQueryParameter("error") != null) {
// show an error message here
"Didn't work. Code: $code".show(this)
}
}
}
Login Service-Schnittstelle:
interface LoginService {
@FormUrlEncoded
@POST("https://secure.meetup.com/oauth2/access")
fun getAccessToken(@Field("body") requestBody: String): Call<AccessToken>
}
RequestBody Klasse:
data class RequestBody(
var client_id:String,
var client_secret: String,
var grant_type: String,
var redirect_uri: String,
var code: String)
Relevant Methoden aus der Klasse Service-Generator:
private val API_BASE_URL = "https://secure.meetup.com/oauth2/access/"
private val httpClient = OkHttpClient.Builder()
private val builder = Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
private var retrofit = builder.build()
fun <S> createService(serviceClass: Class<S>): S {
return retrofit.create(serviceClass);
}
die Antwort auf die Zugriffstoken POST geben Sie mir eine Antwort 400 anstatt eines JSON mit einem Zugriffstoken Warum wie es here desribes? Was vermisse ich ?
Danke für Ihre Antwort! Stellt die Meetup-Support-Abfragezeichenfolgenparameter aus. Also habe ich meine Login-Schnittstelle zu getAccessToken (@Query ("client_id") clientId: String, @Query ("client_secret") clientSecret: String, @Query ("grant_type") grantType: String, @Query ("redirect_uri") Umleitung: String, @Query ("Code") Code: String): Call und es hat funktioniert! : D –
DrkStr