2013-04-29 4 views
0

Я использую этот код, чтобы отправить сообщение на стене, на мой Facebook:Сообщение сообщение на facebook стене андроида

import com.facebook.android.DialogError; 
import com.facebook.android.Facebook; 
import com.facebook.android.Facebook.DialogListener; 
import com.facebook.android.FacebookError; 

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Toast; 

public class ShareOnFacebook extends Activity{ 


    private static final String[] PERMISSIONS = new String[] {"publish_stream"}; 

    private static final String TOKEN = "access_token"; 
     private static final String EXPIRES = "expires_in"; 
     private static final String KEY = "facebook-credentials"; 

    private Facebook facebook; 
    private String messageToPost; 

    public boolean saveCredentials(Facebook facebook) { 
      Editor editor = getApplicationContext().getSharedPreferences(KEY, Context.MODE_PRIVATE).edit(); 
      editor.putString(TOKEN, facebook.getAccessToken()); 
      editor.putLong(EXPIRES, facebook.getAccessExpires()); 
      return editor.commit(); 
     } 

     public boolean restoreCredentials(Facebook facebook) { 
      SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(KEY, Context.MODE_PRIVATE); 
      facebook.setAccessToken(sharedPreferences.getString(TOKEN, null)); 
      facebook.setAccessExpires(sharedPreferences.getLong(EXPIRES, 0)); 
      return facebook.isSessionValid(); 
     } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     facebook = new Facebook(getResources().getString(R.string.facebook_app_id)); 
     restoreCredentials(facebook); 


     setContentView(R.layout.facebook_dialog); 

     String facebookMessage = getIntent().getStringExtra("facebookMessage"); 
     if (facebookMessage == null){ 
      facebookMessage = "Test wall post"; 
     } 
     messageToPost = facebookMessage; 
     if (! facebook.isSessionValid()) { 
      loginAndPostToWall(); 
      finish(); 
     } 
     else { 
      postToWall(messageToPost); 
     } 
    } 



    public void loginAndPostToWall(){ 
     facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener()); 
    } 

    public void postToWall(String message) { 
     FacebookPoster fp = new FacebookPoster(); 
     fp.execute(message, null, null); 
     } 
     private class FacebookPoster extends AsyncTask { 

     protected void onPostExecute(String result) { 
     showToast(result); 
     finish(); 
     } 

     @Override 
     protected Object doInBackground(Object... params) { 
      Bundle parameters = new Bundle(); 
      parameters.putString("message", "Test"); 
      parameters.putString("description", "topic share"); 
      try { 
      facebook.request("me"); 
      String response = facebook.request("me/feed", parameters, "POST"); 
      Log.d("Tests", "got response: " + response); 
      if (response == null || response.equals("") 
      || response.equals("false")) { 
      return "Blank response."; 
      } else { 
      return "Message posted to your facebook wall!"; 
      } 
      } catch (Exception e) { 
      Log.d("ShareOnFacebook" , e.getMessage()); 
      return "Failed to post to wall!"; 
      } 
     } 
     } 
    class LoginDialogListener implements DialogListener { 
     public void onComplete(Bundle values) { 
      saveCredentials(facebook); 
      if (messageToPost != null){ 
      postToWall(messageToPost); 
     } 
     } 
     public void onCancel() { 
      showToast("Authentication with Facebook cancelled!"); 
      finish(); 
     } 
     @Override 
     public void onFacebookError(FacebookError e) { 
      showToast("Authentication with Facebook failed!"); 
      finish(); 

     } 
     @Override 
     public void onError(DialogError e) { 
      showToast("Authentication with Facebook failed!"); 
      finish(); 

     } 
    } 

    private void showToast(String message){ 
     Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); 
    } 
} 

но что-то не так, потому что: 1) Я не могу видеть мою почту на мой стены. 2) Когда я нажимаю снова, чтобы отправить сообщение, мне нужно снова войти. Как я могу решить свои проблемы?

+0

Сначала проверьте, есть ли у вас активные сеансы и вошедший в систему пользователь, если вы не должны регистрировать пользователя, сохраните сеанс и после этого сообщения на стене. – hardartcore

+0

как я могу это сделать? Можете ли вы привести какой-нибудь пример? – edi233

+0

Я получаю что-то подобное в журналах: {Состояние сеанса: ОТКРЫТО, токен: {токен AccessToken: ACCESS_TOKEN_REMOVED разрешения: [email]},} – edi233

ответ

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