最近鼓捣一些外面的东西,学习了下FaceBook sdk的接入过程。当然会用到一些工具才可以进行这些操作的,这里就不多说了。大家可以看看这个Android 版 Facebook 登录官方文档,跟着步骤一步步来就可以了,当然其中也会有很多容易出错的地方。慢慢解决就就可以了。

首先你得有一个facebook的账号,这是必须的。怎么注册,这里就不再演示了。懂得都懂,不懂的也没办法。有了账号之后是要注册成为开发者,新建一个应用,得到应用id,这些都是准备工作。注册好了,界面如下。

android facebook登录获取头像如何展示 facebook安卓怎么用_facebook


这个应用编号你们可以使用的,但是不知道什么时候就失效了。也许我取消了,哈哈哈哈哈哈。

先开始导入依赖包,位置在哪里,不用多说。

implementation 'com.facebook.android:facebook-login:[5,6)'

官方会要求用到这个jcenter()库来存储东西,但是我觉得不是很好,可以用阿里的镜像仓库来代替,下载速度贼快。镜像库如下。镜像库放在buildscript { repositories {}} 其中。直接代替里面的东西就可以了。

maven() {
            url 'https://maven.aliyun.com/repository/jcenter'
        }
        maven(){
            url 'https://maven.aliyun.com/repository/google'
        }
        maven {
            url 'https://maven.aliyun.com/repository/public'
        }
        maven {
            url 'https://maven.aliyun.com/repository/mapr-public'
        }
        maven(){
            url 'https://jitpack.io'
        }
        google()
        mavenCentral()```
下面的allprojects也可以放一个

```java
maven() {
            url 'https://maven.aliyun.com/repository/jcenter'
        }
        maven(){
            url 'https://maven.aliyun.com/repository/google'
        }
        maven {
            url 'https://maven.aliyun.com/repository/public'
        }
        maven {
            url 'https://maven.aliyun.com/repository/mapr-public'
        }
        maven(){
            url 'https://jitpack.io'
        }
        google()

这样下载速度就会快很多。当然你也可以下载一个sdk放到工程目录下。
然后在strings.xml 中写入如下代码

<string name="facebook_app_id">3504692139563307</string>
<string name="fb_login_protocol_scheme">fb3504692139563307</string>

AndroidManifest.xml中写入网络访问权限

<uses-permission android:name="android.permission.INTERNET"/>

AndroidManifest.xml里的Application标签中写入

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>

在activity_main.xml中写入facebook提供的登录按钮

<com.facebook.login.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" />

在MainActivity中写入登录处理逻辑

public class MainActivity extends AppCompatActivity {

    public CallbackManager callbackManager;
    public LoginButton loginButton;
    private static final String EMAIL = "email";
    private static final String USER_POSTS = "user_posts";
    private static final String AUTH_TYPE = "request";
    private static final String TAG = "FaceBookLoginTest";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        callbackManager = CallbackManager.Factory.create();
        loginButton = findViewById(R.id.login_button);
        loginButton.setPermissions(Arrays.asList(EMAIL, USER_POSTS));
        loginButton.setAuthType(AUTH_TYPE);
        // If using in a fragment
        //loginButton.setFragment(this);
        
        // Callback registration
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                // App code
                Log.d(TAG, "onSuccess");
            }
            @Override
            public void onCancel() {
                // App code
                Log.d(TAG, "onCancel");
            }
            @Override
            public void onError(FacebookException exception) {
                // App code
                Log.d(TAG, "onError");
            }
        });
    }  
      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
}

通过loginButton注册回调,得到登录结果的响应。这是第一种登录方式。
还有一种就是自定义按钮,不用它提供的默认方式。自己来一个按钮可以啦,这就不给出按钮布局了。
MainActivity中需要这样写

login = findViewById(R.id.login_button);
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile"));
            }
        });
        //注册回调
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        // App code
                        Log.d(TAG, "onSuccess");
                    }

                    @Override
                    public void onCancel() {
                        // App code
                        Log.d(TAG, "onCancel");
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        // App code   
                        Log.d(TAG, "onError");
                    }
                });

除了登录方式和注册回调方法不同,其他都和第一种方法没有区别。

我用的是雷电模拟器,现在测试一下下。做好的界面如下。

android facebook登录获取头像如何展示 facebook安卓怎么用_java_02


两个按钮都可以直接调用起Facebook登录sdk。如果直接运行的话是不能运行的,需要在模拟器上来个vpn。所以我直接在真机上运行,哈哈哈哈哈哈。

如果在模拟器上装了vpn,也有可能出现这样的情况。

android facebook登录获取头像如何展示 facebook安卓怎么用_facebook_03


这种需要在自己的手机上或者模拟器上安装一个FaceBookAPP。可能不支持网页直接调用登录。也可以点击Back to Home完成登录。

这里由于我的Facebook账号被封了,无法演示完全。不过进行到这步就可以了。快去试试吧