[英]Login with Facebook with Dialog in Android
如何使用 facebook 实现此登录? 我遵循了本教程https://www.androidlearning.in/facebook-login-for-android-app/但它引发了一个完整的活动(传统方式)。
我安装了 Facebook 应用程序
在 Memrise、Bandlab 等应用程序中显示 Dialog 但在我的应用程序中没有
我也试试
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList([...]);
但不工作...
我想:
我的应用 给我看:
30 分钟前我遇到了与您相同的问题,但我使用了 Facebook 的自定义按钮和 onCreate 中的以下代码来调用 Facebook 登录:
loginButton = (CircularProgressButton) findViewById(R.id.btn_fb);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "user_friends"));
}
});
//Register a callback
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(final LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object,GraphResponse response) {
try {
nome = object.getString("name");
email = object.getString("email");
String idfb = loginResult.getAccessToken().getUserId();
logarFb(idfb, nome, email);
} catch(JSONException ex) {
ex.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender, birthday");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
//cancelled
}
@Override
public void onError(FacebookException exception) {
//error
}
});
我将其更改为 Facebook 登录按钮:
<com.facebook.login.widget.LoginButton
android:id="@+id/btn_fb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:layout_marginBottom="30dp" />
现在这就是我的代码现在的样子,更清晰:
private LoginButton loginButton;
private CallbackManager callbackManager;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
callbackManager = CallbackManager.Factory.create();
loginButton = findViewById(R.id.btn_fb);
loginButton.setReadPermissions("email");
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
getUserDetails(loginResult);
}
@Override
public void onCancel() {
funcoes.aviso(MainActivity.this,"Você cancelou o login",R.color.red500,3000, R.drawable.ic_triste);
}
@Override
public void onError(FacebookException exception) {
funcoes.dialogoMsg(MainActivity.this,"Há algo de errado com o login do Facebook :/");
}
});
}
protected void getUserDetails(final LoginResult loginResult) {
GraphRequest data_request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted( JSONObject object, GraphResponse response) {
try {
nome = object.getString("name");
email = object.getString("email");
String idfb = loginResult.getAccessToken().getUserId();
logarFb(idfb, nome, email);
} catch(JSONException ex) {
ex.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender, birthday");
data_request.setParameters(parameters);
data_request.executeAsync();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
如果您安装了 Facebook 应用程序,那么将 Facebook 登录作为对话框而不是全屏活动就足够了。
如果您愿意,请遵循本指南 如果您忘记了其他一些设置: https ://www.studytutorial.in/android-facebook-integration-and-login-tutorial
仅当您的手机上安装了 Facebook 应用程序时才会出现该对话框,否则您将获得 Web 视图。 尝试安装该应用程序,然后登录。
如果您在权限中定义,则需要删除权限“user_birthday”。
LoginManager.getInstance().logInWithReadPermissions(context,Arrays.asList("public_profile","email"));
由于“App Review”需要一些权限
我已经更改了我的权限集
现有代码
LoginManager.getInstance().logInWithReadPermissions(activity, listOf("user_photos", "email", "public_profile"))
工作代码
LoginManager.getInstance().logInWithReadPermissions(activity, listOf("email"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.