使用 android sdk 的 Facebook 登录不工作
Facebook login with android sdk not working
我已经将 Facebook 登录集成到我的 android 应用程序中。它曾经有效。但现在它不起作用。当我调试应用程序时,我发现现在 LoginManager Callback 出现异常。我不知道这是什么,以及如何解决它。
这是我得到的例外
exception: "SERVER_ERROR [code] 1675030 [message]: Error performing
query. [extra]: Errors while executing operation
"ProxyAuthAppLoginStartQuery": At Query.proxy_auth_app_login_start:
Failed to resolve field."
代码
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_sign_in, null);
CardView mSignInFbButton = (CardView) view.findViewById(R.id.sign_up_fb);
mSignInFbButton.setOnClickListener(v ->{
if (AccessToken.getCurrentAccessToken() != null) {
LoginManager.getInstance().logOut();
}
LoginManager.getInstance().logInWithReadPermissions(SignInFragment.this, Arrays.asList("public_profile", "email"));
}
);
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager, mFBSignInCallback);
return view;
}
private FacebookCallback mFBSignInCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Beco.getApp().currentUser().signInFacebook();
}
@Override
public void onCancel() {
Log.d(TAG, "onCancel");
}
@Override
public void onError(FacebookException exception) {
Log.d(TAG, "onError");
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
在 LoginManager 回调 中,它将 public void onError(FacebookException exception)
所有建议表示赞赏。谢谢!
在 Facebook 开发者控制台中打开您注册的应用程序。
此方法将使应用public仅可用于所有测试设备:
- Select 'App Review' 选项
- 进行社交添加 public?启用它 'Yes'
或
此方法可让您在选定的设备上测试应用:
- Select 'Role' 选项
- 添加'Testers'申请
当您的应用中没有评估用户时,这会附加。
并添加测试用户,当您尝试使用测试用户登录时,应用程序不会失败。
但我认为您应该在 onCreate 中使用 callbackManager。
以下是 Facebook 登录集成的示例代码
public class SignInFragment extends Fragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
callbackManager = CallbackManager.Factory.create();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_sign_in, null);
LoginManager.getInstance().registerCallback(callbackManager, mFBSignInCallback);
List<String> permissionNeeds = Arrays.asList("public_profile", "email");
LoginManager.getInstance().logInWithReadPermissions(SignInFragment.this, permissionNeeds);
return view;
}
private FacebookCallback<LoginResult> mFBSignInCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(mContext, "in LoginResult on success", Toast.LENGTH_LONG).show();
@Override
public void onCancel() {
Log.d("VIVZ", "onCancel");
}
@Override
public void onError(FacebookException e) {
Log.d("VIVZ", "onError " + e.getMessage());
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
我已经将 Facebook 登录集成到我的 android 应用程序中。它曾经有效。但现在它不起作用。当我调试应用程序时,我发现现在 LoginManager Callback 出现异常。我不知道这是什么,以及如何解决它。 这是我得到的例外
exception: "SERVER_ERROR [code] 1675030 [message]: Error performing query. [extra]: Errors while executing operation "ProxyAuthAppLoginStartQuery": At Query.proxy_auth_app_login_start: Failed to resolve field."
代码
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_sign_in, null);
CardView mSignInFbButton = (CardView) view.findViewById(R.id.sign_up_fb);
mSignInFbButton.setOnClickListener(v ->{
if (AccessToken.getCurrentAccessToken() != null) {
LoginManager.getInstance().logOut();
}
LoginManager.getInstance().logInWithReadPermissions(SignInFragment.this, Arrays.asList("public_profile", "email"));
}
);
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager, mFBSignInCallback);
return view;
}
private FacebookCallback mFBSignInCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Beco.getApp().currentUser().signInFacebook();
}
@Override
public void onCancel() {
Log.d(TAG, "onCancel");
}
@Override
public void onError(FacebookException exception) {
Log.d(TAG, "onError");
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
在 LoginManager 回调 中,它将 public void onError(FacebookException exception)
所有建议表示赞赏。谢谢!
在 Facebook 开发者控制台中打开您注册的应用程序。
此方法将使应用public仅可用于所有测试设备:
- Select 'App Review' 选项
- 进行社交添加 public?启用它 'Yes'
或
此方法可让您在选定的设备上测试应用:
- Select 'Role' 选项
- 添加'Testers'申请
当您的应用中没有评估用户时,这会附加。
并添加测试用户,当您尝试使用测试用户登录时,应用程序不会失败。
但我认为您应该在 onCreate 中使用 callbackManager。 以下是 Facebook 登录集成的示例代码
public class SignInFragment extends Fragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
callbackManager = CallbackManager.Factory.create();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_sign_in, null);
LoginManager.getInstance().registerCallback(callbackManager, mFBSignInCallback);
List<String> permissionNeeds = Arrays.asList("public_profile", "email");
LoginManager.getInstance().logInWithReadPermissions(SignInFragment.this, permissionNeeds);
return view;
}
private FacebookCallback<LoginResult> mFBSignInCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(mContext, "in LoginResult on success", Toast.LENGTH_LONG).show();
@Override
public void onCancel() {
Log.d("VIVZ", "onCancel");
}
@Override
public void onError(FacebookException e) {
Log.d("VIVZ", "onError " + e.getMessage());
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}