Facebook登录Android SDK无法正常工作。

10

我已经将Facebook登录集成到我的安卓应用程序中,以前它能够正常工作。但现在无法使用了。当我调试应用程序时,我发现现在LoginManager Callback出现异常。我不知道这是什么,也不知道如何解决。

异常信息:"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)。 感谢所有建议。谢谢!


https://github.com/firebase/FirebaseUI-Android/issues/649 这是来自 Facebook 方面的问题。请检查一下。 - Rameshbabu
还可以查看这个解决方案 https://dev59.com/G1gR5IYBdhLWcg3wBZW3#41895234 - Rameshbabu
2个回答

22

在Facebook开发者控制台中打开您注册的应用程序。

这种方法将使应用程序对所有测试设备公开可用:

  1. 选择“应用审核”选项
  2. 使社交广告公开可用? 将其启用为“是”

或者

这种方法将让您在选定的设备上测试应用程序:

  1. 选择“角色”选项
  2. 为应用程序添加“测试人员”

1
当您的应用程序中没有评估用户时,此内容会追加。

enter image description here

添加测试用户,当您尝试使用测试用户登录时,应用程序会无故障地拒绝。

这里是Google Groups的答案

但我认为您应该在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);
    }

        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接