2012-04-24 63 views
1

我正在编写一个应用程序,可以在Facebook上发布用户的行为。 发布过程是点击FB按钮,接下来发生的事情是Facebook尝试登录,如果用户已经使用SSO,则会创建Facebook对话框并将其发布到用户上饲料。Facebook请求不会等待用户输入

但是,没有与用户的交互,并且该帖子按原样发布在Facebook上。

如何提示用户在Facebook上发布常规移动应用程序用户交互?

代码登录到Facebook的:

public static final String appid = "1234567890"; 
public static final String[] permissions = { "publish_stream" }; 
Facebook facebook; 

facebook.authorize(MyClass.this, permissions, 
       new DialogListener() { 

     @Override 
     public void onComplete(Bundle values) { 
      // control comes here if the login was successful 
      // Facebook.TOKEN is the key by which the value of 
      // access token is stored in the Bundle called 
      // 'values' 
      Log.d("COMPLETE", "AUTH COMPLETE. VALUES: " 
           + values.size()); 
      Log.d("AUTH TOKEN", 
        "== " + values.getString(Facebook.TOKEN)); 
      updateStatus(values.getString(Facebook.TOKEN)); 
     } 

     @Override 
     public void onFacebookError(FacebookError e) { 
      Log.d("FACEBOOK ERROR", "FB ERROR. MSG: " + e.getMessage() 
        + ", CAUSE: " + e.getCause()); 
     } 

     @Override 
     public void onError(DialogError e) { 
      Log.e("ERROR", "AUTH ERROR. MSG: " + e.getMessage() 
        + ", CAUSE: " + e.getCause()); 
     } 

     @Override 
     public void onCancel() { 
      Log.d("CANCELLED", "AUTH CANCELLED"); 
     } 
}); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.d("onActivityResult", "onActivityResult"); 
    facebook.authorizeCallback(requestCode, resultCode, data); 
} 

代码publishStream()

protected void updateStatus(String accessToken) { 
    try { 
     Bundle msg = new Bundle(); 
     msg.putString("description", this.title); 
     msg.putString("link", this.link); 
     msg.putString("message", description); 
     msg.putString(Facebook.TOKEN, accessToken); 
     String response = facebook.request("me/feed", msg, "POST"); 
     Log.d("UPDATE RESPONSE", "" + response); 
     Toast.makeText(SinglePost.this, "Posted on Facebook", Toast.LENGTH_SHORT).show(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

回答

2

您使用facebook.request()方法,它会悄悄地在后台发布消息。要显示对话框,您将使用facebook.dialog()方法。您的代码看起来就像这样:

facebook.dialog(context, "stream.publish", parameters, new SomeDialogListener()); 

SomeDialogListenerDialogListener子类,将是你的回调实例来处理来自facebook响应(同你的登录对话框的情况下)。