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

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

(1)接入前准备工作

  1. 需科学上网(翻墙,VPN什么的自己解决),注册Facebook(后面统称FB)帐号。
  2. FB SDK下载地址为:https://origincache.facebook.com/developers/resources/?id=facebook-android-sdk-current.zip
  3. FB SDK接入文档地址为:https://developers.facebook.com/docs/android/getting-started/
  4. FB SDK完整源码地址为:https://github.com/facebook/facebook-android-sdk

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

步骤如下:

  1. 登录facebook.com,在侧边可以看到有个开发者项,点击管理应用程序。如图:

  2. 创建应用,并添加要发布的平台。填写Package NameDefault Activity Class Name

    注:Package Name为应用程序的包名,与Manifest里面的包名对应。

    Default Activity Class Name为第一个启动的Activity,要用完整的类名,与声明如下的Activity类名对应。

         <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="bigdevil"/>
    </intent-filter>

例如:org.cocos2dx.lua.SplashActivity

  1. 生成KeyHash,并配置KeyHash。

    • 下载OpenSSL,并添加到环境变量。
    • 命令行执行:keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl

      base64,注意-keystore后面是签名文件的路径,执行完之后会生成如图:

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





(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')

如图:



然后,重新Rebuild Project一下,成功则会生成如下:

若使用Eclipse作为IDE,则需将.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错误。如图:



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

作者:AlphaGL

出处:http://www.cnblogs.com/alphagl/

版权所有,欢迎保留原文链接进行转载

SDK接入(1)之Android Facebook SDK接入的更多相关文章

  1. SDK接入(2)之Android Google Play内支付(in-app Billing)接入

    SDK接入(2)之Android Google Play内支付(in-app Billing)接入 继上篇SDK接入(1)之Android Facebook SDK接入整理完Facebook接入流程之 ...

  2. Android开发SDK接入机智云,智能家居实现APP远程控制多设备

    代码地址如下:http://www.demodashi.com/demo/12847.html 一.前言. 此框架只用了一周星期做了出来,因为对机智云的框架比较熟悉了 !期间SDK初始化出了问题,去咨 ...

  3. 在Android上实现使用Facebook登录(基于Facebook SDK 3.5)

    准备工作: 1.       Facebook帐号,国内开发者需要一个vpn帐号(网页可以浏览,手机可以访问) 2.       使用Facebook的SDK做应用需要一个Key Hashes值. 2 ...

  4. laravel 5.5 接入蚂蚁金服官方SDK(支付宝APP支付为例)开发步骤

    一.创建应用及配置 首先需要到蚂蚁金服开放平台(open.alipay.com)注册应用,获取应用id(APP_ID),并且配置应用,主要是签约应用,这个需要审核,一般2-5个工作日,审核通过后,去生 ...

  5. 关于Darwin接入私有协议、私有SDK码流的讨论

          最近做到云视频/云监控的项目,跟团队伙伴讨论到一个架构问题,就是将私有协议的码流数据接入到Darwin,再通过Darwin对外提供高效的RTSP/RTP服务.说到私有协议接入Darwin, ...

  6. 【Unity游戏开发】接入UWA_GOT的iOS版SDK以后无法正常出包

    一.正文 问: RT,最近有看到UWA_GOT工具新增了iOS版本的支持,于是下载了最新的工具包进行了接入测试.是按照文档直接将UWA_GOTv2.0.1_iOS.unitypackage导入进了Un ...

  7. FaceBook SDK登录功能实现(Eclipse)

    由于公司游戏要进行海外推广,所以要我们接入FBSDK 实现登录,分享,投放,所以写这篇文章,也算是个工作总结.1.资料 (1).FB SDK github源码地址为 (2): [FB SDK中文接入文 ...

  8. 集成Facebook SDK之Facebook登录

    前言 这几天应公司需求,需要在项目中接入facebook的登录,现在闲下来后再次巩固一下! 准备工作 保证自己的网络已经翻墙,能够进入Facebook网页 准备一个FB的开发者账号,如果没有可以免费申 ...

  9. Android 第三方应用接入微信平台(1)

    关键字:微信开放平台   Android第三方应用接入微信 微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台, 毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可 以节约 ...

随机推荐

  1. ubuntu+mono+jexus 搭建.net的web平台 实现.net跨平台

    准备工作: vmware 用来安装 ubuntu 下载地址:VMware-workstation-9.0.1-894247.exe.tar 注册码: 1A4P8-DMK0N-FZ431-7K8NH-2 ...

  2. 一不小心写了个WEB服务器

    开场 Web服务器是啥玩意? 是那个托管了我的网站的机器么? No,虽然那个也是服务器,但是我们今天要说的Web服务器主要是指像IIS这样一类的,用于处理request并返回response的工具,没 ...

  3. 为什么说每个程序员都应该刷几道LeetCode?

    2015年即将过去,最近在回顾和总结过去一年的工作经历,发现自己并不能算是一名合格的程序员. Google某前员工Lucida在文章<白板编程访谈——Why,What,How>当中写道: ...

  4. angular1

    1.双向绑定: 可进可出 2.依赖注入 函数有定义方定义 3.MVC M: Model 模型--数据 V: View 视图--表现层 C: Controller  控制器--业务逻辑 4.模板: {{ ...

  5. Kafka 文档引言

    原文地址:https://kafka.apache.org/documentation.html#semantics 1.开始 1.1 引言 Kafka是一个分布式,分区队列,冗余备份的消息存储服务. ...

  6. 前端学HTTP之数据传输

    × 目录 [1]客户机处理 [2]集线器处理 [3]路由器1处理[4]路由器2处理[5]交换机处理[6]服务器处理[7]反向传输 前面的话 上一篇中,介绍了网络基础.本文将详细介绍客户机在浏览网页ab ...

  7. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  8. 快速打造跨平台开发环境 vagrant + virtualbox + box

    工欲善其事必先利其器,开发环境 和 开发工具 就是 我们开发人员的剑,所以我们需要一个快并且好用的剑 刚开始做开发的时候的都是把开发环境 配置在 自己的电脑上,随着后面我们接触的东西越来越多,慢慢的电 ...

  9. angularJS实用的开发技巧

    一.开端 真的是忙完这一阵子就可以忙下一阵子了啊... 最近在做一个angularJS+Ionic的移动端项目...记录一些技巧,方便自己以后查阅,也方便需要的人可以看一看...^_^ 二.基础原则了 ...

  10. 使用java代码关闭指定端口的程序-windows

    转载请请在页首注明作者与出处 一:问题由史 今天遇到一个问题,就是在实现自动化灾备的时候,发现原有死掉的程序没有完全关闭,当然这都不是本文的重点,重点是这个时候,我得把它完全关闭,所以才有了这篇文章. ...