Android 接入Facebook实现第三方登陆教程(精简版)
首先需要在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实现第三方登陆教程(精简版)相关推荐
- 利用FaceBook实现第三方登陆(自定义登陆按钮,非官方按钮)并获取用户数据
最近公司要写集成登陆SDK,具体集成那些我就不说了,其中就包含需要使用facebook登陆自己的app,于是我苦心研究facebook,写完后发现各种问题,对于问题我当然去查阅官方文档看怎么解决,结果 ...
- Facebook实现第三方登陆(WEB)并获取用户信息
[size=medium][u][b]网站如何实现用FaceBook登录[/b][/u][/size] [color=blue]1:登陆https://developers.facebook.com/ ...
- Hololens官方教程精简版 - 07. Spatial mapping(空间映射)
前言 注意:本文已更新到5.5.1f1版本 个人建议,学习Holograms 230之前,一定完成<Hololens官方教程精简版 - 02. Introduction with Device& ...
- Facebook 为安卓用户推出精简版 Messenger Lite,率先面向发展中国家
知道 Facebook Lite 就不难理解 Messenger Lite,两者都是 Facebook/ Messenger 的精简版,其中 Messenger Lite 只有不到 10M,能够快速安 ...
- 2017最新qq第三方登陆教程
一.注册成为开发者 链接:https://connect.qq.com/index.html 二.创建应用 注册成功后在 应用管理 ->网站应用 里创建自己的应用 三.获取app Id 和 ...
- Android 接入华为通知栏推送教程(特此整理)
前言: 受华为开发者联盟工作人员的邀约,特此将本篇博客重新整理一遍,希望让更多人受益,大家也可以参加华为开发者联盟推出活动,去提问自己的问题或者投稿. 扫二维码就可以参与活动哦. 首先本教程是基于华为 ...
- Android接入支付宝授权_小白教程
关注微信公众号:每日玩机 获取ios.Android.tv.mac黑科技软件 前往官网下载最新的sdk 下载地址 把压缩包里的sdk放到自己项目下的libs文件里面去 在主项目的 build.grad ...
- 联想android模拟器,联想模拟器 v7.3.0 精简版
本帖最后由 QueenRell 于 2021-3-29 19:23 编辑 好家伙又来了 又有人告诉我 不好啦不好啦 大佬都出了新模拟器啦 "联想模拟器" 我啪的一下都百度了一下 很 ...
- Hololens官方教程精简版 - 08. Sharing holograms(共享全息影像)
前言 注意:本文已更新到5.5.1f1版本 本篇集中学习全息影像"共享"的功能,以实现在同一房间的人,看到"同一个物体".之所以打引号,是因为,每个人看到的并非 ...
最新文章
- 认识Linux的磁盘配额(转载)
- DHTML【8】--CSS
- 编程是一种对你的身体健康十分有害的工作
- 你光明,这世界便不黑暗!---2016年.3.16演讲稿
- python list index方法,Python List.index()方法
- mysql联合索引测试
- BetaMeow----利用机器学习做五子棋AI
- nlogn 最长不下降子序列
- PMP 项目管理过程组与知识领域梳理
- irrlicht引擎:实现天龙八部的RPG换装
- sql 分组排序语句顺序
- 安卓获取浏览器上网记录_Android 获取自带浏览器上网记录
- 爬虫利器BeautifulSoup之CSS选择器的基本使用
- 不正经技术研究,键盘侠,你武器可能有个坑!!
- 如何活让自己活得充实:其实很简单,把脑子里想的东西,变成行动,就能立刻充实起
- 怎么可以修改pr基本图形中的文字_PR教程03 | 如何增加字幕
- 老程序员的经验:应该怎么培养编程思维?
- 数据分析案例-银行拉新活动分析
- trim函数 html,jQuery trim()函数怎么用?
- 拟合数据时报错Number of calls to function has reached maxfev = 1000