Android 从活动登录Facebook失败?
我在活动中有一个自定义按钮,用于允许用户通过Facebook登录。我的点击代码如下所示:Android 从活动登录Facebook失败?,android,facebook,Android,Facebook,我在活动中有一个自定义按钮,用于允许用户通过Facebook登录。我的点击代码如下所示: CallbackManager callback = CallbackManager.Factory.create(); List<String> permissions = Arrays.asList("email","public_profile"); LoginManager.getInstance().logInWithReadPermissions(this,p
CallbackManager callback = CallbackManager.Factory.create();
List<String> permissions = Arrays.asList("email","public_profile");
LoginManager.getInstance().logInWithReadPermissions(this,permissions);
LoginManager.getInstance().registerCallback(callback, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
setUserLoggedIn(PrefUtils.Values.LOG_IN_METHOD_FACEBOOK);
}
@Override
public void onCancel() {
// todo: something
}
@Override
public void onError(FacebookException error) {
Logger.d("TAG",error.getMessage());
}
});
CallbackManager callback=CallbackManager.Factory.create();
列表权限=Arrays.asList(“电子邮件”、“公共配置文件”);
LoginManager.getInstance().logInWithReadPermissions(此,权限);
LoginManager.getInstance().registerCallback(回调,new FacebookCallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
setUserLoggedIn(PrefUtils.Values.LOG\u IN\u METHOD\u FACEBOOK);
}
@凌驾
公开作废{
//托多:什么
}
@凌驾
public void onError(facebook异常错误){
Logger.d(“TAG”,error.getMessage());
}
});
但是,FB登录对话框不会显示。相反,我最终会出现一个错误对话框,要求我登录。我假设这将启动显示用户名和密码编辑文本的对话框
如何获得该登录对话框?将此按钮置于click onClick()方法上
将此按钮置于click onClick()方法上
将回调设置为全局变量,即在
FacebookSdk.sdkInitialize(getApplicationContext());
还要重写活动的OnActivityForResult方法并添加callback.onActivityResult(请求代码、结果代码、数据),如下所示
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callback.onActivityResult(requestCode, resultCode, data);
}
希望这有帮助。如果它不让我知道。将回调作为全局变量,即在您的
FacebookSdk.sdkInitialize(getApplicationContext());
还要重写活动的OnActivityForResult方法并添加callback.onActivityResult(请求代码、结果代码、数据),如下所示
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callback.onActivityResult(requestCode, resultCode, data);
}
希望这有帮助。如果没有通知我。请执行以下步骤
LoginManager.getInstance().logInWithReadPermissions(此,数组.asList(“电子邮件”、“用户照片”、“用户朋友”、“公共档案”、“用户生日”));
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
@凌驾
成功时公开作废(最终登录结果登录结果){
//应用程序代码
GraphRequest request=GraphRequest.NewMereRequest(loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback()){
@凌驾
未完成公共void(JSONObject json,GraphResponse响应){
Log.v(“FaceBook响应:,Response.toString());
}
});
Bundle参数=新Bundle();
参数.putString(“字段”、“id、姓名、姓、性别、生日、电子邮件、链接、图片”);
请求。设置参数(参数);
request.executeAsync();
}
@凌驾
公开作废{
Log.v(“物流活动”、“取消”);
}
@凌驾
public void onError(facebook异常){
Utils.showtoos(mActivity,“+”例外);
}
});
}
LoginManager.getInstance().logInWithReadPermissions(此,数组.asList(“电子邮件”、“用户照片”、“用户朋友”、“公共档案”、“用户生日”));
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
@凌驾
成功时公开作废(最终登录结果登录结果){
//应用程序代码
GraphRequest request=GraphRequest.NewMereRequest(loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback()){
@凌驾
未完成公共void(JSONObject json,GraphResponse响应){
Log.v(“FaceBook响应:,Response.toString());
}
});
Bundle参数=新Bundle();
参数.putString(“字段”、“id、姓名、姓、性别、生日、电子邮件、链接、图片”);
请求。设置参数(参数);
request.executeAsync();
}
@凌驾
公开作废{
Log.v(“物流活动”、“取消”);
}
@凌驾
public void onError(facebook异常){
Utils.showtoos(mActivity,“+”例外);
}
});
}
点击自定义fb按钮打开fb_登录对话框
fb_login_button.performClick();
点击自定义fb按钮打开fb_登录对话框
fb_login_button.performClick();
在这里我分享我的工作代码。希望它能帮助你 在应用程序类内部oncreate
FacebookSdk.sdkInitialize(getApplicationContext());
然后将facebook登录按钮放在布局中,并将其可见性设置为gone。
然后在自定义按钮的onclick中编写以下代码:
btnFBLogin.performClick(); //btnFBLogin is the Facebook LoginButton.
不要忘记在初始化LoginButton后添加此选项
btnLoginFB.setReadPermissions(Arrays.asList("email", "user_birthday"));
在oncreate中,在初始化callbackmanager后调用此函数
callbackManager = CallbackManager.Factory.create();
registerfb_callback();
下面是registerfb_callback()函数
/*Registering fb callback*/
private void registerfb_callback(){
btnLoginFB.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
showProgressDialog(); //Show dialog as your wish
String accessToken = loginResult.getAccessToken().getToken();
Log.i("accessToken", accessToken);
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
//Here I am logging out after completing the call.
LoginManager.getInstance().logOut();
progressDialog.hide();
try {
if(object != null) {
System.out.println("GraphResponse" + response.toString());
System.out.println("JSONObjectResponse" + object.toString());
Log.i("Activity", response.toString());
// Get facebook data from login
Bundle bFacebookData = getFacebookData(object);
}
}catch (Exception e){
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location"); // Parámetros que pedimos a facebook
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
System.out.println("onCancel");
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(Registration.this,"Network Error! Please try again!",Toast.LENGTH_LONG).show();
System.out.println("onError"+exception.toString());
}
});
}
最后是活性结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
希望它能帮上忙:)我在这里分享我的工作代码。希望它能帮到你 在应用程序类内部oncreate
FacebookSdk.sdkInitialize(getApplicationContext());
然后将facebook登录按钮放在布局中,并将其可见性设置为gone。
然后在自定义按钮的onclick中编写以下代码:
btnFBLogin.performClick(); //btnFBLogin is the Facebook LoginButton.
不要忘记在初始化LoginButton后添加此选项
btnLoginFB.setReadPermissions(Arrays.asList("email", "user_birthday"));
在oncreate中,在初始化callbackmanager后调用此函数
callbackManager = CallbackManager.Factory.create();
registerfb_callback();
下面是registerfb_callback()函数
/*Registering fb callback*/
private void registerfb_callback(){
btnLoginFB.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
showProgressDialog(); //Show dialog as your wish
String accessToken = loginResult.getAccessToken().getToken();
Log.i("accessToken", accessToken);
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
//Here I am logging out after completing the call.
LoginManager.getInstance().logOut();
progressDialog.hide();
try {
if(object != null) {
System.out.println("GraphResponse" + response.toString());
System.out.println("JSONObjectResponse" + object.toString());
Log.i("Activity", response.toString());
// Get facebook data from login
Bundle bFacebookData = getFacebookData(object);
}
}catch (Exception e){
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location"); // Parámetros que pedimos a facebook
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
System.out.println("onCancel");
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(Registration.this,"Network Error! Please try again!",Toast.LENGTH_LONG).show();
System.out.println("onError"+exception.toString());
}
});
}
最后是活性结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
希望它能有所帮助:)事实证明,有一点文档无法做到