2014-01-13 21 views
0

我想在Twitter上發佈我的應用程序中的推文。此推文將顯示在我的應用程序以及twitter中。如何在Twiiter上發佈推文使用自己的應用程序

我有用戶的所有細節,我不想在Twitter上登錄。下面是我從網絡服務獲得的格式:

<string xmlns="http://tempuri.org/"> 
    {"Id":"cc02cf6c-c143-4921-b5d6-6afec1243c10","TwitterUserId":"123456", 
    "TwitterScreenName":"abc", "OAuthToken":"xxxxxxxxxxxxxxxxxxxx", 
    "OAuthSecret":"xxxxxxxxxxxx", "UserId":"zzzzzzzzzz", "FollowersCount":1, "IsActive":true, 
    "FollowingCount":13, "ProfileUrl":"", "ProfileImageUrl":"http://abs.xxxxxxxxxxxxx.png", 
    "TwitterName":null} 
</string> 

下面是我的代碼的帖子在Twitter上發文,但在這裏,他們使用的是與Twitter登錄。 我不想登錄。

請指導我或如果可能,然後提供一些示例代碼。

我正在使用twitter4j庫。

public class MainActivity extends Activity implements OnClickListener { 

    // Constants 

    /** 
    * Register your here app https://dev.twitter.com/apps/new and get your 
    * consumer key and secret 
    * */ 

    static String TWITTER_CONSUMER_KEY = "xxxxxxxxxxxxxxxxxx"; 
    static String TWITTER_CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"; 


    // Preference Constants 
    static String PREFERENCE_NAME = "twitter_oauth"; 
    static final String PREF_KEY_OAUTH_TOKEN = "oauth_token"; 
    static final String PREF_KEY_OAUTH_SECRET = "oauth_token_secret"; 
    static final String PREF_KEY_TWITTER_LOGIN = "isTwitterLogedIn"; 

    static final String TWITTER_CALLBACK_URL = "oauth://t4jsample"; 

    // Twitter oauth urls 
    static final String URL_TWITTER_AUTH = "auth_url"; 
    static final String URL_TWITTER_OAUTH_VERIFIER = "oauth_verifier"; 
    static final String URL_TWITTER_OAUTH_TOKEN = "oauth_token"; 

    Button btnLoginTwitter; 
    Button btnUpdateStatus; // This is responsible for tweet updation 
    Button btnLogoutTwitter; 
    EditText txtUpdate; 

    ProgressDialog pDialog; 

    // Twitter 
    private static Twitter twitter; 
    private static RequestToken requestToken; 

    // Shared Preferences 
    private static SharedPreferences mSharedPreferences; 

    // Alert Dialog Manager 
    AlertDialogManager alert = new AlertDialogManager(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
       .permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

     // Check if twitter keys are set 
     if (TWITTER_CONSUMER_KEY.trim().length() == 0 
       || TWITTER_CONSUMER_SECRET.trim().length() == 0) { 
      // Internet Connection is not present 
      alert.showAlertDialog(MainActivity.this, "Twitter oAuth tokens", 
        "Please set your twitter oauth tokens first!", false); 
      // stop executing code by return 
      return; 
     } 




    /* 
     RequestToken reqToken = (RequestToken) session.getAttribute(REQUEST_TOKEN); 
     session.removeAttribute(REQUEST_TOKEN); 

     if (!reqToken.getToken().equals(oauthToken)) { 
       throw new TwitterException("Wrong oauth_token"); 
     } 
     AccessToken token = twitter.getOAuthAccessToken(reqToken); 
     */ 


     // All UI elements 
     btnLoginTwitter = (Button) findViewById(R.id.btnLoginTwitter); 
     btnUpdateStatus = (Button) findViewById(R.id.btnUpdateStatus); 
     btnLogoutTwitter = (Button) findViewById(R.id.btnLogoutTwitter); 
     txtUpdate = (EditText) findViewById(R.id.txtUpdateStatus); 

     // Shared Preferences 
     mSharedPreferences = getApplicationContext().getSharedPreferences(
       "MyPref", 0); 

     btnLoginTwitter.setOnClickListener(this); 

     btnUpdateStatus.setOnClickListener(this); 

     btnLogoutTwitter.setOnClickListener(this); 

     /** 
     * This if conditions is tested once is redirected from twitter page. 
     * Parse the uri to get oAuth Verifier 
     * */ 
     if (!isTwitterLoggedInAlready()) { 
      Uri uri = getIntent().getData(); 
      if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) { 
       // oAuth verifier 
       String verifier = uri 
         .getQueryParameter(URL_TWITTER_OAUTH_VERIFIER); 

       try { 
        // Get the access token 
        AccessToken accessToken = twitter.getOAuthAccessToken(
          requestToken, verifier); 

        // Shared Preferences 
        Editor e = mSharedPreferences.edit(); 

        // After getting access token, access token secret 
        // store them in application preferences 
        e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken()); 
        e.putString(PREF_KEY_OAUTH_SECRET, 
          accessToken.getTokenSecret()); 
        // Store login status - true 
        e.putBoolean(PREF_KEY_TWITTER_LOGIN, true); 
        e.commit(); // save changes 


        // Hide login button 
        btnLoginTwitter.setVisibility(View.GONE); 

        // Show Update Twitter 

        txtUpdate.setVisibility(View.VISIBLE); 
        btnUpdateStatus.setVisibility(View.VISIBLE); 
        btnLogoutTwitter.setVisibility(View.VISIBLE); 

        // Getting user details from twitter 
        // For now i am getting his name only 
        long userID = accessToken.getUserId(); 

        System.out.println("--------User Id--------------"+userID); 
        User user = twitter.showUser(userID); 

        System.out.println("-------- user --------------"+user); 
        String username = user.getName(); 

        System.out.println("-------- username --------------"+username); 

        Toast.makeText(getApplicationContext(), 
          Html.fromHtml("<b>Benvenuto " + username + "</b>"), 
          Toast.LENGTH_LONG).show(); 

       } catch (Exception e) { 
        // Check log for login errors 
        Log.e("Errore Login", "> " + e.getMessage()); 
       } 
      } 
     } 

    } 

    /** 
    * Function to login twitter 
    * */ 




    private void loginToTwitter() { 
     // Check if already logged in 
     if (!isTwitterLoggedInAlready()) { 
      ConfigurationBuilder builder = new ConfigurationBuilder(); 
      builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); 
      builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); 
      Configuration configuration = builder.build(); 

      TwitterFactory factory = new TwitterFactory(configuration); 
      twitter = factory.getInstance(); 

      try { 
       requestToken = twitter 
         .getOAuthRequestToken(TWITTER_CALLBACK_URL); 

      System.out.println("requestToken"+requestToken); 

       this.startActivity(new Intent(Intent.ACTION_VIEW, Uri 
         .parse(requestToken.getAuthenticationURL()))); 
      } catch (TwitterException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      // user already logged into twitter 
      btnLoginTwitter.setVisibility(View.GONE); 

      // Show Update Twitter 

      txtUpdate.setVisibility(View.VISIBLE); 
      btnUpdateStatus.setVisibility(View.VISIBLE); 
      btnLogoutTwitter.setVisibility(View.VISIBLE); 

      Toast.makeText(getApplicationContext(), 
        "Logged in", Toast.LENGTH_LONG).show(); 
     } 
    } 

    /** 
    * Function to update status 
    * */ 
    class updateTwitterStatus extends AsyncTask<String, String, String> { 

     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(MainActivity.this); 
      pDialog.setMessage("Update in corso..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     /** 
     * getting Places JSON 
     * */ 
     protected String doInBackground(String... args) { 
      Log.d("Tweet Text", "> " + args[0]); 
      String status = args[0]; 
      try { 
       ConfigurationBuilder builder = new ConfigurationBuilder(); 
       builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); 
       builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); 

       // Access Token 
       String access_token = mSharedPreferences.getString(
         PREF_KEY_OAUTH_TOKEN, "xxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
       System.out.println("access_token"+access_token); 
       // Access Token Secret 
       String access_token_secret = mSharedPreferences.getString(
         PREF_KEY_OAUTH_SECRET, "xxxxxxxxxxxxxxxxxxxxxxxxxxx"); 

       System.out.println("access_token_secret"+access_token_secret); 
       AccessToken accessToken = new AccessToken(access_token, 
         access_token_secret); 
       Twitter twitter = new TwitterFactory(builder.build()) 
         .getInstance(accessToken); 

       // Update status 
       twitter4j.Status response = twitter.updateStatus(status); 

       Log.d("Status", "> " + response.getText()); 
      } catch (TwitterException e) { 
       // Error in updating status 
       Log.d("Twitter Update Error", e.getMessage()); 
      } 
      return null; 
     } 

     /** 
     * After completing background task Dismiss the progress dialog and show 
     * the data in UI Always use runOnUiThread(new Runnable()) to update UI 
     * from background thread, otherwise you will get error 
     * **/ 
     protected void onPostExecute(String file_url) { 
      // dismiss the dialog after getting all products 
      pDialog.dismiss(); 
      // updating UI from Background Thread 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(getApplicationContext(), 
          "Tweet Send", Toast.LENGTH_SHORT) 
          .show(); 
        // Clearing EditText field 
        txtUpdate.setText(""); 
       } 
      }); 
     } 

    } 

    /** 
    * Function to logout from twitter It will just clear the application shared 
    * preferences 
    * */ 
    private void logoutFromTwitter() { 
     // Clear the shared preferences 
     Editor e = mSharedPreferences.edit(); 
     e.remove(PREF_KEY_OAUTH_TOKEN); 
     e.remove(PREF_KEY_OAUTH_SECRET); 
     e.remove(PREF_KEY_TWITTER_LOGIN); 
     e.commit(); 

     // After this take the appropriate action 
     // I am showing the hiding/showing buttons again 
     // You might not needed this code 
     btnLogoutTwitter.setVisibility(View.GONE); 
     btnUpdateStatus.setVisibility(View.GONE); 
     txtUpdate.setVisibility(View.GONE); 

     btnLoginTwitter.setVisibility(View.VISIBLE); 
    } 

    /** 
    * Check user already logged in your application using twitter Login flag is 
    * fetched from Shared Preferences 
    * */ 
    private boolean isTwitterLoggedInAlready() { 
     // return twitter login status from Shared Preferences 
     return mSharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false); 
    } 

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

    @Override 
    public void onClick(View view) { 
     if (view == btnLoginTwitter) { 
      loginToTwitter(); 
     } 
     if (view == btnLogoutTwitter) { 
      logoutFromTwitter(); 
     } 
     if (view == btnUpdateStatus) { 
      // Call update status function 
      // Get the status from EditText 
      String status = txtUpdate.getText().toString(); 

      System.out.println("----------hiiiiiiii--------------"+status); 

      // Check for blank text 
      if (status.trim().length() > 0) { 
       // update status 
       new updateTwitterStatus().execute(status); 
      } else { 
       // EditText is empty 
       Toast.makeText(getApplicationContext(), 
         "Please enter status message", Toast.LENGTH_SHORT) 
         .show(); 
      } 
     } 
    } 
} 

回答

2
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); 
    configurationBuilder.setOAuthConsumerKey(context.getResources().getString(R.string.twitter_consumer_key)); 
    configurationBuilder.setOAuthConsumerSecret(context.getResources().getString(R.string.twitter_consumer_secret)); 
    configurationBuilder.setOAuthAccessToken("HERE ENTER UR ACCESS TOKEN RECEIVED IN YOUR WEB SERVICE")); 
    configurationBuilder.setOAuthAccessTokenSecret("HERE ENTER UR ACCESS TOKEN SECRET RECEIVED IN YOUR WEB SERVICE")); 
    Configuration configuration = configurationBuilder.build(); 
    final Twitter twitter = new TwitterFactory(configuration).getInstance(); 

    new Thread(new Runnable() { 

      private double x; 

      @Override 
      public void run() { 
        boolean success = true; 
        try { 
          x = Math.random(); 
          twitter.updateStatus(message +" "+x); 
        } catch (TwitterException e) { 
          e.printStackTrace(); 
          success = false; 
        } 

        final boolean finalSuccess = success; 

        callingActivity.runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
            postResponse.onFinsihed(finalSuccess); 
          } 
        }); 

      } 
    }).start(); 

上述方法將讓你發佈的tweet,如果你有一個有效的訪問令牌和訪問令牌的祕密。 乾杯:)

+0

您是否看過本示例代碼?其實我根據你的代碼和工作進行了修改,沒有任何錯誤,但響應是錯誤的,這意味着圖片或推文不會發布在牆上。 :( – user3048165

+0

它的工作很好,很多,非常感謝,我沒有太多的名聲,我會標記爲:) – user3048165

0

這裏是代碼張貼在Twitter消息

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); 
     configurationBuilder.setOAuthConsumerKey(context.getResources().getString(R.string.twitter_consumer_key)); 
     configurationBuilder.setOAuthConsumerSecret(context.getResources().getString(R.string.twitter_consumer_secret)); 
     configurationBuilder.setOAuthAccessToken(LoginActivity.getAccessToken((context))); 
     configurationBuilder.setOAuthAccessTokenSecret(LoginActivity.getAccessTokenSecret(context)); 
     Configuration configuration = configurationBuilder.build(); 
     final Twitter twitter = new TwitterFactory(configuration).getInstance(); 

     new Thread(new Runnable() { 

       private double x; 

       @Override 
       public void run() { 
         boolean success = true; 
         try { 
           x = Math.random(); 
           twitter.updateStatus(message +" "+x); 
         } catch (TwitterException e) { 
           e.printStackTrace(); 
           success = false; 
         } 

         final boolean finalSuccess = success; 

         callingActivity.runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
             postResponse.onFinsihed(finalSuccess); 
           } 
         }); 

       } 
     }).start(); 

檢查這個tutorial瞭解更多詳情。

+0

謝謝。這裏您使用的是登錄。我不想用Twitter登錄 – user3048165

+0

我認爲您必須先登錄 – Prachi

+0

不。我使用我的應用程序登錄。我有用戶使用自己的網絡服務的所有細節,我提到 – user3048165

相關問題