Last active
August 29, 2015 14:07
-
-
Save SpiritOfDarkDragon/17949ae318e7f0a78b12 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
0. Авторизация происходит по трёхступенчатой схеме: | |
docs: https://dev.twitter.com/web/sign-in/implementing | |
1. Нам понадобятся 3 библиотеки. | |
compile('org.twitter4j:twitter4j-core:3.0.5') | |
compile('oauth.signpost:signpost-core:1.2.1.1') | |
compile('oauth.signpost:signpost-commonshttp4:1.2.1.1') | |
2. Заводим переменные | |
private Twitter twitter; | |
private RequestToken requestToken; | |
private AccessToken accessToken; | |
3. Инициализируем twitter при старте | |
ConfigurationBuilder builder = new ConfigurationBuilder(); | |
builder.setOAuthConsumerKey("1234567890abc"); //consumer key from https://apps.twitter.com | |
builder.setOAuthConsumerSecret("gfs098765423"); //consumer key secret from https://apps.twitter.com | |
Configuration configuration = builder.build(); | |
TwitterFactory factory = new TwitterFactory(configuration); | |
twitter = factory.getInstance(); | |
4. При необходимости авторизации через tw запрашиваем request_token и request_token_secret, а заодно получаем url по которому будет форма авторизации для пользователя //долго, нужен отдельный поток и лоадер, а то ощущение что висим | |
requestToken = twitter.getOAuthRequestToken("oauth://t4jsample"); //callback url from https://apps.twitter.com илилюбая другая шняга | |
//Log.d(TAG, "requestToken="+requestToken.getToken()); | |
//Log.d(TAG, "requestTokenSecret="+requestToken.getTokenSecret()); | |
5. Бросаем url (Uri.parse(requestToken.getAuthenticationURL()).toString()) в activity с webview или вообще интентом в дефолтный браузер | |
Да, форму авторизации c webview нам нужно описывать самим. Я сделал для этого отдельную activity: | |
5.1 ActivityMain | |
Intent auth = new Intent(ActivityMain.this, TwitterLogin.class); | |
Bundle bundle = new Bundle(); | |
bundle.putString("auth_url", url); | |
auth.putExtras(bundle); | |
startActivityForResult(auth, REQ_TWITTER);//REQ_TWITTER=1, just operation code | |
5.2 TwitterLogin | |
webView.setWebViewClient(new WebViewClient() { | |
public void onPageFinished(WebView view, String url) { | |
super.onPageFinished(view, url); | |
if (url != null && url.startsWith() {//в ответ получаем url с 2 параметрами, их надо парсить | |
String[] urlParameters = url.split("\\?")[1].split("&"); | |
String oauthToken = ""; | |
String oauthVerifier = ""; | |
if (urlParameters[0].startsWith("oauth_token")) oauthToken = urlParameters[0].split("=")[1]; | |
else if (urlParameters[1].startsWith("oauth_token")) oauthToken = urlParameters[1].split("=")[1]; | |
if (urlParameters[0].startsWith("oauth_verifier")) oauthVerifier = urlParameters[0].split("=")[1]; | |
else if (urlParameters[1].startsWith("oauth_verifier")) oauthVerifier = urlParameters[1].split("=")[1]; | |
Intent intent = getIntent(); | |
intent.putExtra("oauth_token", oauthToken); | |
intent.putExtra("oauth_verifier", oauthVerifier); | |
setResult(Activity.RESULT_OK, intent); | |
finish(); | |
} | |
} | |
}); | |
webView.loadUrl(this.getIntent().getExtras().getString("auth_url")); | |
6. Заправшиваем access_token, тоже в отдельном треде и получаем наконец-то окончательные oauth_token и oauth_token_secret для пользователя | |
accessToken = twitter.getOAuthAccessToken(requestToken, oauthVerifier); | |
//Log.d(TAG,"accessToken="+accessToken.getToken()); | |
//Log.d(TAG,"accessTokenSecret="+accessToken.getTokenSecret()); | |
P.S. Важно! Если часовой пояс стоит неверный, то на запрос getOAuthRequestToken() будет возвращаться TwitterException c кодом 401. Запросы подписываются с функцией от времени. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment