Публикация в твиттер

Ответить
yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Публикация в твиттер

Сообщение yura91 » 22 авг 2014, 13:48

package com.learnncode.demotwitterimagepost;

import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
import android.widget.Toast;

public class LoginActivity extends Activity {

public static final int TWITTER_LOGIN_RESULT_CODE_SUCCESS = 1111;
public static final int TWITTER_LOGIN_RESULT_CODE_FAILURE = 2222;

private static final String TAG = "LoginActivity";

private WebView twitterLoginWebView;
private AlertDialog mAlertBuilder;
private static String twitterConsumerKey;
private static String twitterConsumerSecret;

private static Twitter twitter;
private static RequestToken requestToken;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_twitter_login);
twitterConsumerKey = getResources().getString(R.string.twitter_consumer_key);
twitterConsumerSecret = getResources().getString(R.string.twitter_consumer_secret);

if(twitterConsumerKey == null || twitterConsumerSecret == null){
Log.e(TAG, "ERROR: Consumer Key and Consumer Secret required!");
LoginActivity.this.setResult(TWITTER_LOGIN_RESULT_CODE_FAILURE);
LoginActivity.this.finish();
}


mAlertBuilder = new AlertDialog.Builder(this).create();
mAlertBuilder.setCancelable(false);
mAlertBuilder.setTitle(R.string.please_wait_title);
View view = getLayoutInflater().inflate(R.layout.view_loading, null);
((TextView) view.findViewById(R.id.messageTextViewFromLoading)).setText(getString(R.string.authenticating_your_app_message));
mAlertBuilder.setView(view);
mAlertBuilder.show();


twitterLoginWebView = (WebView)findViewById(R.id.twitterLoginWebView);
twitterLoginWebView.setBackgroundColor(Color.TRANSPARENT);
twitterLoginWebView.setWebViewClient( new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){

if( url.contains(AppConstant.TWITTER_CALLBACK_URL)){
Uri uri = Uri.parse(url);
LoginActivity.this.saveAccessTokenAndFinish(uri);
return true;
}
return false;
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);

if(mAlertBuilder != null){
mAlertBuilder.cancel();
}
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);

if(mAlertBuilder != null){
mAlertBuilder.show();
}
}
});

Log.d(TAG, "Authorize....");
askOAuth();
}

@Override
protected void onDestroy() {
super.onDestroy();

if(mAlertBuilder != null) {
mAlertBuilder.dismiss();
}
}

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}

@Override
protected void onResume() {
super.onResume();
}

private void saveAccessTokenAndFinish(final Uri uri){
new Thread(new Runnable() {
@Override
public void run() {
String verifier = uri.getQueryParameter(AppConstant.IEXTRA_OAUTH_VERIFIER);
try {
SharedPreferences sharedPrefs = getSharedPreferences(AppConstant.SHARED_PREF_NAME, Context.MODE_PRIVATE);
AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
Editor e = sharedPrefs.edit();
e.putString(AppConstant.SHARED_PREF_KEY_TOKEN, accessToken.getToken());
e.putString(AppConstant.SHARED_PREF_KEY_SECRET, accessToken.getTokenSecret());
e.commit();

Log.d(TAG, "TWITTER LOGIN SUCCESS ----TOKEN " + accessToken.getToken());
Log.d(TAG, "TWITTER LOGIN SUCCESS ----TOKEN SECRET " + accessToken.getTokenSecret());
LoginActivity.this.setResult(TWITTER_LOGIN_RESULT_CODE_SUCCESS);
} catch (Exception e) {
e.printStackTrace();
if(e.getMessage() != null){
Log.e(TAG, e.getMessage());

}else{
Log.e(TAG, "ERROR: Twitter callback failed");
}
LoginActivity.this.setResult(TWITTER_LOGIN_RESULT_CODE_FAILURE);
}
LoginActivity.this.finish();
}
}).start();
}


public static boolean isActive(Context ctx) {
SharedPreferences sharedPrefs = ctx.getSharedPreferences(AppConstant.SHARED_PREF_NAME, Context.MODE_PRIVATE);
return sharedPrefs.getString(AppConstant.SHARED_PREF_KEY_TOKEN, null) != null;
}

public static void logOutOfTwitter(Context ctx){
SharedPreferences sharedPrefs = ctx.getSharedPreferences(AppConstant.SHARED_PREF_NAME, Context.MODE_PRIVATE);
Editor e = sharedPrefs.edit();
e.putString(AppConstant.SHARED_PREF_KEY_TOKEN, null);
e.putString(AppConstant.SHARED_PREF_KEY_SECRET, null);
e.commit();
}

public static String getAccessToken(Context ctx){
SharedPreferences sharedPrefs = ctx.getSharedPreferences(AppConstant.SHARED_PREF_NAME, Context.MODE_PRIVATE);
return sharedPrefs.getString(AppConstant.SHARED_PREF_KEY_TOKEN, null);
}

public static String getAccessTokenSecret(Context ctx){
SharedPreferences sharedPrefs = ctx.getSharedPreferences(AppConstant.SHARED_PREF_NAME, Context.MODE_PRIVATE);
return sharedPrefs.getString(AppConstant.SHARED_PREF_KEY_SECRET, null);
}

private void askOAuth() {
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setOAuthConsumerKey(twitterConsumerKey);
configurationBuilder.setOAuthConsumerSecret(twitterConsumerSecret);
Configuration configuration = configurationBuilder.build();
twitter = new TwitterFactory(configuration).getInstance();

new Thread(new Runnable() {
@Override
public void run() {
try {
requestToken = twitter.getOAuthRequestToken(AppConstant.TWITTER_CALLBACK_URL);
} catch (Exception e) {
final String errorString = e.toString();
LoginActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mAlertBuilder.cancel();
Toast.makeText(LoginActivity.this, errorString.toString(), Toast.LENGTH_SHORT).show();
finish();
}
});
return;
}

LoginActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
twitterLoginWebView.loadUrl(requestToken.getAuthenticationURL());
}
});
}
}).start();
}

}

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: Публикация в твиттер

Сообщение yura91 » 22 авг 2014, 13:50

это активити в котором пользователь должен вводить логин и пароль для публикации в твиттер но вместо этого запуская приложение я попадаю на вебстраницу регистрации приложения а не на страницу регистрации в твиттер я регистрировал уже свое приложение в твиттере есть ключи в чем проблема??можете посмотреть код?? как исправить??

samarjan
Сообщения: 27
Зарегистрирован: 01 авг 2012, 13:56

Re: Публикация в твиттер

Сообщение samarjan » 26 авг 2014, 10:40

Могу посоветовать обратить внимание на библиотеку AQuery, там это должно быть просто организованно

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: Публикация в твиттер

Сообщение yura91 » 26 авг 2014, 14:29

что за библиотека?? можете дать ссылку и рассказать про нее немного?? что именно организовано есть все классы для твиттер?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Публикация в твиттер

Сообщение KamiSempai » 26 авг 2014, 15:53

yura91 писал(а):что за библиотека?? можете дать ссылку и рассказать про нее немного?? что именно организовано есть все классы для твиттер?
http://lmgtfy.com/?q=AQuery&l=1
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: Публикация в твиттер

Сообщение yura91 » 26 авг 2014, 17:18

я не про то говорю я умею это все я имею ввиду как эта библиотека связана с твиттером непонятно как ее использовать для публикации в твиттер?везде все на английском и то мало а на русском этого нет тоже можете дать ссылку где описано как библиотека используется для интеграции твиттера в андроид приложения??

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Публикация в твиттер

Сообщение KamiSempai » 26 авг 2014, 17:50

Про твиттер можно почитать если перейти по ссылке Authentication.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: Публикация в твиттер

Сообщение yura91 » 26 авг 2014, 19:04

эта ссылка в документации библиотеки?? или вводить в поиске запрос??


samarjan
Сообщения: 27
Зарегистрирован: 01 авг 2012, 13:56

Re: Публикация в твиттер

Сообщение samarjan » 26 авг 2014, 20:44

Я помню потратил очень много времени, когда использовал twitter4j, я наверное только неделю разбирался с аутентификацией, но ничего не получалось. Жаль, что я про эту либу тогда не знал

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: Публикация в твиттер

Сообщение yura91 » 26 авг 2014, 21:07

только на английском на русском по ходу нет описания да? при помощи этой либы и токены и API key задаются?? а есть где нибудь схожий пример проекта с ее использованием я бы взглянул можете дать ссылку??

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: Публикация в твиттер

Сообщение yura91 » 28 авг 2014, 16:52

public void auth_twitter(){

TwitterHandle handle = new TwitterHandle(this, CONSUMER_KEY, CONSUMER_SECRET);

String url = "http://twitter.com/statuses/mentions.json";
aq.auth(handle).progress(R.id.progress).ajax(url, JSONArray.class, this, "twitterCb");


}

это класс регистрации в твиттер??

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: Публикация в твиттер

Сообщение yura91 » 28 авг 2014, 16:54

и потом в активити вызывать этот класс??

Ответить