繁体   English   中英

Android ParseFacebookUtils.login回调,返回用户为null objectId

[英]Android ParseFacebookUtils.login callback, returning user with null objectId

我的问题基本上与这个问题相同: https//www.parse.com/questions/parseusers-object-id-is-null-after-logging-in-using-facebook ,但没有真正的答案线。

如果ParseFacebookUtils第一次使用login()创建用户,一切正常。 但是,当我再次调用ParseFacebookUtils.login()时,它返回一个具有null getObjectId()的用户

我的登录按钮:(已更新)

    mFacebookBtn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            ParseFacebookUtils.logIn(LoginActivity.this, new LogInCallback() {
                @Override
                public void done(ParseUser user, ParseException err) {
                    if (err != null) {
                        err.printStackTrace();
                        return;
                    }
                    if (user != null) {
                        if (user.getObjectId() == null) {
                            Toast.makeText(LoginActivity.this, "Weird error where object Id is null... " + user.getObjectId() + " " + user.getUsername() + " " + user.getCreatedAt() + " " + user.getUpdatedAt(), Toast.LENGTH_LONG).show();
                            Log.e(TAG, "Weird error where object Id is null... " + user.getObjectId() + " " + user.getUsername() + " " + user.getCreatedAt() + " " + user.getUpdatedAt());
                        }
                            else
                            proceedToMainActivity();

                    }
                }
            });
        }
    });

正如我之前所说的,如果用户是第一次创建的,它会返回有效的对象ID,但第二次调用login()时,Log会显示奇怪的错误

我正在使用Facebook SDK 3.15.0,Parse 1.5.1,并且还在设备上安装了Facebook应用程序。

更新:此问题仍在发生,但我注意到如果我完全重新安装该应用程序不会发生这种情况。 但是,当您注销时,登录时仍会发生。 这是我的注销代码,如果它可能会有所帮助:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    } else if (id == R.id.action_logout) {
        ParseUser.logOut();
        Intent intent = new Intent(this, LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

更新:显然这是一个错误https://developers.facebook.com/bugs/229876443869758/这对我来说仍然是一个持续存在的问题

登录Facebook开发者网站并在设置下的应用仪表板中,检查是否存储了正确的密钥哈希值和包名称,并确保“单点登录”已启用。 在这里阅读密钥哈希。

如果您可以正确登录用户一次,请在注销前尝试删除用户并清除会话。

ParseUser user = ParseUser.getCurrentUser();

if(user != null)
    user.deleteInBackground();
if(ParseFacebookUtils.getSession()!=null)
    ParseFacebookUtils.getSession().closeAndClearTokenInformation();

ParseUser.logOut();

一件重要的事情! FacebookLogin Activity需要返回(历史记录)发起者活动。 如果您在清单Facebook的活动定义中有noHistory = true将无法返回。

错误

<activity
   android:name=".LoginActivity"
   android:label="Login activity"
   android:noHistory="true">
</activity>

好!

<activity
       android:name=".LoginActivity"
       android:label="Login activity">
</activity>

现在在您的LoginActivity.java中您可以执行以下操作:

 ParseFacebookUtils.logIn(this, new LogInCallback() {
                @Override
                public void done(ParseUser user, ParseException err) {
                    //here you will receive the user!!!
                }
            });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM