在我的应用中,我正在使用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)
答案 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" />
删除该属性后,现在一切正常!