如果使用FaceBook Lite,使用Facebook登录会导致应用崩溃

时间:2018-07-20 19:14:42

标签: android facebook facebook-login android-facebook

在我的应用中,我正在使用Facebook SDK 来执行登录和注册方法。

当我有通用的 FaceBook 应用程序或在设备上使用普通的网络浏览器时,没关系。

但是,当我在设备上装有 FaceBook Lite 并且没有通用的 FaceBook 应用程序时,当我尝试使用facebook-sdk登录/注册时该应用程序刚刚关闭,没有任何日志/消息,所以我不知道为什么会发生此问题。

如何解决该问题? -我可以跳过 FaceBook Lite 应用并改用浏览器吗?

更新:

Here is a video if I have normal facebook app, no problems.

Here is a video if I have the face book app lite on my device, which make it crash.

我的代码段:

(34 * 100, 3)

3 个答案:

答案 0 :(得分:5)

您知道FB的座右铭-快速行动并打破困境。将SDK与本机应用程序集成是有时会中断的事情之一。

您可以强制Facebook SDK使用Web进行登录:

LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_ONLY)

答案 1 :(得分:0)

以下与facebook合作的代码很好。 如果在devide中找不到任何Facebook应用,它将打开webView并获取数据 在onCreate()或onStart()中调用以下方法:

private void facebookCallback() {
    callbackManager = CallbackManager.Factory.create();

    btnFacebook.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {

            progressDialog.setMessage("Connection Facebook...");
            progressDialog.show();

            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) {
                    Log.i("LoginActivity", response.toString());
                    try {
                        System.out.println("----------------------"+object.get("email").toString());
                        verifySocialAccount(object.get("email").toString());
                    } catch (JSONException e) {
                        LoginManager.getInstance().logOut();

                        progressDialog.dismiss();
                        Toast.makeText(LoginActivity.this,"Can not find email Address.",Toast.LENGTH_SHORT).show();
                    }
                }
            });
            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 error) {
            System.out.println("---------onError");
            Log.v("LoginActivity", error.getCause().toString());
        }
    });
}

活动代码XML:

<LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_marginLeft="20dp"
                    android:layout_marginRight="20dp"
                    android:layout_marginTop="10dp"
                    android:layout_weight="1"
                    android:layout_marginBottom="10dp"
                    android:orientation="horizontal"
                    android:weightSum="6">


                    <com.facebook.login.widget.LoginButton
                        xmlns:facebook="http://schemas.android.com/apk/res-auto"
                        android:id="@+id/btnFacebook"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:background="@color/facebookBlue"
                        android:paddingTop="15dp"
                        android:paddingLeft="15dp"
                        facebook:com_facebook_login_text="SIGN IN WITH FACEBOOK"
                        android:paddingBottom="15dp"
                        android:textColor="@color/white"
                        android:textSize="15dp" />
                </LinearLayout>

答案 2 :(得分:0)

好吧,我什至在打开 Facebook 本机应用程序之前就关闭了某些 LOLIPOP 设备中的有线行为,而在其他设备中,该应用程序仅使用facebook lite关闭,但是。

我正在使用活动上的noHistory=true属性,因此一旦对话框由于调用onStop()而出现,活动便从堆栈中删除。

<activity
        android:name=".AuthActivity"
        android:screenOrientation="portrait"
        android:noHistory="true"
        android:windowSoftInputMode="stateHidden" />

删除该属性后,现在一切正常!