你可以在原生Android你在网上也做了相同的。
只是Facebook Authentication for 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作为登录成功。
Web服务
[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;
}
这如何回答我的问题? –
因为为什么要使用web视图获取用户登录到自己的Facebook帐户,FB SDK为您提供了原生的Android登录对话框(您的用户是否通过FB应用程序登录或没有),并在FB应用程序的情况下,不可用,FB做了一个回退,将为您的用户提供一个对话框,其中有一个webview可以登录...所以,根据你上面提到的(你知道的),唯一的逻辑需求是你想让你的用户登录你的网站和你的原生Android应用程序,这就是为什么我提供给你的原因在您的答案的这一部分执行登录网络 –