解析:Facebook登录和localDataStore

时间:2014-05-15 09:59:57

标签: android facebook parse-platform

我在我的应用程序中从Parse.com实现facebook登录时遇到了一些奇怪的行为。以下是如何使用样本中的Blank Facebook App示例代码复制它:

我想创建一个与当前用户关联的新“帖子”。在UserDetailsActivity的onCreate()结束时,我添加了:

ParseObject post = new ParseObject("Post");
post.put("name", "New post");
post.put("user", ParseUser.getCurrentUser());
post.saveInBackground(new SaveCallback() {

    @Override
    public void done(ParseException e) {
        if (e != null) {
            e.printStackTrace();
        }
    }           
});

在我在Application中启用localDataStore之前,这项工作非常顺利。上面的代码返回:

com.parse.ParseException : java.lang.IllegalArgumentException : Cannot save a ParseUser until it has been signed up. Call signUp first.

注意:在ParseFacebookUtils.logIn()的回调中返回的与ParseUser关联的数据为null(objectId,username,..),这解释了上述行为。

问题是:为什么要添加

Parse.enableLocalDatastore(this);

到应用程序让facebook登录返回一个空的ParseUser?

每两次发布会发生一次错误:

  • 首次启动,offlineStore数据库中没有存储有效的当前用户,facebook登录成功添加一个,一切运行正常
  • 第二次启动时,已经存储了一个有效用户,该用户被没有objectId或数据的“OfflineObject”用户所取代,导致上述错误。

我正在使用Parse 1.5.0& Facebook SDK 3.14。

1 个答案:

答案 0 :(得分:0)

ParseUser.getCurrentUser()很可能按https://parse.com/docs/android/api/com/parse/ParseUser.html#getCurrentUser()返回null。您可能希望首先登录facebook,然后尝试使用ParseUser

ParseFacebookUtils.logIn(getActivity(), new LogInCallback() {
    @Override
    public void done(ParseUser user, ParseException err) {
        if(user != null) {
            // use ParseUser here
        }
    }
});

此外,我不建议将Parse 1.5.0与facebook SDK 3.14版一起使用。 Parse https://www.parse.com/docs/android_guide#fbusers的文档指出“Parse与Facebook SDK for Android的v3.0兼容”。我的经历让我相信他们不是在撒谎。