android - 使用 ParseFacebookUtil.login() 登录 facebook 返回空用户和异常无效日期

标签 android facebook parse-platform facebook-login

我按照说明使用正确的 app_id、parse_app_id、parse_client_id 设置我的 android 项目。甚至使用 ParseUI for Android注册一个新帐户并登录。但是 facebook 登录不起作用!

这是我的设置(已更新至 Parse-1.9.1 和 Facebook v4.0.1):

在我的应用程序中,build.gradle:

compile project(':ParseLoginUI')
compile 'com.facebook.android:facebook-android-sdk:4.0.1'

在 ParseLoginUI 项目中,它的 build.gradle(未更改只是从 repo 复制而来):

    dependencies {
        compile 'com.parse.bolts:bolts-android:1.2.0'
        compile 'com.android.support:support-v4:22.0.0'

        provided 'com.facebook.android:facebook-android-sdk:4.0.1'
        // This assumes that your app's project has a compile dependency on the Parse SDK JAR files.
        // Your project's build.gradle should say:
        //
        //     compile files('YOUR_PROJECT_LIBS_PATH/Parse-1.9.1.jar')
        //     compile files('YOUR_PROJECT_LIBS_PATH/ParseFacebookUtilsV4-1.9.1.jar')
        //
        // Since the dependency below is "provided" instead of "compile", your project's build.gradle
        // does not have to refer to the same Parse SDK instance that's in the ParseLoginUI/libs folder.
        provided files("$rootProject.projectDir/ParseLoginUI/libs/Parse-1.9.1.jar")
        provided files("$rootProject.projectDir/ParseLoginUI/libs/ParseFacebookUtilsV4-1.9.1.jar")
    }

点击登录按钮将运行:

facebookLoginButton = (Button) view.findViewById(R.id.fb_auth_button);
facebookLoginButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        onLoadingListener.onLoadingStart(false); // Facebook login pop-up already has a spinner

        if (config.isFacebookLoginNeedPublishPermissions()) {
            ParseFacebookUtils.logInWithPublishPermissionsInBackground(getActivity(),
                    config.getFacebookLoginPermissions(), facebookLoginCallbackV4);
        } else {
            ParseFacebookUtils.logInWithReadPermissionsInBackground(getActivity(),
                    config.getFacebookLoginPermissions(), facebookLoginCallbackV4);
        }
    }
});

private LogInCallback facebookLoginCallbackV4 = new LogInCallback() {
    @Override
    public void done(ParseUser user, ParseException e) {
        if (isActivityDestroyed()) {
            return;
        }

        if (user == null) {
            //loadingFinish();
            if (e != null) {
                Logger.d(getString(com.parse.ui.R.string.com_parse_ui_login_warning_facebook_login_failed) +
                        e.toString());
            }
            UIUtils.getSoldaToast(
                    getActivity(),
                    getString(com.parse.ui.R.string.com_parse_ui_facebook_login_failed_toast),
                    Gravity.CENTER).show();
        } else if (user.isNew()) {
            GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject fbUser,
                                                GraphResponse response) {
              /*
                If we were able to successfully retrieve the Facebook
                user's name, let's set it on the fullName field.
              */
                            ParseUser parseUser = ParseUser.getCurrentUser();
                            if (fbUser != null && parseUser != null
                                    && fbUser.optString("name").length() > 0) {
                                parseUser.put(USER_OBJECT_NAME_FIELD, fbUser.optString("name"));
                                parseUser.saveInBackground(new SaveCallback() {
                                    @Override
                                    public void done(ParseException e) {
                                        if (e != null) {
                                            Logger.d(getString(
                                                    com.parse.ui.R.string.com_parse_ui_login_warning_facebook_login_user_update_failed) +
                                                    e.toString());
                                        }
                                        loginSuccess();
                                    }
                                });
                            }
                            loginSuccess();
                        }
                    }
            ).executeAsync();
        } else {
            loginSuccess();
        }
    }
};

它总是返回空用户 & ParseException 表示无效日期:

error-code-107

检查 doc但仍然不知道我做错了什么。

顺便说一句,我确定我确实注释掉了 Parse.enableLocalDatastore(this); 以使其不是因为 this bug .我请求的唯一 facebook 权限是 email 所以电话是

ParseFacebookUtils.logInWithReadPermissionsInBackground(
        getActivity(),
        config.getFacebookLoginPermissions(), 
        facebookLoginCallbackV4
);

更新到最新版本的ParseUI-android后,问题依旧。

有人遇到过吗?

最佳答案

终于解决了! friend 建议我从我的 facebook 帐户中删除该应用程序,以确保重新开始。然后卸载安卓应用重新安装。砰!有用!谢谢 Faceboooook。

希望这对您有所帮助!

关于android - 使用 ParseFacebookUtil.login() 登录 facebook 返回空用户和异常无效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29416788/

相关文章:

android - Activity 流程 : OnCreate called when I want to resume my activity

javascript - 如何在 Parse.Cloud.define() 中声明参数

javascript - 使用handlebars.js 登录状态相关菜单

android - reddit 手机应用程序如何在发送新消息时自动更新回收器? [包括 GIF]

android - 方法 findViewById(int) 未定义

Android AutoCompleteTextView 与正则表达式?

android - Facebook 无效的 key 散列错误

android - 奇怪的解析崩溃 android - 尝试调用虚拟方法 'int java.lang.Integer.intValue()

java - Google 服务应用插件错误,无法解析 com.google.android.gms.11.0.4 和错误 :(45, 0)

android - 将 android 操作栏兼容、寻呼机和选项卡示例与 ActionBarSherlock 进行比较