您的当前位置:首页正文

SDK接入(1)之Android Facebook SDK接入

来源:图艺博知识网

今天,决定把自己之前写的技术分享类博文搬到简书上,一来可以扩大下人脉圈、认识更多的同行和志同道合的朋友,二来是通过这种分享与总结记录下自己在游戏开发过程中的一些感悟,同时能督促自己保持对技术的热忱和不断学习进步。那么,言归正传,第一篇文章SDK接入(1)之Android Facebook SDK接入,是自己在游戏开发中有关接入Facebook过程的分享。如果,觉得对你有帮助,可以手动点赞下:),也可以关注下我后续发布的分享文章。

前言

由于游戏已上线,且处于维护阶段,所以有空写写各种SDK接入过程和遇到的问题,也当作一种工作总结。SDK接入主流分为这么几类,登录支付分享推送统计等,达到借‘他山之石’的效果。顺便吐槽下,现在国内是个渠道就弄个所谓的自己的SDK,各种文档更新不及时、文档与Sample不对应、Sample测试不全或运行报错、技术支持沟通无人回复等,真是深受其害。

1、接入前准备工作

  1. 需科学上网(翻墙,VPN什么的自己解决),注册Facebook(后面统称FB)帐号。
  2. FB SDK下载地址为:
  3. FB SDK接入文档地址为:
  4. FB SDK完整源码地址为:

2、创建应用,获取应用编号和密钥

管理应用程序
(2) 创建应用,并添加要发布的平台。填写Package NameDefault Activity Class Name

(4) 将生成的KeyHash(28个字符的字符串)配置到FB后台,可添加多个。
(5) 其它配置,如图:


(3)下载FB SDK,并配置参数

FB SDK下载后的文件,形如:facebook-android-sdk-4.8.2.aar。
若使用AndroidStudio作为IDE,则导入该.aar文件。步骤为:
(1) 直接将facebook-android-sdk-4.8.2.aar复制到工程的libs路径下。如图:

修改配置
(2) 修改build.gradle,添加如下配置:
       repositories {
           flatDir {
               dirs 'libs'
           }
       }  

       compile(name: 'facebook-android-sdk-4.8.2', ext: 'aar')

如图:

build.gradle修改
然后,重新Rebuild Project一下,成功则会生成如下:
Rebuild

若使用Eclipse作为IDE,则需将.aar文件解压。解压完如下图:

facebook-android-sdk-4.8.2.aar解压

拷贝assetsresAndroidManifest.xmlclasses.jar,新建Eclipse工程并覆盖对应文件。

(4)FB SDK接入

(1) 配置FB id(FB后台获取的应用编号)。打开res/values/strings.xml,添加:

    <string name="facebook_app_id">172633573185136</string>

(2) 配置AndroidManifest,添加权限

    <uses-permission android:name="android.permission.INTERNET"/>

在application项下配置:

    <application android:label="@string/app_name">
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    </application>  

(3) 初始化FB SDK和激活事件,在Application的onCreate()调用如下代码:

    public void onCreate() {
        super.onCreate();
        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(this);
    }

(4) 讲FacebookActivity配置到AndroidManifest中,如下:

    <activity
        android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />  

(5) FB登录分为带Facebook按钮和不带Facebook按钮两种形式。带Facebook按钮需要将FB提供的LoginButton添加到自己的布局中。而游戏登录,只需要点击对应的游戏登录按钮再调用FB登录即可。所以下面介绍下,不带Facebook按钮的这种形式。

在MainActivity中的onCreate()中注册登录回调,代码如下:

    callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().registerCallback(callbackManager,
           new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                     // App code
                }

                @Override
                public void onCancel() {
                     // App code
                }

                @Override
                public void onError(FacebookException exception) {
                     // App code   
                 }
    });

(6) FB登录,注意登录权限需使用public_profile,并在onActivityResult中处理用户授权,代码如下:

    private static final String PERMISSION = "public_profile";  

    LoginManager loginManager = LoginManager.getInstance();
    loginManager.setDefaultAudience(loginManager.getDefaultAudience());
    loginManager.setLoginBehavior(loginManager.getLoginBehavior());
    loginManager.logInWithReadPermissions(AppActivity.context_self, Arrays.asList(PERMISSION));  

onActivityResult处理代码:

    public static void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (callbackManager != null) {
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }
    }

(7) 登录结果处理,在FacebookCallback中,代码如下:

    public void onSuccess(LoginResult loginResult) {
        AccessToken accessToken = loginResult.getAccessToken();
        String userId = accessToken.getUserId();
        String token = accessToken.getToken();
        // TODO:拿到userId和token,传给游戏服务器校验
    }

    public void onCancel() {
    }

    public void onError(FacebookException exception) {
        if (exception instanceof FacebookAuthorizationException) {
            LoginManager.getInstance().logOut();
            // TODO:
        }
    }

(8) 使用AppEventsLogger来添加自定义统计事件,登录和支付(分别对应游戏FB登录和发起支付并支付成功时)的示例代码如下:

登录事件统计:

    Bundle parameters = new Bundle();
    parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_ID, roleId);
    parameters.putInt(AppEventsConstants.EVENT_NAME_ACHIEVED_LEVEL, roleLevel);
    AppEventsLogger logger = AppEventsLogger.newLogger(this, FACEBOOK_AD_ID);
    logger.logEvent("Login", parameters);

支付事件统计:

    AppEventsLogger logger = AppEventsLogger.newLogger(this, FACEBOOK_AD_ID);
    logger.logPurchase(BigDecimal.valueOf(orderInfo.getInt("price")), Currency.getInstance(SdkImp.CURRENCY));  

FB SDK接入常见错误

(1) 登录权限异常,FacebookCallback的onError中返回FacebookAuthorizationException:
解决:一般是FB帐号设置了安全验证,例如登录需要安全码之类的,需要修改FB安全设置。

(2) Invalid key hash错误。如图:

key hash错误
解决:需要确认正式打包的签名文件(.keystore)和生成keyHash时是否为同一个签名文件。
Top