with library google for example credential auth apis java android oauth linkedin scribe

library - oauth2 authentication java



Usar OAuth con Scribe en Android (1)

Resolví el problema, fue algo estúpido al final. Había editado mi código para guardar el secreto de acceso y el token de acceso, pero había olvidado volver a iniciar sesión cuando probaba mi aplicación en mi teléfono. Esto dio como resultado que no se llegara al código que guardaba las partes del token.

Todavía tengo un problema al usar la llamada de invitación en la API de LinkedIn

invite.setOnClickListener(new Button.OnClickListener() { public void onClick (View v) { inviteXml = inviteCreator.inviteString(to, subj, body, authName, authValue); nameField.setText(inviteXml); titleField.setText(""); call = "http://api.linkedin.com/v1/people/~/mailbox"; request = new OAuthRequest(Verb.GET, call); request.addPayload(inviteXml); service.signRequest(accessToken, request); response = request.send(); invite.setVisibility(View.GONE); } });

No estoy seguro de si esta es la forma correcta de agregar la cadena XML a la llamada. La API de LinkedIn no especifica cómo se debe agregar. Alguien tiene alguna experiencia con esto?

Hola, estoy usando la biblioteca de scripts para la comunicación de OAuth con LInkedIn.

Tengo una clase de inicio de sesión y una clase de consulta.

La clase de inicio de sesión crea un servicio para obtener mi token y secreto de solicitud y crea mi token de acceso. El token de acceso se guarda luego en el archivo de preferencias. Esto parece funcionar bien y puedo hacer una llamada api exitosa después de que se hayan creado todos los tokens.

En mi clase de consulta de OAuth recupero el token de acceso, creo otro servicio e intento hacer una llamada a la API, pero cada vez que cargo una actividad que hace que las llamadas entren en esta clase, hace que la aplicación se cuelgue. Lo he probado para asegurarme de que el token de acceso está guardado y lo están.

Aquí está mi clase de inicio de sesión

public class Login_LinkedIn extends Activity { SharedPreferences settings; OAuthService service; Token requestToken; Button home; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webauth); initControls(); service = new ServiceBuilder() .provider(LinkedInApi.class) .apiKey( getString(R.string.apiKey) ) .apiSecret( getString(R.string.secKey) ) .callback( getString(R.string.callBack) ) .build(); requestToken = service.getRequestToken(); final String authURL = service.getAuthorizationUrl(requestToken); final WebView webview = (WebView) findViewById(R.id.webView); //attach WebViewClient to intercept the callback url webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //check for our custom callback protocol //otherwise use default behavior if(url.startsWith( getString(R.string.callBack) )) { //authorization complete hide webview for now. webview.setVisibility(View.GONE); Uri uri = Uri.parse(url); String verifier = uri.getQueryParameter("oauth_verifier"); Verifier v = new Verifier(verifier); //save this token for practical use. Token accessToken = service.getAccessToken(requestToken, v); OAuthRequest request = new OAuthRequest(Verb.GET, "http://api.linkedin.com/v1/people/~:(first-name,last-name)"); service.signRequest(accessToken, request); Response response = request.send(); xmlHandler xh = new xmlHandler(response.getBody()); settings = getSharedPreferences("preferences", 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("accessToken", accessToken.getToken()); // The requestToken is saved for use later on to verify the OAuth request. // See onResume() below editor.putString("requestToken", requestToken.getToken()); editor.putString("requestSecret", requestToken.getSecret()); editor.putString("first-name", xh.getValue("first-name")); editor.putString("last-name", xh.getValue("last-name")); editor.commit(); return true; } return super.shouldOverrideUrlLoading(view, url); } }); //send user to authorization page webview.loadUrl(authURL); } @Override protected void onResume() { super.onResume(); Intent i = getIntent(); if(i != null) { Uri uri = i.getData(); if(uri != null) { String oauthVerifier = uri.getQueryParameter("oauth_verifier"); Verifier verifier = new Verifier(oauthVerifier); requestToken = new Token(settings.getString("requestToken", null), settings.getString("requestSecret", null)); Token accessToken = service.getAccessToken(requestToken, verifier); // Save the access token. SharedPreferences.Editor editor = settings.edit(); editor.remove("requestToken"); editor.remove("requestSecret"); editor.putString("accessToken", accessToken.getToken()); editor.putString("accessSecret", accessToken.getSecret()); editor.commit(); // Start the film list activity. final Intent intent = new Intent(this,ProConnect.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } } } private void initControls() { home = (Button)findViewById(R.id.home); final Intent intent = new Intent(this,ProConnect.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); home.setOnClickListener(new Button.OnClickListener() { public void onClick (View v) { startActivity(intent); } }); } }

y mi clase de consulta

public class oAuthQuery extends Activity { OAuthService service; Token accessToken; SharedPreferences settings; public oAuthQuery() { service= new ServiceBuilder() .provider(LinkedInApi.class) .apiKey( getString(R.string.apiKey) ) .apiSecret( getString(R.string.secKey) ) .callback( getString(R.string.callBack) ) .build(); settings = getSharedPreferences("preferences", 0); accessToken = new Token(settings.getString("accessToken", null), settings.getString("accessSecret", null)); } public String query(String s) { OAuthRequest request = new OAuthRequest(Verb.GET, s); service.signRequest(accessToken, request); Response response = request.send(); return response.getBody(); } public OAuthService getService() { return service; } }

Gracias por cualquier ayuda Jeff