android - 自定义 Facebook 登录按钮 - Android

标签 android facebook facebook-sdk-4.0

我正在关注 Tutorial但到目前为止,我无法让它工作,虽然这是一年前的事情......

我正在使用 androidStudo 1.2.2 和 FacebookSDK 4。

我想使用自定义按钮简单地登录到 facebook,如下图所示:

Example

现在,在本教程的示例中,我遇到了 Session 变量的问题,它说它无法解决它,getActivity()

有人在 FacebookSDK4.0 上尝试过吗?

这是一个正确的方法还是可能有更多更新?

提前致谢!

最佳答案

第 1 步: 首先添加 FrameLayout 并使 facebook 按钮可见性="gone"并添加您的自定义按钮。 不要忘记将 xmlns:facebook="http://schemas.android.com/apk/res-auto" 放在您的主布局中。

<FrameLayout
        android:id="@+id/FrameLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <com.facebook.login.widget.LoginButton
            android:id="@+id/login_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone" />

        <Button
            android:id="@+id/fb"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#416BC1"
            android:onClick="onClick"
            android:text="FaceBook"
            android:textColor="#ffffff"
            android:textStyle="bold" />
    </FrameLayout>

第 2 步: 在变形布局之前在 onCreate 中初始化 FacebookSdk

FacebookSdk.sdkInitialize(this.getApplicationContext());

第 3 步:将此添加到您的 java 文件中。

callbackManager = CallbackManager.Factory.create();

fb = (Button) findViewById(R.id.fb);
loginButton = (LoginButton) findViewById(R.id.login_button);

List < String > permissionNeeds = Arrays.asList("user_photos", "email",
    "user_birthday", "public_profile", "AccessToken");
loginButton.registerCallback(callbackManager,
new FacebookCallback < LoginResult > () {@Override
    public void onSuccess(LoginResult loginResult) {

        System.out.println("onSuccess");

        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 {
                    id = object.getString("id");
                    try {
                        URL profile_pic = new URL(
                            "http://graph.facebook.com/" + id + "/picture?type=large");
                        Log.i("profile_pic",
                        profile_pic + "");

                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    }
                    name = object.getString("name");
                    email = object.getString("email");
                    gender = object.getString("gender");
                    birthday = object.getString("birthday");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
        Bundle parameters = new Bundle();
        parameters.putString("fields",
            "id,name,email,gender, birthday");
        request.setParameters(parameters);
        request.executeAsync();
    }

    @Override
    public void onCancel() {
        System.out.println("onCancel");
    }

    @Override
    public void onError(FacebookException exception) {
        System.out.println("onError");
        Log.v("LoginActivity", exception.getCause().toString());
    }
});

第 4 步: 不要忘记添加以下代码。

@Override
protected void onActivityResult(int requestCode, int responseCode,
Intent data) {
    super.onActivityResult(requestCode, responseCode, data);
    callbackManager.onActivityResult(requestCode, responseCode, data);
}

第 5 步: 将自定义按钮点击设置为 FacebookLogin 按钮点击。

public void onClick(View v) {
    if (v == fb) {
        loginButton.performClick();
    }
 }

第 6 步: 对于以编程方式注销,请使用此选项。

LoginManager.getInstance().logOut();

第 7 步:您可以通过个人资料查找用户是否登录。

profile = Profile.getCurrentProfile().getCurrentProfile();
if (profile != null) {
    // user has logged in
} else {
    // user has not logged in
}

关于android - 自定义 Facebook 登录按钮 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31327897/

相关文章:

php - Facebook iframe 应用程序授权后重定向到 Facebook 页面选项卡

ajax - 网络聊天使用什么语言?

javascript - Facebook SDK 和自定义按钮登录 react-native 0.60+ 不工作

ios - Swift iOS Facebook SDK : How to share an animated GIF?

ios - FBSDK登录错误码: 308 in Objective-C

安卓工作室 2.2.3 : Error Running App: Default Activity not found

android - 通过代码设置所选项目时如何禁用要调用的onItemSelectedListener

java - 从 SurfaceView 和 Canvas 到 libGDX

android 只执行一次代码

facebook - Devise 和 Facebook-Omniauth 缺少 client_id