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. BZOJ3198[SDOI2013]SPRING

    Description Input Output Sample Input 3 3 1 2 3 4 5 6 1 2 3 0 0 0 0 0 0 4 5 6 Sample Output 2 HINT 题 ...

  2. shell之sort命令

    1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出. [rocrocket@rocrocket progr ...

  3. 通过Mono 在 Heroku 上运行 .NET 应用

    英文原文:Running .NET on Heroku 中文原文:在 Heroku 上运行 .NET 应用 自从加入了Heroku之后,我就想在这个平台上运行.NET程序.现在我很高兴向大家宣布,我们 ...

  4. AutoMapper(二)

    返回总目录 首先,先创建一个控制台项目,引用AutoMapper程序集,创建三个类User,UserDto,UserMappingProfile,下面的知识点的演示都以此项目为基础,代码分别如下: n ...

  5. Hadoop2 自己动手编译Hadoop的eclipse插件

    前言:       毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...

  6. 【初探Spring】------Spring IOC(一)

    IOC:Inversion of Control(控制反转).IOC它所体现的并不是一种技术,而是一种思想,一种将设计好的对象交给容器来管理的思想.IOC的核心思想就体现在控制.反转这两个词上面,要理 ...

  7. CSharpGL(21)用鼠标拾取、拖拽VBO图元内的点、线或本身

    CSharpGL(21)用鼠标拾取.拖拽VBO图元内的点.线或本身 效果图 以最常见的三角形网格(用GL_TRIANGLES方式进行渲染)为例. 在拾取模式为GeometryType.Point时,你 ...

  8. 【PRINCE2是什么】PRINCE2认证之七大主题(1)

    进入第一个主题,PRINCE2商业论证:PRINCE2指出,商业论证就是进行判断是否值得对项目进行投资,值不值的问题.PRINCE2的商业论证有四个 在项目开始时,开发商业论证.在整个项目生命周期中, ...

  9. static,你还敢用吗?

    我用火狐的HttpRequester测试开发组里一个同学发布的Web API接口,遇到了一个奇怪的问题. 我测试边界情况时,第一次调用响应的结果是正常的,但当再次及以后的请求时,却返回了异常“Syst ...

  10. 用Hibernate和Struts2+jsp实现分页查询、修改删除

    1.首先用get的方法传递一个页数过去 2.通过Struts2跳转到Action 3.通过request接受主页面index传过的页数,此时页数是1, 然后调用service层的方法获取DAO层分页查 ...