2011-12-27 80 views
0

我正在使用以下代碼在Facebook牆上發佈圖片。 它工作正常。無法登錄在我的Facebook牆上發佈圖片

問題是 - >如果具有Facebook應用程序的設備我不能在牆上張貼圖像。

- >該設備沒有Facebook應用程序。它的工作沒有任何問題。

請幫我解決問題。 這是我在這裏使用的代碼。

public class ShareOnFacebook extends Activity { 

private static final String APP_ID = "269876589726953"; 
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; 
     private Bitmap mBitmap; 

     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); 

    mBitmap = CropImage.getBitmapCrop();  

    facebook = new Facebook(APP_ID); 
    restoreCredentials(facebook); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.share); 

    String facebookMessage = getIntent().getStringExtra("facebookMessage"); 
    if (facebookMessage == null){ 
     facebookMessage = "Test wall post"; 
    } 
    messageToPost = facebookMessage; 
} 

public void doNotShare(View button){ 
    finish(); 
} 
public void share(View button){ 
    if (! facebook.isSessionValid()) { 
     loginAndPostToWall(); 
    } 
    else { 
     postToWall(messageToPost); 
    } 
} 

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

public void postToWall(String message) { 


    // posting image on FB wall 
    byte[] data = null; 

    Bitmap bi = mBitmap; 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    data = baos.toByteArray(); 
    Bundle params = new Bundle(); 
    params.putString(Facebook.TOKEN, facebook.getAccessToken());   
    params.putString("method", "photos.upload"); 
    params.putByteArray("picture", data); 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
    mAsyncRunner.request(null, params, "POST", new PhotoUploadListener(), null); 

    finish(); 
} 

public class PhotoUploadListener extends com.facebook.android.BaseRequestListener { 

    public void onComplete(final String response, final Object state) {   
     //dialog.dismiss(); 
     //showToast("Image shared on your facebook wall!");   
    } 
    public void onFacebookError(FacebookError error) { 
     //dialog.dismiss(); 
     Toast.makeText(getApplicationContext(), "Facebook Error: " + error.getMessage(),Toast.LENGTH_LONG).show(); 
    } 
} 

class LoginDialogListener implements DialogListener { 
    public void onComplete(Bundle values) { 
     saveCredentials(facebook); 
     if (messageToPost != null){ 
     postToWall(messageToPost); 
    } 
    } 
    public void onFacebookError(FacebookError error) { 
     showToast("Authentication with Facebook failed!"); 
     finish(); 
    } 
    public void onError(DialogError error) { 
     showToast("Authentication with Facebook failed!"); 
     finish(); 
    } 
    public void onCancel() { 
     showToast("Authentication with Facebook cancelled!"); 
     finish(); 
    } 
} 

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

回答

0

的微小變化中的代碼(臉譜包)

查找到授權功能facebook.java文件。嘗試註釋掉singlesignon並僅使用startdialog()。希望它有幫助。

1

我不確定你爲什麼在這裏使用null。據我所知,而不是這個,

mAsyncRunner.request(null, params, "POST", new PhotoUploadListener(), null); 

它應該是這樣的,

mAsyncRunner.request("me/photos", params, "POST", new PhotoUploadListener(), null); 

而且還是否存在,因爲在設備的現有的Facebook應用程序的您的問題,那麼你可能已經使登錄強制。

在這片你的代碼,

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

做到這一點的變化,

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

它應該做的伎倆。

相關問題