my app needs user's meetup id. meetup uses oauth 2.0. found different pieces of code across web, paste in stackoverflow answer question, next person.
-- stackoverflow says "this question body not meet our quality standards..." paste piece of code below, in answer, can ignored.
in mainactivity, capture results form auth activity. mainactivity:
@override protected void onactivityresult(int requestcode, int resultcode, intent data) { // if(requestcode == 1 && resultcode == result_ok) if(requestcode == get_meetup_access_token_activity) { accesstoken = data.getextras().getstring("access_token"); savemeetupaccesstokentosharedpreferences(); //save meetupid plus device id parse getmymeetupidfrommeetupserver(); // log.i(debug_tag,"mainactivity, accesstoken" + accesstoken); } }
import library via graddle build file:
dependencies { compile 'net.smartam.leeloo:oauth2-common:0.1' compile 'net.smartam.leeloo:oauth2-client:0.1' }
create class meetup authenticating. class written adrianmaurer (https://gist.github.com/adrianmaurer/4673944), thank adrianmaurer!
meetupauthactivity:
package pixtas.com.nightout; import android.content.contentvalues; import android.content.context; import android.net.uri; import android.os.asynctask; import android.util.log; import android.view.window; import android.webkit.webview; import android.webkit.webviewclient; import android.widget.toast; // leeloo oauth lib https://bitbucket.org/smartproject/oauth-2.0/wiki/home import net.smartam.leeloo.client.oauthclient; import net.smartam.leeloo.client.urlconnectionclient; import net.smartam.leeloo.client.request.oauthclientrequest; import net.smartam.leeloo.client.response.oauthaccesstokenresponse; import net.smartam.leeloo.client.response.oauthauthzresponse; import net.smartam.leeloo.common.exception.oauthproblemexception; import net.smartam.leeloo.common.exception.oauthsystemexception; import net.smartam.leeloo.common.message.types.granttype; import android.app.activity; import android.content.intent; import android.os.bundle; /** * created tmr_byronmac on 4/24/15. */ public class meetupauthactivity extends activity { private final string tag = getclass().getname(); // meetup oauth endpoints public static final string auth_url = "https://secure.meetup.com/oauth2/authorize"; public static final string token_url = "https://secure.meetup.com/oauth2/access"; // consumer //public static final string redirect_uri_scheme = "oauthresponse"; //public static final string redirect_uri_host = "com.yourpackage.app"; //public static final string redirect_uri_host_app = "yourapp"; //public static final string redirect_uri = redirect_uri_scheme + "://" + redirect_uri_host + "/"; public static final string redirect_uri = "nightout://meetup.com"; public static final string consumer_key = "your_key"; public static final string consumer_secret = "your_secret"; private webview _webview; private intent _intent; private context _context; public void oncreate(bundle savedinstancestate) { this.requestwindowfeature(window.feature_no_title); super.oncreate(savedinstancestate); _intent = getintent(); _context = getapplicationcontext(); _webview = new webview(this); _webview.setwebviewclient(new mywebviewclient()); setcontentview(_webview); _webview.getsettings().setjavascriptenabled(true); oauthclientrequest request = null; try { request = oauthclientrequest.authorizationlocation( auth_url).setclientid( consumer_key).setredirecturi( redirect_uri).buildquerymessage(); } catch (oauthsystemexception e) { log.d(tag, "oauth request failed", e); } _webview.loadurl(request.getlocationuri() + "&response_type=code&set_mobile=on"); } public void finishactivity() { //do here before finishing if needed finish(); } private class mywebviewclient extends webviewclient { @override public boolean shouldoverrideurlloading(webview view, string url) { uri uri = uri.parse(url); string code = uri.getqueryparameter("code"); string error = uri.getqueryparameter("error"); if (code != null) { new meetupretrieveaccesstokentask().execute(uri); // setresult(result_ok, _intent); // finishactivity(); } else if (error != null) { setresult(result_canceled, _intent); finishactivity(); } return false; } } private class meetupretrieveaccesstokentask extends asynctask<uri, void, void> { @override protected void doinbackground(uri... params) { uri uri = params[0]; string code = uri.getqueryparameter("code"); oauthclientrequest request = null; try { request = oauthclientrequest.tokenlocation(token_url) .setgranttype(granttype.authorization_code).setclientid( consumer_key).setclientsecret( consumer_secret).setredirecturi( redirect_uri).setcode(code) .buildbodymessage(); oauthclient oauthclient = new oauthclient(new urlconnectionclient()); oauthaccesstokenresponse response = oauthclient.accesstoken(request); // these add them _intent // intent returnintent = new intent(); // returnintent.putextra("access_token", response.getaccesstoken()); // setresult(result_ok,returnintent); log.d(tag, "access token: " + response.getaccesstoken()); log.d(tag, response.getexpiresin()); log.d(tag, response.getrefreshtoken()); _intent.putextra("access_token", response.getaccesstoken()); setresult(result_ok, _intent); finish(); } catch (oauthsystemexception e) { log.e(tag, "oauth system exception - couldn't access token: " + e.tostring()); toast.maketext(_context, "oauth system exception - couldn't access token: " + e.tostring(), toast.length_long).show(); } catch (oauthproblemexception e) { log.e(tag, "oauth problem exception - couldn't access token"); toast.maketext(_context, "oauth problem exception - couldn't access token", toast.length_long).show(); } return null; } } @override public void onbackpressed() { setresult(result_canceled, _intent); finishactivity(); } }
call meetupauthactivity main activity. mainactivity:
public void getmeetupaccesstoken(){ intent intent; intent = new intent(this, meetupauthactivity.class); // startactivity(intent); startactivityforresult(intent,get_meetup_access_token_activity); }
in mainactivity, capture results form auth activity. mainactivity:
@override protected void onactivityresult(int requestcode, int resultcode, intent data) { // if(requestcode == 1 && resultcode == result_ok) if(requestcode == get_meetup_access_token_activity) { accesstoken = data.getextras().getstring("access_token"); savemeetupaccesstokentosharedpreferences(); //save meetupid plus device id parse getmymeetupidfrommeetupserver(); // log.i(debug_tag,"mainactivity, accesstoken" + accesstoken); } }