SDK接入(1)之Android Facebook SDK接入
SDK接入(1)之Android Facebook SDK接入
由于游戏已上线,且处于维护阶段,所以有空写写各种SDK接入过程和遇到的问题,也当作一种工作总结。SDK接入主流分为这么几类,登录、支付、分享、推送、统计等,达到借‘他山之石’的效果。顺便吐槽下,现在国内是个渠道就弄个所谓的自己的SDK,各种文档更新不及时、文档与Sample不对应、Sample测试不全或运行报错、技术支持沟通无人回复等,真是深受其害。
(1)接入前准备工作
- 需科学上网(翻墙,VPN什么的自己解决),注册Facebook(后面统称FB)帐号。
- FB SDK下载地址为:https://origincache.facebook.com/developers/resources/?id=facebook-android-sdk-current.zip
- FB SDK接入文档地址为:https://developers.facebook.com/docs/android/getting-started/
- FB SDK完整源码地址为:https://github.com/facebook/facebook-android-sdk
(2)创建应用,获取应用编号和密钥
步骤如下:
登录facebook.com,在侧边可以看到有个开发者项,点击管理应用程序。如图:

创建应用,并添加要发布的平台。填写
Package Name和Default 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
- 生成KeyHash,并配置KeyHash。
- 下载OpenSSL,并添加到环境变量。
- 命令行执行:keytool -exportcert -alias androiddebugkey -keystore
%HOMEPATH%\.android\debug.keystore| openssl sha1 -binary | openssl
base64,注意-keystore后面是签名文件的路径,执行完之后会生成如图:

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



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

修改build.gradle,添加如下配置:
repositories {
flatDir {
dirs 'libs'
}
} compile(name: 'facebook-android-sdk-4.8.2', ext: 'aar')
如图:

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

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

拷贝assets,res,AndroidManifest.xml,classes.jar,新建Eclipse工程并覆盖对应文件。
(4)FB SDK接入
配置FB id(FB后台获取的应用编号)。打开
res/values/strings.xml,添加:<string name="facebook_app_id">172633573185136</string>
配置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>
初始化FB SDK和激活事件,在Application的
onCreate()调用如下代码:public void onCreate() {
super.onCreate();
FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(this);
}
讲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" />
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
}
});
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);
}
}
登录结果处理,在
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:
}
}
使用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接入常见错误
登录权限异常,FacebookCallback的onError中返回FacebookAuthorizationException:
解决:一般是FB帐号设置了安全验证,例如登录需要安全码之类的,需要修改FB安全设置。Invalid key hash错误。如图:

解决:需要确认正式打包的签名文件(.keystore)和生成keyHash时是否为同一个签名文件。
作者:AlphaGL
出处:http://www.cnblogs.com/alphagl/
版权所有,欢迎保留原文链接进行转载
SDK接入(1)之Android Facebook SDK接入的更多相关文章
- SDK接入(2)之Android Google Play内支付(in-app Billing)接入
SDK接入(2)之Android Google Play内支付(in-app Billing)接入 继上篇SDK接入(1)之Android Facebook SDK接入整理完Facebook接入流程之 ...
- Android开发SDK接入机智云,智能家居实现APP远程控制多设备
代码地址如下:http://www.demodashi.com/demo/12847.html 一.前言. 此框架只用了一周星期做了出来,因为对机智云的框架比较熟悉了 !期间SDK初始化出了问题,去咨 ...
- 在Android上实现使用Facebook登录(基于Facebook SDK 3.5)
准备工作: 1. Facebook帐号,国内开发者需要一个vpn帐号(网页可以浏览,手机可以访问) 2. 使用Facebook的SDK做应用需要一个Key Hashes值. 2 ...
- laravel 5.5 接入蚂蚁金服官方SDK(支付宝APP支付为例)开发步骤
一.创建应用及配置 首先需要到蚂蚁金服开放平台(open.alipay.com)注册应用,获取应用id(APP_ID),并且配置应用,主要是签约应用,这个需要审核,一般2-5个工作日,审核通过后,去生 ...
- 关于Darwin接入私有协议、私有SDK码流的讨论
最近做到云视频/云监控的项目,跟团队伙伴讨论到一个架构问题,就是将私有协议的码流数据接入到Darwin,再通过Darwin对外提供高效的RTSP/RTP服务.说到私有协议接入Darwin, ...
- 【Unity游戏开发】接入UWA_GOT的iOS版SDK以后无法正常出包
一.正文 问: RT,最近有看到UWA_GOT工具新增了iOS版本的支持,于是下载了最新的工具包进行了接入测试.是按照文档直接将UWA_GOTv2.0.1_iOS.unitypackage导入进了Un ...
- FaceBook SDK登录功能实现(Eclipse)
由于公司游戏要进行海外推广,所以要我们接入FBSDK 实现登录,分享,投放,所以写这篇文章,也算是个工作总结.1.资料 (1).FB SDK github源码地址为 (2): [FB SDK中文接入文 ...
- 集成Facebook SDK之Facebook登录
前言 这几天应公司需求,需要在项目中接入facebook的登录,现在闲下来后再次巩固一下! 准备工作 保证自己的网络已经翻墙,能够进入Facebook网页 准备一个FB的开发者账号,如果没有可以免费申 ...
- Android 第三方应用接入微信平台(1)
关键字:微信开放平台 Android第三方应用接入微信 微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台, 毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可 以节约 ...
随机推荐
- linux压缩和解压缩命令大全
.tar 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName ------------------------------------- ...
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- wx.onMenuShareTimeline使用注意事项
我在开发测试过程中,发现使用wx.onMenuShareTimeline无效果,没有显示我定义的图片.title和链接,经过调试发现原因如下: 1.图片大小要大于300pix才能显示 2.这个方法必须 ...
- magic方法的magic
事实上,在python中一个类被实例化的时候首先被调用的并不是__init__方法,而是__new__方法.只是new方法一般很少重写.new方法会有返回值传给init方法.因此,init方法不能够有 ...
- 【MSP是什么】MSP认证之项目群管理学习总结
首先要说的是,我这篇体会是针对一定的背景的,不能算是一种通用的管理方式,只能是我自己的经验总结,能给大家平常的管理提供一点思路,我就很满足了.先说说背景,我所在公司做的是大型桌面应用软件,简单点说就是 ...
- babel presets stage-x
在一些新框架的代码中,常基于es6/7标准来书写代码.鉴于这些标准被没有被浏览器广泛支持,我们一般使用babel来将使用e6/7标准书写的代码降级编译(或者说转译)为浏览器可解析的es4/5代码. 以 ...
- backup3:master 数据库的备份和还原
在SQL Server 中,master 数据库记录系统级别的元数据,例如,logon accounts, endpoints, linked servers, and system configur ...
- SQL Server中TOP子句可能导致的问题以及解决办法
简介 在SQL Server中,针对复杂查询使用TOP子句可能会出现对性能的影响,这种影响可能是好的影响,也可能是坏的影响,针对不同的情况有不同的可能性. 关系数据库中SQL语句只 ...
- Python遇到字符编码出问题的一个相对万能的办法
在使用Python做爬虫的过程中,经常遇到字符编码出问题的情况. UnicodeEncodeError: 'ascii' codec can't encode character u'\u6211' ...
- 让DIV中文字换行显示
1. <style> div { white-space:normal; word-break:break-all; word-wrap:break-word; } </style& ...