SDK接入(1)之Android Facebook SDK接入
由于游戏已上线,且处于维护阶段,所以有空写写各种SDK接入过程和遇到的问题,也当作一种工作总结。SDK接入主流分为这么几类,登录
、支付
、分享
、推送
、统计
等,达到借‘他山之石’的效果。顺便吐槽下,现在国内是个渠道就弄个所谓的自己的SDK,各种文档更新不及时、文档与Sample不对应、Sample测试不全或运行报错、技术支持沟通无人回复等,真是深受其害。
(1)接入前准备工作
- 需科学上网(FQ,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/
版权所有,欢迎保留原文链接进行转载