Facebook登录问题在android中

时间:2014-01-14 06:00:28

标签: android facebook

我正在我的Android应用程序中实现Facebook登录。问题是当我运行应用程序时,它会在主要活动中单击按钮时重定向到facebook登录页面。当我输入凭据时,会显示一个白页,但没有任何反应。此外,如果我第二次运行该应用程序,则只显示空白页面。我试图在Facebook的开发者设置页面中打开/关闭单点登录功能,但它没有帮助。这是我的Facebook登录活动代码。

public class FacebookLogin extends Activity {

// Your Facebook APP ID
private static String APP_ID = "xxxxxxx"; // Replace with your App
                                                    // ID

// Instance of Facebook Class
private Facebook facebook = new Facebook(APP_ID);
private AsyncFacebookRunner mAsyncRunner;
String FILENAME = "AndroidSSO_data";
private SharedPreferences mPrefs;

@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mAsyncRunner = new AsyncFacebookRunner(facebook);

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
        // Start AsyncTASK here
        loginToFacebook();
    } else {

        DialogClass
                .createDAlertDialog(
                        FacebookLogin.this,
                        "Please Check Internet Connection \n Please Turn on Internet",
                        true);

    }

}

/**
 * Function to login into facebook
 * */
@SuppressWarnings("deprecation")
public void loginToFacebook() {

    mPrefs = getPreferences(MODE_PRIVATE);
    String access_token = mPrefs.getString("access_token", null);
    long expires = mPrefs.getLong("access_expires", 0);

    if (access_token != null) {
        facebook.setAccessToken(access_token);
        Log.d("FB Sessions", "" + facebook.isSessionValid());
    }

    if (expires != 0) {
        facebook.setAccessExpires(expires);
    }

    if (!facebook.isSessionValid()) {
        facebook.authorize(this,
                new String[] { "email", "publish_stream" },
                new DialogListener() {

                    @Override
                    public void onCancel() {
                        // Function to handle cancel event
                    }

                    @Override
                    public void onComplete(Bundle values) {
                        // Function to handle complete event
                        // Edit Preferences and update facebook acess_token
                        SharedPreferences.Editor editor = mPrefs.edit();
                        editor.putString("access_token",
                                facebook.getAccessToken());
                        editor.putLong("access_expires",
                                facebook.getAccessExpires());
                        editor.commit();

                    }

                    public void onAuthFail(String error) {
                        Log.e("FB", "AuthFailed: " + error);
                        Toast.makeText(FacebookLogin.this, "Auth fail",
                                Toast.LENGTH_LONG).show();
                        startActivity(new Intent(FacebookLogin.this,
                                SignIn.class));
                    }

                    public void onAuthSucceed() {
                        Log.e("FB", "AuthSucceed");
                        Toast.makeText(FacebookLogin.this, "Auth success",
                                Toast.LENGTH_LONG).show();
                        startActivity(new Intent(FacebookLogin.this,
                                Logout.class));

                    }

                    @Override
                    public void onError(DialogError error) {
                        // Function to handle error

                    }

                    @Override
                    public void onFacebookError(FacebookError fberror) {
                        // Function to handle Facebook errors

                    }

                });
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    facebook.authorizeCallback(requestCode, resultCode, data);
}

/**
 * Function to show Access Tokens
 * */
public void showAccessTokens() {
    String access_token = facebook.getAccessToken();

    Toast.makeText(getApplicationContext(),
            "Access Token: " + access_token, Toast.LENGTH_LONG).show();
}

/**
 * Function to Logout user from Facebook
 * */
@SuppressWarnings("deprecation")
public void logoutFromFacebook() {
    mAsyncRunner.logout(this, new RequestListener() {
        @Override
        public void onComplete(String response, Object state) {
            Log.d("Logout from Facebook", response);
            if (Boolean.parseBoolean(response) == true) {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                    }

                });

            }
        }

        @Override
        public void onIOException(IOException e, Object state) {
        }

        @Override
        public void onFileNotFoundException(FileNotFoundException e,
                Object state) {
        }

        @Override
        public void onMalformedURLException(MalformedURLException e,
                Object state) {
        }

        @Override
        public void onFacebookError(FacebookError e, Object state) {
        }
    });
}

}

1 个答案:

答案 0 :(得分:1)

我为windows phone应用程序实现了相同的功能。我曾经面临同样的问题。但说得对。 https://github.com/sravich/MvvmCross-Facebook-Login

您可以使用此链接检查代码并以类似的方式为Android平台运行它。逻辑是一样的。