首先需要在Facebook官方注册你的应用,这个不用说,需要注意的是在创建应用的时候需要填写应用的key hashes ,这个可以用cmd命令获取,也可以用代码动态获取,我是用代码动态获取的,下面贴下方法:

// Add code to print out the key hash@SuppressLint("NewApi")private fun getKeyHashValue() {try {val info = activity!!.getPackageManager().getPackageInfo("com.wj.demo",PackageManager.GET_SIGNATURES)for (signature in info.signatures) {val md = MessageDigest.getInstance("SHA")md.update(signature.toByteArray())Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT))}} catch (e: PackageManager.NameNotFoundException) {Log.d("KeyHash:",e.toString())} catch (e: NoSuchAlgorithmException) {Log.d("KeyHash:", e.toString())}}

然后把打印出来的字符串填写到Facebook开发者后台的key Hashes里面就可以了

然后开始在项目里面集成sdk和初始化sdk,调用登陆方法进行登陆:
在project级别的目录下的build.gradle文件种配置

repositories {mavenCentral()}

在app级别的目录下的build.gradle文件种配置sdk依赖:

  compile 'com.facebook.android:facebook-android-sdk:4.6.0'

在清单文件种配置下面:

<meta-data
        android:name="com.facebook.sdk.ApplicationId"android:value="@string/facebook_app_id" /><provider
            android:name="com.facebook.FacebookContentProvider"android:authorities="com.facebook.app.FacebookContentProvider5555302316225142"android:exported="true" /><activity
            android:name="com.facebook.FacebookActivity"android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"android:label="@string/app_name" />

在application种初始化sdk:

 FacebookSdk.sdkInitialize(applicationContext)

写登陆的关键代码,我这里整理到了工具类种FaceBookLoginUtil.kt:

import android.annotation.SuppressLint
import android.app.Activity
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Log
import android.util.Base64
import com.facebook.*
import com.facebook.login.LoginManager
import com.facebook.login.LoginResult
import org.json.JSONObject
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
import java.util.*/*** @Description:  facebook 登陆二次封装* @Author: wjj* @Time:   2018/6/26 15:24*/
class FaceBookLoginUtil {val TAG = "FaceBookLoginUtil"var activity: Activity? = nullvar loginManager: LoginManager? = nullvar call: CallbackManager? = nullvar loginListener:FacebookListener? = nullvar mName :String = ""var mPhoto :String = ""var mYear :String = "0"var mMonth :String = "0"var mDay :String = "0"/*初始化*/constructor(activity: Activity, loginListener: FacebookListener) {this.activity = activitythis.loginListener = loginListenergetKeyHashValue()//初始化facebook登录服务call = CallbackManager.Factory.create()loginManager = LoginManager.getInstance()loginManager?.registerCallback(call,object : FacebookCallback<LoginResult> {override fun onSuccess(loginResult: LoginResult) {Log.e(TAG, "onSuccess")var accessToken = loginResult.getAccessToken()userInfo(accessToken)}override fun onCancel() {Log.e(TAG, "onCancel")loginListener.onCancel()}override fun onError(exception: FacebookException) {Log.e(TAG, "onError")loginListener.onError()}})}// Add code to print out the key hash@SuppressLint("NewApi")private fun getKeyHashValue() {try {val info = activity!!.getPackageManager().getPackageInfo("com.wj.demo",PackageManager.GET_SIGNATURES)for (signature in info.signatures) {val md = MessageDigest.getInstance("SHA")md.update(signature.toByteArray())Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT))}} catch (e: PackageManager.NameNotFoundException) {Log.d("KeyHash:",e.toString())} catch (e: NoSuchAlgorithmException) {Log.d("KeyHash:", e.toString())}}//登陆fun login() {loginManager?.logInWithReadPermissions(activity, Arrays.asList("public_profile", "user_friends", "user_status", "user_birthday", "user_location", "user_hometown"))}//登出fun logout() {loginManager!!.logOut()}fun getCallbackManager(): CallbackManager {return this!!.call!!}/*获取个人信息*/fun userInfo(accessToken: AccessToken) {var request = GraphRequest.newMeRequest(accessToken, object : GraphRequest.GraphJSONObjectCallback {override fun onCompleted(obj: JSONObject?, response: GraphResponse?) {//获取个人信息val facebook_name = obj?.optString("name")//生日val facebook_birthday = (obj?.optString("birthday").toString()).replace("/", "", true).trim()if (facebook_birthday.length!=0){mDay = facebook_birthday.substring(0, 2)mMonth = facebook_birthday.substring(2, 4)mYear = facebook_birthday.substring(4, 8)}//获取用户头像val object_pic = obj?.optJSONObject("picture")val object_data = object_pic?.optJSONObject("data")val facebook_photo = object_data?.optString("url")mName = facebook_name!!mPhoto = facebook_photo!!SharedPreferencesUnitls.setParam(activity,"name",mName)SharedPreferencesUnitls.setParam(activity,"mPhoto",mPhoto)SharedPreferencesUnitls.setParam(activity, "comeTimeY", mYear)SharedPreferencesUnitls.setParam(activity, "comeTimeM", mMonth)SharedPreferencesUnitls.setParam(activity, "comeTimeD", mDay)loginListener?.onSuccess()}})var parameters = Bundle()parameters.putString("fields", "id,name,link,gender,birthday,email,picture,locale,updated_time,timezone,age_range,first_name,last_name")request.parameters = parametersrequest.executeAsync()}interface FacebookListener{fun onSuccess()fun onCancel()fun onError()}}

然后调用关键代码:

class LoginActivity:Activity(){override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_login)   faceBookLoginUtil = FaceBookLoginUtil(this, object : FaceBookLoginUtil.FacebookListener {override fun onSuccess() {Toast.makeText(this@LoginActivity, "login success", Toast.LENGTH_SHORT).show()var intent = Intent(this@LoginActivity,HomeActivity().javaClass)startActivity(intent)finish()}override fun onCancel() {Toast.makeText(this@LoginActivity, "Cancel the login", Toast.LENGTH_SHORT).show()}override fun onError() {Toast.makeText(this@LoginActivity, "Loading failure", Toast.LENGTH_SHORT).show()}})//点击登陆的按钮后调用fb登陆faceBookLoginUtil?.login()}}

Android 接入Facebook实现第三方登陆教程(精简版)相关推荐

  1. 利用FaceBook实现第三方登陆(自定义登陆按钮,非官方按钮)并获取用户数据

    最近公司要写集成登陆SDK,具体集成那些我就不说了,其中就包含需要使用facebook登陆自己的app,于是我苦心研究facebook,写完后发现各种问题,对于问题我当然去查阅官方文档看怎么解决,结果 ...

  2. Facebook实现第三方登陆(WEB)并获取用户信息

    [size=medium][u][b]网站如何实现用FaceBook登录[/b][/u][/size] [color=blue]1:登陆https://developers.facebook.com/ ...

  3. Hololens官方教程精简版 - 07. Spatial mapping(空间映射)

    前言 注意:本文已更新到5.5.1f1版本 个人建议,学习Holograms 230之前,一定完成<Hololens官方教程精简版 - 02. Introduction with Device& ...

  4. Facebook 为安卓用户推出精简版 Messenger Lite,率先面向发展中国家

    知道 Facebook Lite 就不难理解 Messenger Lite,两者都是 Facebook/ Messenger 的精简版,其中 Messenger Lite 只有不到 10M,能够快速安 ...

  5. 2017最新qq第三方登陆教程

    一.注册成为开发者 链接:https://connect.qq.com/index.html 二.创建应用 注册成功后在   应用管理 ->网站应用 里创建自己的应用 三.获取app Id 和 ...

  6. Android 接入华为通知栏推送教程(特此整理)

    前言: 受华为开发者联盟工作人员的邀约,特此将本篇博客重新整理一遍,希望让更多人受益,大家也可以参加华为开发者联盟推出活动,去提问自己的问题或者投稿. 扫二维码就可以参与活动哦. 首先本教程是基于华为 ...

  7. Android接入支付宝授权_小白教程

    关注微信公众号:每日玩机 获取ios.Android.tv.mac黑科技软件 前往官网下载最新的sdk 下载地址 把压缩包里的sdk放到自己项目下的libs文件里面去 在主项目的 build.grad ...

  8. 联想android模拟器,联想模拟器 v7.3.0 精简版

    本帖最后由 QueenRell 于 2021-3-29 19:23 编辑 好家伙又来了 又有人告诉我 不好啦不好啦 大佬都出了新模拟器啦 "联想模拟器" 我啪的一下都百度了一下 很 ...

  9. Hololens官方教程精简版 - 08. Sharing holograms(共享全息影像)

    前言 注意:本文已更新到5.5.1f1版本 本篇集中学习全息影像"共享"的功能,以实现在同一房间的人,看到"同一个物体".之所以打引号,是因为,每个人看到的并非 ...

最新文章

  1. 认识Linux的磁盘配额(转载)
  2. DHTML【8】--CSS
  3. 编程是一种对你的身体健康十分有害的工作
  4. 你光明,这世界便不黑暗!---2016年.3.16演讲稿
  5. python list index方法,Python List.index()方法
  6. mysql联合索引测试
  7. BetaMeow----利用机器学习做五子棋AI
  8. nlogn 最长不下降子序列
  9. PMP 项目管理过程组与知识领域梳理
  10. irrlicht引擎:实现天龙八部的RPG换装
  11. sql 分组排序语句顺序
  12. 安卓获取浏览器上网记录_Android 获取自带浏览器上网记录
  13. 爬虫利器BeautifulSoup之CSS选择器的基本使用
  14. 不正经技术研究,键盘侠,你武器可能有个坑!!
  15. 如何活让自己活得充实:其实很简单,把脑子里想的东西,变成行动,就能立刻充实起
  16. 怎么可以修改pr基本图形中的文字_PR教程03 | 如何增加字幕
  17. 老程序员的经验:应该怎么培养编程思维?
  18. 数据分析案例-银行拉新活动分析
  19. trim函数 html,jQuery trim()函数怎么用?
  20. 拟合数据时报错Number of calls to function has reached maxfev = 1000

热门文章

  1. Unity-URP 实现遮挡高亮
  2. 前端框架 Vue 初探
  3. [职场原则] 疏不间亲
  4. 4家外国支持支付宝支付的域名注册商
  5. 软件管理的工具-360软件管家提供下载
  6. 中石油:皇家棋神(思维)
  7. hihocoder 1636 Pangu and Stones
  8. 【网络安全】LDAP协议
  9. 评论:Monster的诺基亚Purity Pro无线耳机
  10. python安装0x80070643严重错误