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. 【译】Meteor 新手教程:在排行榜上添加新特性

    原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...

  2. ASP.NET Aries JSAPI 文档说明:AR.DataGrid、AR.Dictionary

    AR.Global 文档 1:对象或属性: 名称 类型 说明 DG 对象 DataGrid操作对象 //datagrid集合,根据ID取出DataGrid对象,将Json当数组用. Items: ne ...

  3. 剁手党也有春天 -- 淘宝 UWP ”比较“功能诞生记

    前言 网购已经不再是现在的时髦,而变成了我们每天的日常生活.上网已经和买买买紧密地联系在了一起,成为了我们的人生信条.而逛街一词,越来越多地变成了一种情怀.有时候我们去逛街,要么是为了打发时间,要么是 ...

  4. ucos实时操作系统学习笔记——操作系统在STM32的移植

    使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...

  5. C#的泛型的类型参数可以有带参数的构造函数的约束方式吗?

    Review后看到标题让我十分羞愧自己语文功底太差,估计...请见谅......我还特地把这句写回开头了...... 问题 前天遇到的一个问题,所以在MSDN发了个问,刚也丰富了下问题,关于泛型的. ...

  6. 关于安装安卓SDK出现无法更新问题时的解决办法

    近日,如果安装过安卓的同学可能知道,大家在使用Android SDK升级或者安装SDK的时候,出现了访问Failed to fetch URL http://dl-ssl.google.com/and ...

  7. ABP源码分析十四:Entity的设计

    IEntity<TPrimaryKey>: 封装了PrimaryKey:Id,这是一个泛型类型 IEntity: 封装了PrimaryKey:Id,这是一个int类型 Entity< ...

  8. Axure原型制作规范

    一. 名词定义: Sitemap 导航图 Widgets 组件 Master 库 Label 控件名 Interactions 交互动作 Annotations 注释 Location and siz ...

  9. iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处

    NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是简单的终止程序,而NSAssert会报告出错误信息并且打印出来.所以尽管的使用NSAssert,可以不去使用asser ...

  10. JavaScript权威设计--事件处理介绍(简要学习笔记十七)

    1.事件相关概念 事件类型:一个用来说明发生什么类型事件的字符串 事件目标:是发生的事件或与之相关的对象. 事件处理程序(事件监听程序):是处理货响应事件的函数. 事件对象:是与特定事件相关并且包含有 ...