web-dev-qa-db-ja.com

Facebookでログインすると、FaceBook Liteを使用するとアプリがクラッシュする

私のアプリでは、facebook[〜#〜] sdk [〜#〜]を使用してログインを実行し、メソッドを登録しています。

一般的なFaceBookアプリケーションを使用している場合、またはデバイスで通常のWebブラウザーを使用している場合は問題ありません。

しかし、デバイスにFaceBook Liteがあり、一般的なFaceBookアプリケーション、facebook-sdkを使用してログイン/サインアップしようとすると、ログ/メッセージなしでアプリが閉じるため、この問題が発生した理由がわかりません。

どうすればその問題を修正できますか? -FaceBook Liteアプリをスキップして、代わりにブラウザーを使用できますか?

更新:

通常のFacebookアプリを使用している場合のビデオです。問題ありません。

ここに、デバイスにフェイスブックアプリライトがあり、クラッシュする場合のビデオを示します。

私のコードスニペット:

LoginManager.getInstance()
                    .logInWithReadPermissions(getActivity(), Arrays.asList("public_profile"));

            LoginManager.getInstance()
                    .registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                        @Override
                        public void onSuccess(final LoginResult loginResult) {
                            Log.i("MainActivity", "@@@onSuccess");
                            GraphRequest request = GraphRequest
                                    .newMeRequest(loginResult.getAccessToken(),
                                            (object, response) -> {
                                                Log.i("MainActivity",
                                                        "@@@response: " + response.toString());

                                                try {

                                                    ///
                                                } catch (JSONException e) {
                                                    ////

                                                }
                                            });

                        }

                        @Override
                        public void onCancel() {
                            Log.i("MainActivity", "@@@onCancel");
                        }

                        @Override
                        public void onError(FacebookException error) {
                            Log.i("MainActivity", "@@@onError: " + error.getMessage());
                        }

                    });
10
user6490462

まあ、私はいくつかの[〜#〜] lolipop [〜#〜]デバイスでワイヤード動作を取得していましたFacebookネイティブアプリケーションを開く前にアプリを閉じ、他のデバイスでただし、アプリはfacebook liteのみで終了します。

アクティビティで_noHistory=true_属性を使用していたので、onStop()の呼び出しによりダイアログが表示されると、アクティビティはスタックから削除されました。

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

その属性を削除した後、うまくいきました!

0
user6490462

あなたはFBのモットーを知っています-速く動き、物を壊します。 SDKのネイティブアプリとの統合は、時々壊れる問題の1つです。

Facebook SDKにログインにwebを使用させることができます:

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

以下のコードは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>
0
amit