繁体   English   中英

解析:Facebook登录名和localDataStore

[英]Parse : Facebook login and localDataStore

在我的应用程序中从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();
        }
    }           
});

在我在应用程序中启用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。

根据https://parse.com/docs/android/api/com/parse/ParseUser.html#getCurrentUser()ParseUser.getCurrentUser()很可能返回null。 您可能想要先进行Facebook登录,然后尝试使用ParseUser

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

另外,我不建议在Facebook SDK的3.14版中使用Parse 1.5.0。 用于Parse的文档https://www.parse.com/docs/android_guide#fbusers声明“ Parse与适用于Android的Facebook SDK v3.0兼容”。 我的经历使我相信他们没有说谎。

暂无
暂无

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

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