android - 没有登录按钮的 Facebook 身份验证

标签 android facebook facebook-android-sdk

我学习了一些 Facebook API 3.0 教程,包括登录/注销和发布到 Feed 示例。所以登录是这样工作的:

  1. 应用打开,显示一个显示登录按钮的 fragment
  2. 用户点击登录,身份验证通过引用的 FacebookSDK 库 (com.facebook.widget.LoginActivity) 和使用 session 提供的代码完成。
  3. 用户被重定向到下一个屏幕

我不想让用户以这种方式登录。我希望他们在没有任何登录/注册的情况下使用我的应用程序,然后如果他们点击 facebook 特定功能,例如在 Facebook 上分享一条笔记,然后应用程序应该询问他们是否让 Facebook 使用他们的应用程序或其他什么,你知道通常的东西。如果没有这个,我会在 publishFeedDialog() 函数中得到一个空指针,因为 session 为空,因为没有进行登录。

所以我的问题是,我怎样才能忽略带有登录按钮的 SplashFragment,所以当用户单击我的应用程序中的 Facebook 功能时,不会显示带有登录按钮的新屏幕,而只会显示默认的 Facebook 身份验证窗口用户习惯了吗?

最佳答案

@erdomester, @sromku

Facebook 推出新的 sdk 版本 4.x,其中 Session 已弃用,

来自facebook的登录新概念

LoginManager and AccessToken - These new classes perform Facebook Login

所以,现在您可以在没有登录按钮的情况下访问 Facebook 身份验证

layout.xml

    <Button
            android:id="@+id/btn_fb_login"
            .../>

MainActivity.java

private CallbackManager mCallbackManager;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FacebookSdk.sdkInitialize(this.getApplicationContext());

    mCallbackManager = CallbackManager.Factory.create();

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

                }

                @Override
                public void onCancel() {
                    Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onError(FacebookException exception) {
                    Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
                }
            });

    setContentView(R.layout.activity_main);

    Button btn_fb_login = (Button)findViewById(R.id.btn_fb_login);

    btn_fb_login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
              LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
        }
    });

}

编辑

如果您不添加以下内容,它将无法正常工作(@Daniel Zolnai 在下面的评论中正确指出):

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(mCallbackManager.onActivityResult(requestCode, resultCode, data)) {
        return;
    }
}

关于android - 没有登录按钮的 Facebook 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18135885/

相关文章:

java - 如何为膨胀 View 中的按钮添加 OnclickListener()?

javascript - Facebook opengraph - 自定义对象和操作 - 用户名 :action 需要至少存在一个故事

ios - 通过适用于 iOS 的 FB SDK 将视频分享到 facebook

ios - Facebook 无需登录即可获取自定义对象的点赞数

android - 从任务管理器中删除应用程序时调用哪个函数

Android 使用 JSONArray 成员打包一个对象

android - 设置从 Facebook 登录获取用户电子邮件 ID 的权限

android - Android Studio 中的 Facebook sdk 导致找不到资源错误

android - 点赞回调

java - 获取 Android 应用程序中每个联系人的生日