使用服务器和移动应用

时间:2016-01-24 09:53:40

标签: android facebook oauth-2.0

我想用Facebook为我的服务实现登录(可以通过网络和本机安卓访问)

这就是我为网络部分所做的事情:

  1. 用户点击登录Facebook
  2. 它会定向到fb的页面,在那里检查凭据
  3. 它会重定向到我的网络服务上的页面,其中包含详细信息
  4. 然后,我自己的服务为其使用创建一个访问令牌,并将其作为json输出发送给客户端。
  5. 我想知道如何使用android实现这一目标。如果我在我的应用程序中使用Web视图,用户将必须登录到Facebook(我想避免)。相反,如果他使用Facebook应用程序登录Facebook,则应直接转到权限。

    如果我使用原生sdk for android,我不知道如何执行重定向到我自己的服务器并为我自己的网站生成访问令牌。

2 个答案:

答案 0 :(得分:0)

如果您想为您的网站授予用户访问令牌(通过仪表板 - >选择一个平台),那么您应该在您的网站上,在您的应用程序设置页面下(在您的Facebook开发者帐户下)实施Facebook提供的登录过程页面)启用您的网络应用程序。

快速入门:https://developers.facebook.com/docs/facebook-login/web

答案 1 :(得分:0)

你可以在原生机器人中做同样的事情。你在网上做过。

只需Facebook Authentication for android

我的情况与您使用我自己的网络服务成功实施的情况相同。

 private void doFacebookLogin(View v) {
        final View snakeBarView = v;
        callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email", "public_profile"));
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {

                Snackbar.make(snakeBarView, "Facebook Login Success", Snackbar.LENGTH_SHORT).show();
                GraphRequest.newMeRequest(
                        loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject json, GraphResponse response) {
                                if (response.getError() != null) {
                                    // handle error
                                    System.out.println("ERROR");
                                } else {
                                    System.out.println("Success");
                                    try {
                                        String jsonresult = String.valueOf(json);
                                        String emailId, id, name, profilePicture;
                                        if (json.isNull("id"))
                                            id = "";
                                        else
                                            id = json.getString("id");
                                        if (json.isNull("email"))
                                            emailId = id + "@facebook.com";
                                        else
                                            emailId = json.getString("email");

                                        if (json.isNull("name"))
                                            name = "";
                                        else
                                            name = json.getString("name");

                                        profilePicture = getString(R.string.fbProfilePicUrl) + id + "/picture?type=large";
                                        Registration registration = new Registration();
                                        registration.Name = name;
                                        registration.EmailId = emailId.toUpperCase();
                                        registration.ProfilePicture = profilePicture;
                                        registration.PhoneNumber = "";
                                        registration.Area = "";
                                        registration.Password = "";
                                        ghilliHelper.signupOrLoginPreStep(registration);
                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }

                        }).executeAsync();
            }

            @Override
            public void onCancel() {
                Snackbar.make(snakeBarView, "Facebook Login Cancelled", Snackbar.LENGTH_SHORT).show();
            }

            @Override
            public void onError(FacebookException e) {
                Snackbar.make(snakeBarView, "Facebook Login Error", Snackbar.LENGTH_SHORT).show();
            }
        });
    }

成功登录Facebook后,获取电子邮件ID并从应用程序中调用您的服务。

关于您的服务。

检查电子邮件ID是否存在

如果电子邮件ID不存在,请创建一个帐户并返回JSON作为成功登录

否则返回JSON作为成功登录。

网络服务

 [HttpPost]
        public async Task<string> SocialMediaLogin(Registration reg)
        {
            LoginResult logResult = new LoginResult();

            try
            {
                CloudTableClient tableclient = _storageAccount.CreateCloudTableClient();
                CloudTable table = tableclient.GetTableReference(_registrationTable);

                if (!table.Exists())
                {
                    logResult.Failure = true;
                }
                else
                {
                    TableQuery<Registration> query = new TableQuery<Registration>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, reg.EmailId.ToUpper()));
                    Registration reg_obj2 = new Registration();
                    IEnumerable<Registration> ienum_obj = table.ExecuteQuery(query);
                    if (ienum_obj.Count() != 0)
                    {
                        foreach (var a in ienum_obj)
                        {
                            logResult.Success = true;
                            logResult.UserDetails = a;
                        }

                    }
                    else
                    {
                        RegistrationResult signupResult = await SocialMediaSignup(reg); //Create an Account
                        if (signupResult.Success)
                        {
                            logResult.Success = true;
                            logResult.UserDetails = signupResult.UserDetails;
                        }
                        else if (signupResult.Failure)
                        {
                            logResult.Failure = true;
                        }
                    }
                }
            }
            catch (Exception)
            {
                logResult.Failure = true;
            }
            var resultString = JsonConvert.SerializeObject(logResult);
            return resultString;
        }