简体   繁体   English

没有安装Facebook应用的Facebook登录片段

[英]Facebook login in fragment without Facebook app installed

Edit: Images of issue, http://imgur.com/a/N4pRb 编辑:问题图片, http//imgur.com/a/N4pRb

When logging in using Facebook I get the pop-up prompting the user to log-in, which takes me to a page "Confirm Login" that says my app has already been authorized. 使用Facebook登录时,会弹出提示用户登录的弹出窗口,该页面带我到“确认登录”页面,该页面显示我的应用程序已被授权。 I click ok and it takes me back to the intial login popup. 我单击确定,然后将我带回到初始登录弹出窗口。 When I click the "x" in the top left my onSuccess() code runs. 当我单击左上角的“ x”时,我的onSuccess()代码将运行。 When the login completes, the onSuccess() method should handle the login and take the user to a different activity. 登录完成后,onSuccess()方法应处理登录并将用户带到其他活动。 Where do I go from here? 我从这里去哪里?

MainActivity, 主要活动,

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.content_main);
    fragment.onActivityResult(requestCode, resultCode, data);
}

LoginFragment, LoginFragment,

public class LoginFragment extends MvpFragment<LoginView, LoginPresenter> implements LoginView, View.OnClickListener {

private EditText _userName;
private EditText _password;
private Button _loginWithFacebook;
private CallbackManager _callbackManager;
private static final String TAG = LoginFragment.class.getSimpleName();


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_login, container, false);

    view.findViewById(R.id.login_btn).setOnClickListener(this);
    view.findViewById(R.id.login_forgot_password).setOnClickListener(this);
    view.findViewById(R.id.login_signup).setOnClickListener(this);
    view.findViewById(R.id.login_skip).setOnClickListener(this);

    _userName = (EditText) view.findViewById(R.id.login_username);
    _password = (EditText) view.findViewById(R.id.login_password);

    _loginWithFacebook = (Button) view.findViewById(R.id.facebook_login_button);
    _loginWithFacebook.setOnClickListener(this);

    LoginManager.getInstance().logOut();

    return view;
}

@NonNull
@Override
public LoginPresenter createPresenter() {
    return new LoginPresenterImpl((LoginRouter) getActivity(), new PreferencesManager(getContext()));
}

@Override
public void authenticationError() {
    AlertDialogFragment.newInstance(R.string.login_authentication_error, false).show(getChildFragmentManager(), null);
}

@Override
public void onShowEmptyFieldError() {
    AlertDialogFragment.newInstance(R.string.login_empty_field_error, false).show(getChildFragmentManager(), null);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.facebook_login_button:
            //presenter.onFacebookLoginClick();
            facebookLogIn();
            break;
        case R.id.login_btn:
            doLogin();
            break;
        case R.id.login_forgot_password:
            presenter.onForgotPasswordClick();
            break;
        case R.id.login_signup:
            presenter.onSignUpClick();
            break;
        case R.id.login_skip:
            presenter.onSkipForNowClick();
            break;
    }
}


private void doLogin() {
    presenter.onLocalLoginClick(_userName.getText().toString().trim(),
            _password.getText().toString().trim());
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (_callbackManager != null) {
        _callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}


@Override
public void facebookLogIn() {
    _callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().registerCallback(_callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    Log.d(TAG, "Successful Login");

                    GraphRequestBatch batch = new GraphRequestBatch(
                            GraphRequest.newMeRequest(
                                    loginResult.getAccessToken(),
                                    new GraphRequest.GraphJSONObjectCallback() {
                                        @Override
                                        public void onCompleted(
                                                JSONObject jsonObject,
                                                GraphResponse response) {
                                            // Application code for user

                                            try {
                                                Log.d(TAG, jsonObject.toString());
                                                String s = jsonObject.getString("name");

                                                presenter.checkFacebookUserExists(s);

                                            } catch (Exception e) {
                                                Log.d(TAG, "Login Unsuccesful");
                                            }
                                        }
                                    })
                    );

                    batch.executeAsync();

                }

                @Override
                public void onCancel() {
                    // do nothing
                }

                @Override
                public void onError(FacebookException exception) {
                    Log.d(TAG, exception.getMessage());

                    //showNetworkError();
                }
            });

    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"));
}
}

Manifest, 表现,

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.some.placeholder">

<uses-permission android:name="android.permission.INTERNET" />
<application
    android:name=".SomeApplication"
    android:allowBackup="true"
    android:hardwareAccelerated="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".SplashActivity"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".MainActivity"
        android:screenOrientation="sensorPortrait">
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".login.LoginActivity"
        android:windowSoftInputMode="stateAlwaysHidden" />
    <activity android:name=".FireworksAnimationActivity" />

    <service
        android:name=".activecrumble.crumblefood.BackgroundStepTracker"
        android:exported="false"
        android:stopWithTask="true">
        <intent-filter>
            <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE" />
        </intent-filter>
    </service>
    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />
</application>

通过在我的布局中使用常规Button而不是Facebook LoginButton来解决它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM