Facebook好友对话框返回“未知方法”错误

时间:2011-03-20 23:48:09

标签: android facebook facebook-android-sdk

所以我很多天都在尝试这个。找不到任何地方。

当我尝试使用Facebook Android SDK调用“好友”对话框时,会返回以下错误:

  

API错误代码:3
  API错误说明:未知方法
  错误消息:此显示类型

不支持此方法

我没有在文档页面上找到任何说明触摸设备上不允许朋友对话的内容。我使用以下代码执行此操作:

Bundle params = new Bundle();
params.putString("id", "brent");
Log.i("In on click", params.toString());
SampleDialogListener());
mFacebook.dialog(TestActivity.this, "friends", params, new SampleDialogListener());

如果不允许,是否有其他方式从应用程序中发送好友请求?

3 个答案:

答案 0 :(得分:6)

根本问题是Facebook API还没有为所有显示类型做好准备,并且无法为移动显示显示好友对话框。您可以做的是更改Facebook安卓库:如果您在打开对话框时使用“弹出”显示模式而不是“触摸”和www.facebook.com而不是m.facebook.com,则会出现一个正确的窗口Facebook图书馆标准WebView。

为此,请按如下方式更改Facebook.java的对话框功能:

protected static String DIALOG_BASE_URL = "https://m.facebook.com/dialog/";
protected static String DIALOG_BASE_URL_FOR_MISSING_SCREENS = "https://www.facebook.com/dialog/";

public void dialog(Context context, String action, Bundle parameters,
        final DialogListener listener) {

    boolean missingScreen = action.contentEquals("friends") ? true : false;

    String endpoint = missingScreen ? DIALOG_BASE_URL_FOR_MISSING_SCREENS : DIALOG_BASE_URL;
    endpoint += action;

    parameters.putString("display", missingScreen ? "popup" : "touch");
    parameters.putString("redirect_uri", REDIRECT_URI);

    if (action.equals(LOGIN)) {
        parameters.putString("type", "user_agent");
        parameters.putString("client_id", mAppId);
    } else {
        parameters.putString("app_id", mAppId);
    }

    if (isSessionValid()) {
        parameters.putString(TOKEN, getAccessToken());
    }
    String url = endpoint + "?" + Util.encodeUrl(parameters);
    if (context.checkCallingOrSelfPermission(Manifest.permission.INTERNET)
            != PackageManager.PERMISSION_GRANTED) {
        Util.showAlert(context, "Error",
                "Application requires permission to access the Internet");
    } else {
        new FbDialog(context, url, listener).show();
    }
}

之后,您可能还想从对话框中删除双标题栏。转到FbDialog.java,并插入类似于onPageFinished的内容:

if (url.contains("friends?")) {
    mTitle.setHeight(0);
    mTitle.setVisibility(View.INVISIBLE);
}

答案 1 :(得分:2)

作品。

class Facebook_friendsPatch extends Facebook { 
   protected static String DIALOG_BASE_URL = "https://m.facebook.com/dialog/";
   protected static String DIALOG_BASE_URL_FOR_MISSING_SCREENS = "https://www.facebook.com/dialog/";
   protected static final String LOGIN = "oauth"; 
   protected String appId ; 

   public Facebook_friendsPatch(String app) {    
      super(app) ; 
      appId = app ; 
   }

   public void dialog(Context context, String action, Bundle parameters,
                      final DialogListener listener) {
      // copy from above 
   } 
}

答案 2 :(得分:0)

本教程有一个在facebook API中使用对话框的示例: