2014-01-14 3 views
1

Я искал через Интернет. Я нашел много решений для отправки твитов, и я понял, что с использованием намерений это намного лучше.Отправка твитов в фоновом режиме приложения

String tweetUrl = "https://twitter.com/intent/tweet?text=PUT TEXT HERE &url="+ "https://www.google.com"; 
Uri uri = Uri.parse(tweetUrl); 
startActivity(new Intent(Intent.ACTION_VIEW, uri)); 

Но я просто хочу отправить твиты в фоновом режиме. Если кто-нибудь сделал это, пожалуйста, поделитесь со мной. мое требование - отправить твиты в фоновом режиме, когда сообщение опубликовано в моем приложении на основе социальных сетей. Я могу сделать это в случае с facebook, но все еще борюсь с Twitter.

Здесь ниже мой код, чтобы взять проверку подлинности Twitter Применение: -

class twAsyn extends AsyncTask<String, Void, String>{ 
    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     askOAuth(); 
     return null; 
    } 

} 

private void checkForSavedLogin() { 
    // Get Access Token and persist it 
    new accessUser().execute(); 
} 

class accessUser extends AsyncTask<String, Void, String>{ 

    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     AccessToken a = getAccessToken(); 

      // storeAccessToken(a); 
      loggedIUser.setTwSharing(true); 
      if (a!=null) { 

      // initialize Twitter4J 
      twitter = new TwitterFactory().getInstance(); 
      twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
      twitter.setOAuthAccessToken(a); 
      ((TwitterApplication)getApplication()).setTwitter(twitter); 
      final User user; 
      finish(); 
       } 
     return null; 
    } 

} 

private AccessToken getAccessToken() { 
    SharedPreferences settings = getSharedPreferences(Constants.PREFS_NAME, MODE_PRIVATE); 
    String token = settings.getString("accessTokenToken", ""); 
    String tokenSecret = settings.getString("accessTokenSecret", ""); 
    if (token!=null && tokenSecret!=null && !"".equals(tokenSecret) && !"".equals(token)){ 
     return new AccessToken(token, tokenSecret); 
    } 
    return null; 
} 

private void getConsumerProvider() { 
    OAuthProvider p = ((TwitterApplication)getApplication()).getProvider(); 
    if (p!=null){ 
     provider = p; 
    } 
    CommonsHttpOAuthConsumer c = ((TwitterApplication)getApplication()).getConsumer(); 
    if (c!=null){ 
     consumer = c; 
    } 
} 



private void setConsumerProvider() { 
    if (provider!=null){ 
     ((TwitterApplication)getApplication()).setProvider(provider); 
    } 
    if (consumer!=null){ 
     ((TwitterApplication)getApplication()).setConsumer(consumer); 
    } 
} 


private void storeAccessToken(AccessToken a) { 
    SharedPreferences settings = getSharedPreferences(Constants.PREFS_NAME, MODE_PRIVATE); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString("accessTokenToken", a.getToken()); 
    editor.putString("accessTokenSecret", a.getTokenSecret()); 
    editor.commit(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    System.out.println("RESUMING!!"); 
    if (this.getIntent()!=null && this.getIntent().getData()!=null){ 
     Uri uri = this.getIntent().getData(); 
     new twUserAcces(uri).execute(); 
    } 
} 

class twUserAcces extends AsyncTask<String, Void, String>{ 
    Uri uri; 
    String verifier; 
    public twUserAcces(Uri uri) { 
     // TODO Auto-generated constructor stub 
     this.uri = uri; 
     if (uri != null && uri.toString().startsWith(CALLBACK_URL)) { 
      verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); 

     } 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     checkForSavedLogin(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     try { 


      // this will populate token and token_secret in consumer 
      provider.retrieveAccessToken(consumer, verifier); 

      // Get Access Token and persist it 

      System.out.println(">>>>>>>> accesstoker "+consumer.getToken()); 
      System.out.println(">>>>>>>> accesstoker "+consumer.getTokenSecret()); 
      AccessToken a = new AccessToken(consumer.getToken(), consumer.getTokenSecret()); 
      storeAccessToken(a); 

      // initialize Twitter4J 
      twitter = new TwitterFactory().getInstance(); 
      twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
      twitter.setOAuthAccessToken(a); 
      ((TwitterApplication)getApplication()).setTwitter(twitter); 
      Log.e("Login>>>>>>>>>>>>>>>>>>>>>.", "Twitter Initialised"); 


      User user = null; 
      long h=twitter.getId(); 
      user = (User)twitter.getUserLists(0); 

      finish(); 
     } catch (Exception e) { 
      //Log.e(APP, e.getMessage()); 
      e.printStackTrace(); 
      System.out.println("e.getMessage()=="+e.getMessage()); 
      //Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 

     return null; 
    } 

} 

private void askOAuth() { 
    try { 


     consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
     provider = new CommonsHttpOAuthProvider("https://twitter.com/oauth/request_token", "https://twitter.com/oauth/access_token", "https://twitter.com/oauth/authorize"); 
     String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL); 
     //Toast.makeText(this, "Please authorize this app!", Toast.LENGTH_LONG).show(); 
     setConsumerProvider(); 
     startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl))); 
    } catch (Exception e) { 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
    } 
} 
+1

Вам нужно создать приложение и маркер доступа в этом приложении. Если вы хотите отправить некоторые твиты в свою учетную запись, вам необходимо использовать update_status.json с идентификатором приложения, секретным и одним токеном доступа. Вы можете сделать свои тесты здесь https://apigee.com/console/twitter. Также см. Здесь для отправки твита, используя java http://twitter4j.org/en/code-examples.html#updatingStatus –

ответ

0

Для отправки чирикать в Java, вы можете использовать Twitter4J

Создать приложение Twitter: Приведи here

Инициализация вашего объекта: Заполните учетные данные, используя учетные данные приложения Twitter.

ConfigurationBuilder cb = new ConfigurationBuilder(); 
cb.setDebugEnabled(true) 
    .setOAuthConsumerKey("") 
    .setOAuthConsumerSecret("") 
    .setOAuthAccessToken("") 
    .setOAuthAccessTokenSecret(""); 
TwitterFactory tf = new TwitterFactory(cb.build()); 

Отправить ваш твит

Twitter twitter = TwitterFactory.getSingleton(); 
Status status = twitter.updateStatus(latestStatus); 

Для получения наилучших результатов, пожалуйста, обратитесь here

+0

Я попытался с тем же, но он продолжает отвечать на ошибку. «Учетные данные аутентификации отсутствуют» –

+0

Создали ли вы свое приложение для твиттера? Убедитесь, что вы также создали токен доступа. И модель разрешения должна быть прочитана, напишите –

+0

Пожалуйста, проверьте мой ответ. Я вставил свой код аутентификации Twitter. Может быть, это поможет лучше понять. Я также использую класс TwitterApplication. –

Смежные вопросы