XMPPError при подключении к chat.facebook.com (отказано в доступе) при входе в чат facebook с asmack

Как вы, возможно, знаете, нет ни одной организованной документации о том, как правильно войти в Facebook с помощью библиотеки asmack. Мне каким-то образом удалось найти в сети несколько кодов, которые хотя бы позволяют мне войти в свою учетную запись, но почему я продолжаю получать следующее исключение:

XMPPError при подключении к chat.facebook.com:5222.: ошибка удаленного сервера (502) XMPPError при подключении к chat.facebook.com:5222. -- вызвано: java.net.SocketException: Отказано в доступе

Вот код:

((Button) findViewById(R.id.login_btn)).setOnClickListener(
      new OnClickListener() {
         @Override
         public void onClick(View v) {
            ConnectionConfiguration config =
                  new ConnectionConfiguration("chat.facebook.com", 5222,
                  "chat.facebook.com");
            config.setSASLAuthenticationEnabled(true);

            Connection conn = new XMPPConnection(config);
            try {
               conn.connect();
               SASLAuthentication.supportSASLMechanism("PLAIN", 0);

               ProgressDialog loading = ProgressDialog.show(instance,
                     "", "Loading...");
               conn.login(login_field.getText().toString(),
                     pwd_field.getText().toString(),
                     login_field.getText().toString() + "/fbchat");
               loading.hide();

               new AlertDialog.Builder(instance).setMessage(conn.getUser())
                  .create().show();
            } catch (XMPPException e) {
               new AlertDialog.Builder(instance).setMessage(e.toString())
               .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                     dialog.cancel();
                  }
               })
               .create().show();
            }
         }
});

person MLQ    schedule 17.08.2011    source источник


Ответы (1)


Очевидное возможное объяснение: есть ли у вас разрешение INTERNET в вашем AndroidManifest.xml?

    <uses-permission android:name="android.permission.INTERNET"/>

Без этого вы не сможете получить доступ к сетевым ресурсам.


РЕДАКТИРОВАТЬ:

Где в манифесте вы запрашиваете разрешение INTERNET? Его местоположение может иметь значение, и оно бесшумно потерпит неудачу. Он должен быть на верхнем уровне (например, под тегом <manifest>, не привязанным к действию). Конечно, если вы добавили его через Eclipse, возможно, он уже находится в правильном месте:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.samplesync"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-permission android:name="android.permission.INTERNET" />
    <activity>
        ...
    </activity>
</manifest>

В качестве альтернативы, как вы подключаетесь к Интернету? Это также может указывать на то, что требуемые порты заблокированы брандмауэром (см. -internet-permission">здесь)

person RivieraKid    schedule 17.08.2011
comment
похоже, ваше редактирование сработало! потому что теперь я получаю кучу новых ошибок, таких как тайм-аут сервера или что-то в этом роде. мое разрешение на использование изначально располагалось под тегом ‹/activity›. не могу поверить, что застрял на 6 часов - person MLQ; 17.08.2011
comment
Было бы здорово, если бы инструменты Android пометили это как ошибку, поскольку явно есть только одно место, где он может быть использован, но я думаю, что это правильный XML, поэтому он проходит. - person RivieraKid; 17.08.2011