Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何链接谷歌+;Android上Parse后端的登录用户?_Android_Parse Platform_Google Login_Google Plus Signin - Fatal编程技术网

如何链接谷歌+;Android上Parse后端的登录用户?

如何链接谷歌+;Android上Parse后端的登录用户?,android,parse-platform,google-login,google-plus-signin,Android,Parse Platform,Google Login,Google Plus Signin,我已经在android应用程序中使用Parse 3个月了。现在我想在应用程序中添加电子邮件登录和社交登录(Facebook和Google+)。我已经成功添加了电子邮件和fb登录,用户可以同时连接电子邮件或facebook,应用程序将识别该用户 e、 g.如果我通过电子邮件登录,然后连接facebook,在另一台设备上使用该应用程序,通过facebook登录,该应用程序将知道它是同一个用户,并将为我定制,并显示我的数据。电子邮件也可以 我已添加,但无法将用户的Google+凭据与登录用户连接 Pa

我已经在android应用程序中使用Parse 3个月了。现在我想在应用程序中添加电子邮件登录和社交登录(Facebook和Google+)。我已经成功添加了电子邮件和fb登录,用户可以同时连接电子邮件或facebook,应用程序将识别该用户

e、 g.如果我通过电子邮件登录,然后连接facebook,在另一台设备上使用该应用程序,通过facebook登录,该应用程序将知道它是同一个用户,并将为我定制,并显示我的数据。电子邮件也可以

我已添加,但无法将用户的Google+凭据与登录用户连接

Parse Users表有一个authData字段,它获取facebook的auth数据,并将获取Twitter,这两个登录都被烘焙到Parse SDK中

为Google+做的最好的事情是什么?我对数据库设计以及如何连接登录Google+的用户感到困惑

如果用户只是通过Google+登录怎么办?如何创建解析用户并在解析时对用户进行身份验证

我对云代码和安卓操作系统很满意,非常感谢能给我一些帮助/指导,让我朝着正确的方向前进。我从来没有使用过OAuth2,也没有使用过电子邮件和社交登录的解析登录,我认为我不应该使用它。但如果我错了,请告诉我

谢谢

更新:我已经阅读了很多关于解析问题的问题,并且已经多次检查了been方法(因为我一直认为在阅读之后我遗漏了一些东西)

我有:
1.已实施Google+登录。
2.使用GoogltAuthUtil获取访问令牌。

坚持:
3.用户使用Google+登录后,如何链接当前登录的解析用户

4.如果Google+是用户的第一个(也是唯一一个)登录选择,如何创建新的解析用户

关于Parse的问题有一个问题。就在这里,我敢肯定它回答了你的问题

它链接到parse博客,在这方面有一些解决方法

它说您可以将任何登录添加到ParseUser中。你会这样做:

Parse.User.become("session-token-here").then(function (user) {
// The current user is now set to user.
}, function (error) {
// The token could not be validated.
});
您应该查看的另一个站点:

最后一个是官方的,有一个示例代码

试试这个

ParseUser.becomeInBackground("session-token-here", new LogInCallback() {
           public void done(ParseUser user, ParseException e) {
                 if (user != null) {
                 // The current user is now set to user.
                 } else {
                  // The token could not be validated.
                 }
}

})为此,我使用了以下代码

  ParseUser.becomeInBackground(ParseUser.getCurrentUser().getSessionToken(), new LogInCallback() {
                    @Override
                    public void done(ParseUser parseUser, ParseException e) {
                        if (parseUser != null) {
                            parseUser.setUsername(userEmail);
//firstName and lastName I am getting from Person class of google plus api
                            parseUser.put("FirstName", firstName);
                            parseUser.put("LastName", lastName);

                            parseUser.saveInBackground();

                            ParseUtils.verifyParseConfiguration(context);
                            ParseUtils.subscribeWithUsername(strEmail);
                            Intent successIntent = new Intent(context, OurServicesActivity.class);
                            startActivity(successIntent);
                            overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
                            finish();
                        } else {
                            Log.e(TAG, e.getMessage());
                            Utilities.showToast(context, "Something occurred");
                        }
                    }
                });

让我知道它是否有用,或者您是否使用了其他东西。

这似乎与

以下是我在这方面的答案:


1.新用户 流程如下:

{
 "iss": "https://accounts.google.com",
 "sub": "110169484474386276334",
 "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "email": "billd1600@gmail.com",
 "at_hash": "X_B3Z3Fi4udZ2mf75RWo3w",
 "email_verified": "true",
 "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "iat": "1433978353",
 "exp": "1433981953"
}
  • 用户授权并获取令牌
  • 我们使用随机密码创建一个新用户
  • 您可以在返回电子邮件的
    newchooseAccountContent()
    方法中使用以下代码创建ParseUser

    ParseUser user = new ParseUser();
    user.setUsername(mEmail);
    user.setPassword(randomPassword);
    user.setEmail(mEmail);
    user.signUpInBackground(new SignUpCallback() {
      public void done(ParseException e) {
        if (e == null) {
          // Hooray! Let them use the app now.
        } else {
          // Sign up didn't succeed. Look at the ParseException
          // to figure out what went wrong
        }
      }
    });
    
    2.返回用户 正如我在互联网上研究的那样,这是大多数人陷入困境的地方。流程如下:

    {
     "iss": "https://accounts.google.com",
     "sub": "110169484474386276334",
     "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
     "email": "billd1600@gmail.com",
     "at_hash": "X_B3Z3Fi4udZ2mf75RWo3w",
     "email_verified": "true",
     "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
     "iat": "1433978353",
     "exp": "1433981953"
    }
    
  • 用户授权,应用程序获得令牌
  • 我们将此令牌传递给云代码进行验证。我们需要检查该代币是否由谷歌签署,以及是否是为我们所用((2013))
  • 验证令牌是否有效后,可以使用Parse.Cloud.useMasterKey()方法在云代码中查询用户,并使用getSessionToken()方法在查询结果上返回会话密钥
  • 通过调用
    becomeInBackground
    方法,使用会话密钥在磁盘上保存登录状态
  • 要验证令牌,可以将
    Parse.Cloud.httprequest
    发送到此端点:
    https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=
    。这是在中说明的。您将收到以下数据:

    {
     "iss": "https://accounts.google.com",
     "sub": "110169484474386276334",
     "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
     "email": "billd1600@gmail.com",
     "at_hash": "X_B3Z3Fi4udZ2mf75RWo3w",
     "email_verified": "true",
     "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
     "iat": "1433978353",
     "exp": "1433981953"
    }
    
    需要比较的是“aud”、“azp”和“电子邮件”,它们被翻译为受众、授权方和电子邮件

    要查询云上当前用户代码

    var query = new Parse.Query(Parse.User);
    query.equalTo("email",mEmail);
    query.first({
      success: function(user) {
        // Use user..getSessionToken() to get a session token
      },
      error: function(user, error) {
        //
      },
      useMasterKey: true
    });
    

    注意:确保您具有以下范围,以便在检查云代码时显示电子邮件:https://www.googleapis.com/auth/plus.profile.emails.read

    我浏览了解析问题中提到的链接,这是一篇相当模糊的博客文章,没有回答很多问题。你的第二个链接是关于网络应用的,但这个问题是关于Android的。你好,你从哪里得到“会话令牌”?是Google+one还是Parse的会话令牌?如果是Parse的,如何获得一个?你能用那种简单的方法回答吗?谢谢你advance@SaiJithendra你好这是谷歌+一。方法将把这个令牌链接到您的用户。虽然只有在服务器端登录用户时,它才会起作用。否则,您应该先登录用户,然后将令牌传递给服务器。我不会建议任何人使用硬编码密码,特别是客户端代码。我的帖子是否回答了您要找的问题?它是否帮助您创建解析用户?这是一个示例代码,我采用了不同的方法。在客户端上登录Google+,然后在云代码中解析,然后使用用户的会话令牌在客户端上成为。但是谢谢你的回答。你好,它帮助我理解了很多。我有一个问题,“我的通行证”的意思是,你怎么拿到的?您是否生成随机密码并将其存储在Parse上?如果是这样,如果用户从设备注销并登录到其他设备,您如何再次使用它?如何使用随机密码处理这些情况。注意:我的应用程序不想要求用户输入密码。提前感谢您好,您从哪里获得“会话令牌”?是Google+one还是Parse的会话令牌?如果是Parse的,如何获得一个?你能用那种简单的方法回答吗?提前感谢每当你在parse中创建一个新项目时,就会生成一个令牌。我知道google正在更新它的身份验证服务。所以,检查一下,解析中是否支持新的