[英]Implementing oauth2 login with server and mobile app
我想為我的服務實現使用Facebook登錄(可以通過網絡以及本機android訪問)
這是我在Web部件上所做的:
我想知道如何使用android來實現。 如果我在應用程序內使用網絡視圖,則用戶必須登錄到Facebook(我希望避免這樣做)。 相反,如果他使用Facebook應用程序登錄Facebook,則應直接轉到權限。
如果我將本地sdk用於android,則不知道如何執行重定向到我自己的服務器並為自己的網站生成訪問令牌。
如果要授予用戶訪問網站的令牌(通過儀表板->選擇平台),則應在網站中實施Facebook提供的登錄過程,並在應用程序設置頁(位於Facebook開發者帳戶頁下)下啟用網絡應用程序。
快速入門: https : //developers.facebook.com/docs/facebook-login/web
您可以在本機android中完成與在網絡中相同的操作。
通過使用自己的Web服務,我已經成功實現了與您相同的方案。
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.