[英]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.