集成facebook登录接入

这几天应公司需求,需要在项目中接入facebook的登录,如今闲下来后再次牢固一下!
预备工作
- 保证自己的网络已经翻墙,可以或许进入Facebook网页
- 预备一个FB的开发者账号,假如没有可以免费申请,附上 官方网址
1、登录facebook后,点击左侧 “睁开”栏,
2、选择点击管理应用---添加新应用,创建新的应用,然后根据自己的需求选择相应的用途,根据他的要求填写就可以了。
3、创建完毕后,添加产品时选择Facebook登录

4、点击设置后,选择Android平台,然后根据FB的步骤完成。
这里详细演示下这些步骤 1、下载这里就不解说了 2、导入Facebook SDK




这个根据文档去输入相应的下令就可以得到密钥了,不外有的设置了密码的就需要输入密钥密码才能得到密钥,然后在FB的文档中填入这个天生的密钥就可以了,也需要记得Save一下。
5、启用单点登录 这个单击启用单点登录,然后Save 6、根据Facebook上面的文档在AndroidStudio的相应位置添加代码 1、打开您的
/app/res/values/strings.xml
文件。
2、添加如下所示的代码:
<string name="facebook_app_id">应用编号</string> <string name="fb_login_protocol_scheme">fb+应用编号</string>
3、打开
/app/manifest/AndroidManifest.xml
文件。
4、在
application
元素后添加以下
uses-permission
元素:
<uses-permission android:name="android.permission.INTERNET"/>
5、在
application
元素中添加以下
meta-data
元素、一个针对 Facebook 的 activity 元素以及一个针对 Chrome 自定义选项卡的 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>
7、设置登录按钮
我这里是直接在项目中设置按钮登录
js代码
onClickLogin(){ jsb.reflection.callStaticMethod(
"org/cocos2dx/javascript/AppActivity", "LoginFb", "()V"
); }
java代码
public
static
void
LoginFb(){ LoginManager.getInstance().logInWithReadPermissions(sCocos2dxActivity, Arrays.asList(
"public_profile"
)); }
8、注册回调
在AppActivity的onCreate方法中添加以下代码
sCocos2dxActivity =
this
; callbackManager
=
CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(callbackManager,
new
FacebookCallback<LoginResult>
() { @Override
public
void
onSuccess(LoginResult loginResult) { Toast.makeText(getApplicationContext(),
"facebook登录成功" +
loginResult.getAccessToken().getUserId(), Toast.LENGTH_SHORT).show();
final
String Fid =
loginResult.getAccessToken().getUserId(); Cocos2dxHelper.runOnGLThread(
new
Runnable() { @Override
public
void
run() { Cocos2dxJavascriptJavaBridge.evalString(
"window.FbLoginCallback("+Fid+");"
); } }); } @Override
public
void
onCancel() { Toast.makeText(getApplicationContext(),
"facebook登录用消"
, Toast.LENGTH_SHORT).show(); } @Override
public
void
onError(FacebookException error) { Toast.makeText(getApplicationContext(),
"facebook登录错误"
, Toast.LENGTH_SHORT).show(); } });
最后,在
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登录sdk
首先去 Facebook开发者平台 注册一个开发者账户,这里需要翻墙,在后台添加一个自己的应用
SDK集成SDK的集成方法有两种
-
Maven方法
- 在您的项目中,打开 your_app > Gradle Scripts > build.gradle (Project),确保下列存储库都添加到 buildscript { repositories {}} 中
jcenter()
implementation 'com.facebook.android:facebook-login:[4,5)'
编辑资源和清单
<string name="facebook_app_id">15477621189....</string> <string name="fb_login_protocol_scheme">fb15477621189....</string>
<uses-permission android:name="android.permission.INTERNET"/>
<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控制后台填入即可
为应用提供开发和公布秘钥散列首先,需要三个工具:
其次,使用下令行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使用
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"));
@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设置的一样
前言
昨天公司已经同意了提交的辞职申请,但现在还需要一段时间进行项目标交代。以是使用这段空闲时间整理几篇技能文章,用于对自己的牢固。
预备工作
保证自己的网络已经翻墙,可以或许进入Facebook网页
一个FB开发者账号,如若没有可以免费申请,附上 官方网址 。
流程
-
点击快速入门,选择Android平台,然后根据FB的要求一步步走完即可。
点击我的应用-添加新应用,创建新的应用
此中有一下几点需要留意:
implementation 'com.facebook.android:facebook-android-sdk:[4,5)'
而是改用
implementation ("com.facebook.android:facebook-android-sdk:4.26.0") { exclude module: 'support-v4' }
缘故有两点:1.是去掉FB sdk中的v4包防备support包的重复引用,2.指定详细的版本而不是[4,5)是为了!防备随着FB SDK的更新而导致sdk集成失败。
try { PackageInfo info = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String KeyHash = Base64.encodeToString(md.digest(), Base64.DEFAULT); Log.d("KeyHash:", "KeyHash:" + KeyHash);//两次获取的不一样 此处取第一个的值 // Toast.makeText(this, "FaceBook HashKey:"+KeyHash, Toast.LENGTH_SHORT).show(); } } catch (PackageManager.NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { }
然后打包成正式包运行来得到。
<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" />
LoginManager.getInstance().logInWithReadPermissions(AppLoginActivity.this, Arrays.asList("public_profile", "user_friends"));
天生测试用户,点击用户身份-测试用户。可以天生多个FB测试账户用于测试。
现在APP还是在开发状态,在APP上架之前还需要将FB项目对外公开,否则普通用户仍旧无法登陆。点击应用考核-确认对外公开即可。
总结
好了,到现在为止已经集成了Facebook登录,总的来说比较简单,根据官方的步骤一步步实现就好。
后续还会有FB的分享、好友约请、点赞等功能集成的文章,请继续关注。如有什么问题,可以联系我,联系方法:
简书地点: http://www.jianshu.com/p/16efe98d4554/ )
E-mail:931675174@qq.com本文网址: http://www.51iflove.com/p/2020927103333_9730_4282734144/home