Войти с facebook приложение, если с помощью FaceBook Lite в
в моем приложении я использую facebook SDK для выполнения методов входа и регистрации.
Это нормально, когда у меня есть общие FaceBook приложение или использование обычного веб-браузера на моем устройстве.
но когда у меня есть FaceBook Lite на моем устройстве, и у меня нет вообще FaceBook приложение, когда я пытаюсь войти / зарегистрироваться с помощью facebook-sdk, приложение просто закрывается без журнала / сообщений, поэтому я не могу знать, почему это проблема случилась.
Как я могу исправить эту проблему? - Можно я пропущу?--2-- > FaceBook Lite app и использовать браузер вместо этого?
обновление:
вот видео, Если у меня есть обычное приложение facebook, никаких проблем.
вот видео, Если у меня есть приложение face book 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());
}
});
4 ответов
вы знаете девиз FB-двигайтесь быстро и ломайте вещи. Интеграция SDK с родными приложениями-одна из вещей, которая иногда ломается.
вы можете заставить Facebook SDK использовать web для входа:
LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_ONLY)
попробуйте следующий код, если он работает
private CallbackManager callbackManager;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_in);
//TODO on click of fb custom button call handleFBLogin()
callbackManager = CallbackManager.Factory.create();
}
private void setFacebookData(final LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
// Application code
try {
Log.i("Response", response.toString());
String email = response.getJSONObject().getString("email");
String firstName = response.getJSONObject().getString("first_name");
String lastName = response.getJSONObject().getString("last_name");
String profileURL = "";
if (Profile.getCurrentProfile() != null) {
profileURL = ImageRequest.getProfilePictureUri(Profile.getCurrentProfile().getId(), 400, 400).toString();
}
//TODO put your code here
} catch (JSONException e) {
Toast.makeText(ActivitySignIn.this, R.string.error_occurred_try_again, Toast.LENGTH_SHORT).show();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,email,first_name,last_name");
request.setParameters(parameters);
request.executeAsync();
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
}
private void handleFBLogin() {
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
if (isLoggedIn && Store.isUserExists(ActivitySignIn.this)) {
goToHome();
return;
}
LoginManager.getInstance().logInWithReadPermissions(ActivitySignIn.this, Arrays.asList("public_profile", "email"));
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(final LoginResult loginResult) {
runOnUiThread(new Runnable() {
@Override
public void run() {
setFacebookData(loginResult);
}
});
}
@Override
public void onCancel() {
Toast.makeText(ActivitySignIn.this, "CANCELED", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(ActivitySignIn.this, "ERROR" + exception.toString(), Toast.LENGTH_SHORT).show();
}
});
}
ниже кода, работающего с facebook fine. если он не найдет приложение facebook в devide, он откроет 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>
Ну, я получал проводное поведение в некоторых ЛОЛИПОП устройство приложение закрывается еще до открытия Facebook родное приложение, и в других устройствах приложение близко только с facebook lite, однако.
я использовал noHistory=true
атрибут для действия, поэтому действие удаляется из стека после появления диалога из-за вызова onStop()
.
<activity
android:name=".AuthActivity"
android:screenOrientation="portrait"
android:noHistory="true"
android:windowSoftInputMode="stateHidden" />
после удаления этого атрибута, теперь он работает отлично!