Facebook SDK 采用Android 原生的接入方式,主要是为了获取facebook账户信息,将facebook的token作为主键,在后续Google Firebase同步中使用。
facebook login sdk的接入文档 (需要科学上网)
https://developers.facebook.com/docs/facebook-login/android?sdk=maven
facebook Android API 文档
https://developers.facebook.com/docs/reference/android
1:首先在 proj.android/app 目录下的build.gradle 中 添加需要的facebook 库, 注意同步gradle
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':libcocos2dx')
//facebook start
compile 'com.facebook.android:facebook-login:[4,5)'
//facebook end
}
2:在主AndroidManifest中添加,这里注意,只添加一行 android:name="com.facebook.FacebookActivity",不然在Android 8.0 sdk的手机上会Crash,因为在facebook登录时,Activity是透明的,不能设置Activity的方向,一定记住!!!。
<!--facebook-->
<activity
android:name="com.facebook.FacebookActivity"
/>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="facebook_app_id"/>
<!--facebook-->
3:在 res/values/string.xml 中 添加你申请的id
<string name="facebook_app_id" translatable="false">1231232131</string>
<string name="fb_login_protocol_scheme" translatable="false">fb1231232131</string>
4:在AppActivity 中 添加facebook 登录接口, 采用Handler Message 的方式 防止cocos的线程崩溃
public static void FBLogin()
{
Message msg = new Message();
msg.what = HANDLER_FB_LOGIN;
handler.sendMessage(msg);
}
public static void FBLogout()
{
Message msg = new Message();
msg.what = HANDLER_FB_LOGOUT;
handler.sendMessage(msg);
}
private void InitCocosListener()
{
handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case HANDLER_FB_LOGIN:
{
LoginManager.getInstance().logOut();
LoginManager.getInstance().logInWithReadPermissions(AppActivity.this, Arrays.asList("public_profile"));
}
break;
case HANDLER_FB_LOGOUT:
LoginManager.getInstance().logOut();
break;
}
}
5:获取facebook 账户信息,目前facebo只能获取id, name ,token, 其他权限需要后台申请,获取信息后通过JNI传到C++
层做逻辑处理。
private void GetFaceBookUserInfo(final AccessToken accessToken){
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response)
{
try {
String id = object.getString("id");
String name = object.getString("name");
String token = accessToken.getToken();
} catch (JSONException e1) {
e1.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,gender,picture,locale");
request.setParameters(parameters);
request.executeAsync();
}
最后,facebook 接入完成,其实国外的sdk接入需要比较好的英语能力,cocos3.17的开发c++的话可以基于xCode 或是VS,基于Android的接入 可以通过Android Studio, 调试很方便。
如有错误,大家可以一起交流
联系方式 qq: 940299880