在做海外项目中,经常需要接入Facebook SDK ,现将CocosCreator Android 平台 Facebook 登录的接入流程记录下来,以备有需要的朋友做参考。
一、准备工作
1、首先在facebook 开发者平台 注册账号,创建app,获取app的应用编号。
怎么注册账号,怎么创建app ,这里就不再细说。
app的应用编号和密钥,如下所示:
2、设置应用密钥散列
生成密钥散列有2种方式:
(1)、通过代码获取
//获取facebook所需的密钥散列 try { PackageInfo info = getPackageManager().getPackageInfo("com.x.x", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); showLog("Base64 hash------" + Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { }
(2)、通过工具进行获取
第一步,通过命令行的方式获取到证书指纹SHA1
发布证书指纹获取方式:
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64
开发证书指纹获取方式:
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
证书指纹示例:
SHA1: 9D:2F:E0:3C:8E:DF:ED:8C:2B:28:88:92:60:A3:82:63:81:4F:3D:9D
第二步,使用工具,将SHA1 证书指纹转化为密钥散列
在线工具:http://tomeko.net/online_tools/hex_to_base64.php
详细使用步骤,请查看根据 sha-1 证书值获取 Facebook 的登录需要使用的散列值
密钥散列可填写多个:
3、添加平台
这里以添加 google play 平台为例进行说明。
(1)、点击下方“添加平台” 按钮 ,在弹出的二级页面依次选择 android ->google play 。
(2)、设置软件包名,包名就是项目包名 com.xxx.xxx。
(3)、设置类名,类名里面填写启动activity 全路径,例如:org.cocos2dx.javascript.AppActivity。
3、创建测试账号,修改密码
二、代码部分调整
1、在项目层 build.gradle ,引入facebook 最新版本sdk。
implementation 'com.facebook.android:facebook-login:latest.release' implementation 'com.facebook.android:facebook-android-sdk:latest.release'
2、AndroidManifest.xml 配置
(1)、添加网络访问权限,如果已经开启,则忽略。
<uses-permission android:name="android.permission.INTERNET"/>
(2)、在 application 添加 meta-data 元素 和针对 Facebook 的 activity 元素。
<!-- SDK Facebook start! --> <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" /> <!-- SDK Facebook end! -->
(3)、在 application 启动activity 元素添加 scheme
<activity android:name="org.cocos2dx.javascript.AppActivity" android:screenOrientation="sensorPortrait" android:configChanges="orientation|keyboardHidden|screenSize|screenLayout" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:launchMode="singleTask" android:exported="true" android:taskAffinity="" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter android:autoVerify="true"> <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>
3、res/values/strings.xml 配置
<string name="facebook_app_id">285717330186354</string> <string name="fb_login_protocol_scheme">fb285717330186356</string>
facebook_app_id :app的应用编号
fb_login_protocol_scheme:fb+app的应用编号