连接到chat.facebook.com的XMPPError(权限被拒绝)登录到与asmack的Facebook聊天

时间:2011-08-17 08:02:37

标签: android facebook login chat smack

您可能知道,没有一个有组织的文档介绍如何使用asmack库正确登录Facebook。我以某种方式设法在网上找到一些代码,至少允许我登录我的帐户,但为什么我一直得到以下例外:

  

连接到chat.facebook.com:5222的XMPPError:remote-server-error(502)连接到chat.facebook.com:5222的XMPPError。 - 由:java.net.SocketException:Permission denied

引起

以下是代码:

((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();
            }
         }
});

1 个答案:

答案 0 :(得分:3)

明显的潜在解释 - 你的AndroidManifest.xml中是否有INTERNET权限?

    <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>

或者,您如何连接到互联网?这也可能表示防火墙阻止了所需的端口(请参阅here