Диалог друзей Facebook возвращает ошибку «Неизвестный метод» - PullRequest
0 голосов
/ 21 марта 2011

Так что я пробую это уже много дней. Ничего не смог найти нигде.

Когда я пытаюсь вызвать диалоговое окно «Друзья» с помощью Android SDK Facebook, возвращается следующее сообщение:

Код ошибки 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 ]

6 голосов
/ 31 мая 2011

Основная проблема заключается в том, что API Facebook еще не готов для всех типов отображения, и диалоговое окно друзей не может быть отображено для мобильного дисплея. Что вы можете сделать, это изменить библиотеку Android для Facebook: если вы открываете диалоговое окно, а не открываете диалоговое окно, вместо «touch» и 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);
}
2 голосов
/ 05 августа 2012

Работает.

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 
   } 
}
0 голосов
/ 21 марта 2011

В этом руководстве приведен пример использования диалогового окна в Facebook API:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...