最近鼓捣一些外面的东西,学习了下FaceBook sdk的接入过程。当然会用到一些工具才可以进行这些操作的,这里就不多说了。大家可以看看这个Android 版 Facebook 登录官方文档,跟着步骤一步步来就可以了,当然其中也会有很多容易出错的地方。慢慢解决就就可以了。
首先你得有一个facebook的账号,这是必须的。怎么注册,这里就不再演示了。懂得都懂,不懂的也没办法。有了账号之后是要注册成为开发者,新建一个应用,得到应用id,这些都是准备工作。注册好了,界面如下。
这个应用编号你们可以使用的,但是不知道什么时候就失效了。也许我取消了,哈哈哈哈哈哈。
先开始导入依赖包,位置在哪里,不用多说。
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");
}
});
除了登录方式和注册回调方法不同,其他都和第一种方法没有区别。
我用的是雷电模拟器,现在测试一下下。做好的界面如下。
两个按钮都可以直接调用起Facebook登录sdk。如果直接运行的话是不能运行的,需要在模拟器上来个vpn。所以我直接在真机上运行,哈哈哈哈哈哈。
如果在模拟器上装了vpn,也有可能出现这样的情况。
这种需要在自己的手机上或者模拟器上安装一个FaceBookAPP。可能不支持网页直接调用登录。也可以点击Back to Home完成登录。
这里由于我的Facebook账号被封了,无法演示完全。不过进行到这步就可以了。快去试试吧