集成Facebook SDK之Facebook登录
前言
这几天应公司需求,需要在项目中接入facebook的登录,现在闲下来后再次巩固一下!
准备工作
- 保证自己的网络已经FQ,能够进入Facebook网页
- 准备一个FB的开发者账号,如果没有可以免费申请,附上官方网址
流程
1、登录facebook后,点击左侧 “展开”栏,
2、选择点击管理应用---添加新应用,创建新的应用,然后根据自己的需求选择相应的用途,根据他的要求填写就可以了。
3、创建完毕后,添加产品时选择Facebook登录
4、点击设置后,选择Android平台,然后按照FB的步骤完成。
这里具体演示下这些步骤
1、下载这里就不讲解了
2、导入Facebook SDK
对应的在Android Studio中的是
对应的在Android Studio中的是
随后构建一下项目(点击上面锤子的icon按钮进行构建)
3、在FB上填写Android项目信息,填写完后要Save一下
4、添加密钥
这个根据文档去输入相应的命令就可以得到密钥了,不过有的设置了密码的就需要输入密钥密码才能得到密钥,然后在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); }
最后在导出的项目中点击按钮看看效果