2011-12-27 2 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); 

그리고 여전히 문제는 장치의 기존 페이스 북 응용 프로그램의 존재하는 경우에, 당신은 수도 같은 것을해야한다 로그인을 필수로하십시오. 코드의이 작품에서

,

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

이 변경을 수행

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

이 트릭을 할해야합니다. 코드 (페이스 북의 패키지)에서

관련 문제