Facebook android 第三方登录

Facebook android 第三方登录

android平台使用Facebook账号登录自己的app

 - 前期准备
 - 注册Facebook开发者账号,添加自己的应用,按照官方文档的指引完成需要的步骤
 - 按照官方的文档进行android客户端的配置
     地址:https://developers.facebook.com/docs/facebook-login/android
     . 在文档中先完成第一步,按照指引没有问题
    . 完成项目对Facebook的依赖
    打开刚刚在Facebook上注册的项目
        . 在build.gradle中添上对Facebook SDK
    dependencies{
    compile 'com.facebook.android:facebook-android-sdk:[4,5)'
        .  在/res/values/strings.xml
    
<string name="facebook_app_id">149416002205054</string>
下面这个是对没有安装Facebook客户端的登录(新的SDK可以允许不下载Facebook客户端)
<string name="fb_login_protocol_scheme">fb149416002205054</string>
. 在manifests.xml中进行配置添加对上面两个值的依赖
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tao.chongba">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"/>
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />

        <activity android:name=".chongba">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <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" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

</manifest
. 使用官方的LoginButton做测试 //TODO 后期改为自定义Button 在res/layout/xxx.xml中添上
<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" />
. 最后开始activity的编写
  activity类继承了FragmentActivity类
  使用loginManager进行注册回调
  override onCreate(),首先要先对Facebook的sdk进行初始化
FacebookSdk.sdkInitialize(getApplicationContext());
下面开始进行set view 和 注册回调
最后通过
onActivityResult
方法将回调结果传给callbackManager
完成的代码如下
package com.example.tao.chongba;

import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;


public class chongba extends FragmentActivity {
    CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        setContentView(R.layout.activity_chongba);

        callbackManager = CallbackManager.Factory.create();




        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        // App code
                        System.out.println("SUCCESS");



                        System.out.println("AccessToken :"+loginResult.getAccessToken().getToken());
                        
                    }

                    @Override
                    public void onCancel() {
                        // App code
                        System.out.println("CANCEL");
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        // App code
                        System.out.println("ERROR");
                    }
                });
//        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));
    }

    @Override
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        System.out.println("data : "+data.toString());
        callbackManager.onActivityResult(requestCode, resultCode, data);

    }


}

最后在登录成功里面获取到AccessToken
得到AccessToken后可以使用Graph API 来获取用户的资料
这里是在server端进行获取userInfo的
创建需要的userInfo的信息实体类
public class FBUserInfoEntity {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
利用HttpClient获取API返回的UserInfo

package com.pet.util.thirdparty;

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.StatusLine;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;


public class FBUserInfoUtil {
    public FBUserInfoEntity getFBUser(String accessToken) throws IOException{
        StringBuilder sb = new StringBuilder();
        sb.append("https://graph.facebook.com/v2.8/me?access_token=")
          .append(accessToken);
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpGet HG = new HttpGet(sb.toString());
        CloseableHttpResponse response = httpClient.execute(HG);
        try{
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if(statusCode == 200){
                 HttpEntity entity = response.getEntity();
                 return new ObjectMapper().readValue(EntityUtils.toString(entity), FBUserInfoEntity.class);
            }else{
                
                return new FBUserInfoEntity();
            }
        }finally{
            response.close();
        }
        
    }
}
这样就获取到Facebook用的信息最后进行数据处理,处理完之后由client端访问API进行数据访问

//TODO 后期补上Client端直接获取用户的资料并在view中显示

//因为第一次接触android,好多不是很懂,先记下来,后期对每个点进行学习






- 列表内容
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值