FaceBook登录接入

官方文档

Facebook登录接入Android官方文档

创建应用

首先去Facebook开发者平台注册一个开发者账户,这里需要翻墙,在后台添加一个自己的应用

SDK集成

SDK的集成方式有两种

  • Maven方式
  • 在您的项目中,打开 your_app > Gradle Scripts > build.gradle (Project),确保下列存储库都添加到 buildscript { repositories {}} 中
jcenter() 
  • 在您的项目中,打开 your_app > Gradle Scripts > build.gradle (Module: app) 并将下列执行语句添加到 dependencies{} 部分,以便依赖于最新版的 Facebook 登录 SDK:
 implementation 'com.facebook.android:facebook-login:[4,5)'

  • Jar导入方式
    下载Facebook最新的SDK jar包放到项目的libs文件夹下。
    SDK下载地址是:Facebook SDK下载地址

编辑资源和清单

  • 打开 /app/res/values/strings.xml 文件
<string name="facebook_app_id">15477621189....</string>
<string name="fb_login_protocol_scheme">fb15477621189....</string>
  • 打开 /app/manifest/AndroidManifest.xml 文件
    • 添加权限
<uses-permission android:name="android.permission.INTERNET"/>
  • 在 application 元素中添加以下 meta-data 元素以及相应的Activity
<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>

填入APP的包名

在Facebook控制后台填入即可

为应用提供开发和发布秘钥散列

首先,需要三个工具:

  • keytool : JDK中默认已经有了
  • windows openssl函数库
  • keystore:debug.keystore 以及应用正式上线的keystore

其次,利用命令行cmd去生成调试以及正式的keystore秘钥散列, cmd渠道JDK的目录下,输入一下命令,注意调整自己的各种路径,debug.keystore的密码默认是没有的,直接回车就好

  • 调试版秘钥散列
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\USERNAME\.android\debug.keystore" | "PATH_TO_OPENSSL_LIBRARY\bin\openssl" sha1 -binary | "PATH_TO_OPENSSL_LIBRARY\bin\openssl" base64

  • 正式版秘钥散列
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64

生成出来秘钥散列的是28个字符的字符串,类似于以下

QvoiWD1LQEfDIrvczaq31WCJZjX=

SDK的API使用

  • SDK的初始化登录回调,在onCreate()中调用
callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.e(TAG, "登录成功: " + loginResult.getAccessToken().getToken());
                loginResult.getAccessToken().getApplicationId();
                loginResult.getAccessToken().getUserId();
            }

            @Override
            public void onCancel() {
                Log.e(TAG, "登录取消");
            }

            @Override
            public void onError(FacebookException error) {
                Log.e(TAG, "登录错误");
            }
        });
  • 在你需要调用登录的地方调用登录接口
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile"));
  • 在 onActivityResult 方法中调用 callbackManager.onActivityResult,通过 callbackManager 将登录结果传递至 LoginManager
      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }

这样一个简单的Facebook登录客户端API已经完成了,如果需要服务端校验,各家的校验方式都不一样,可以参考访问口令

应用测试

  • 测试手机:需要翻墙
    • 需要有google play服务,可以到各大应用商店下载:谷歌安装器
    • google play商店下载Facebook app
  • 将代买debug安装到手机运行测试

注意事项

  • 将自己的debug.keystore生成散列秘钥配置到Facebook控制后台,要不然debug出来的app安装到手机会不可用
  • 注意自己的申请参数正确配置到:/app/res/values/strings.xml中
  • 如果在Facebook控制后台配置了包名,请确保自己应用的包名和Facebook配置的一样
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,061评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 已经想不起和拆书帮结缘的准确时间了,我记得我是从互动吧里报名参加了拆书帮上饶三清山分舵的一次线下练级场的活动。第一...
    锦莉阅读 230评论 2 1
  • 内心里自己还是个孩子,可是转身看到身边已经站着自己的孩子,甚至是孩子们。不管愿不愿承认,八零后的我们大多数都已经是...
    WillChang阅读 200评论 0 0
  • 一九七四年六月十五号,两年半的高中学习生活结束了。毕业以后,我很少和同学们保持联系。 2017年的春天,一个阳光灿...
    惜福_d9e6阅读 702评论 0 2