如果使用facebook Lite,使用facebook登录会使应用程序崩溃



在我的应用程序中,我使用facebookSDK来执行登录和注册方法。

当我在设备上使用普通的FaceBook应用程序或使用普通的网络浏览器时,这是可以的。

但是,当我的设备上有FacebookLite,而我没有通用的FaceBook应用程序时,当我尝试使用facebooksdk登录/注册时,该应用程序会在没有任何日志/消息的情况下关闭,所以我不知道为什么会发生这个问题。

我该如何解决这个问题?-我可以跳过FaceBook Lite应用程序并使用浏览器吗?

更新:

这是一个视频,如果我有正常的脸书应用程序,没有问题。

这是一个视频,如果我的设备上有人脸书应用程序lite,它会崩溃。

我的代码片段:

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());
}
});

你知道FB的座右铭——快速行动,打破一切。SDK与本机应用程序的集成有时会中断。

您可以强制Facebook SDK使用web登录:

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

嗯,我在一些LOLIPOP设备中出现了有线行为,即使在打开Facebook本机应用程序之前,应用程序也会关闭,而在其他设备中,应用程序仅使用Facebook-lite关闭。

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

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

删除该属性后,现在工作正常!

下面的代码适用于facebookfine。如果在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>

相关内容

最新更新