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

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

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

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

(1)接入前准备工作

  1. 需***(FQ,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
    tmXikaY.png

    注:Package Name为应用程序的包名,与Manifest里面的包名对应。
    Default Activity Class Name为第一个启动的Activity,要用完整的类名,与声明如下的Activity类名对应。


    1.     <intent-filter>
    2.        <action android:name="android.intent.action.VIEW"/>
    3.        <category android:name="android.intent.category.DEFAULT"/>
    4.        <category android:name="android.intent.category.BROWSABLE"/>
    5.        <data android:scheme="bigdevil"/>
    6.    </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后面是签名文件的路径,执行完之后会生成如图:
      LMOibRD.png

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

  3. 其它配置,如图:
    QLQNDNn.png
    sg3LG8Z.png
    BxBMZ8N.png

(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,添加如下配置:


    如图:
    build.gradle修改
    然后,重新Rebuild Project一下,成功则会生成如下:
    Rebuild

    1.    repositories {
    2.        flatDir {
    3.            dirs 'libs'
    4.        }
    5.    }
    6.    compile(name: 'facebook-android-sdk-4.8.2', ext: 'aar')

若使用Eclipse作为IDE,则需将.aar文件解压。解压完如下图:
facebook-android-sdk-4.8.2.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项下配置:


    1. <application android:label="@string/app_name">
    2.     <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    3. </application>
  3. 初始化FB SDK和激活事件,在Application的onCreate()调用如下代码:


    1. publicvoidonCreate() {
    2. super.onCreate();
    3. FacebookSdk.sdkInitialize(getApplicationContext());
    4. AppEventsLogger.activateApp(this);
    5. }
  4. 讲FacebookActivity配置到AndroidManifest中,如下:


    1. <activity
    2.     android:name="com.facebook.FacebookActivity"
    3.     android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    4.     android:label="@string/app_name"
    5.     android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
  5. FB登录分为带Facebook按钮和不带Facebook按钮两种形式。带Facebook按钮需要将FB提供的LoginButton添加到自己的布局中。而游戏登录,只需要点击对应的游戏登录按钮再调用FB登录即可。所以下面介绍下,不带Facebook按钮的这种形式。

    在MainActivity中的onCreate()中注册登录回调,代码如下:


    1. callbackManager = CallbackManager.Factory.create();
    2. LoginManager.getInstance().registerCallback(callbackManager,
    3.        new FacebookCallback<LoginResult>() {
    4.             @Override
    5.             public void onSuccess(LoginResult loginResult) {
    6.                  // App code
    7.             }
    8.             @Override
    9.             public void onCancel() {
    10.                  // App code
    11.             }
    12.             @Override
    13.             public void onError(FacebookException exception) {
    14.                  // App code
    15.              }
    16. });
  6. FB登录,注意登录权限需使用public_profile,并在onActivityResult中处理用户授权,代码如下:


    onActivityResult处理代码:


    1. public static void onActivityResult(int requestCode, int resultCode, Intent data) {
    2.     if (callbackManager !=null) {
    3.         callbackManager.onActivityResult(requestCode, resultCode, data);
    4.     }
    5. }
    6. private static finalString PERMISSION ="public_profile";
    7. LoginManager loginManager = LoginManager.getInstance();
    8. loginManager.setDefaultAudience(loginManager.getDefaultAudience());
    9. loginManager.setLoginBehavior(loginManager.getLoginBehavior());
    10. loginManager.logInWithReadPermissions(AppActivity.context_self, Arrays.asList(PERMISSION));
  7. 登录结果处理,在FacebookCallback中,代码如下:


    1. public void onSuccess(LoginResult loginResult) {
    2.     AccessToken accessToken = loginResult.getAccessToken();
    3.     String userId = accessToken.getUserId();
    4.     String token = accessToken.getToken();
    5.     // TODO:拿到userId和token,传给游戏服务器校验
    6. }
    7. public void onCancel() {
    8. }
    9. public void onError(FacebookException exception) {
    10.     if (exception instanceof FacebookAuthorizationException) {
    11.         LoginManager.getInstance().logOut();
    12.         // TODO:
    13.     }
    14. }
  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错误。如图:
    key hash错误
    解决:需要确认正式打包的签名文件(.keystore)和生成keyHash时是否为同一个签名文件。

作者:AlphaGL
出处:http://www.cnblogs.com/alphagl/
版权所有,欢迎保留原文链接进行转载 :)

posted on   2016-10-10 10:09   alphagl 阅读(   ...) 评论(   ...)   编辑   收藏

转载于:https://www.cnblogs.com/alphagl/p/5941749.html

免责声明:文章转载自《SDK接入(1)之Android Facebook SDK接入》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SSH端口转发详解及实例windows的各种扩展名详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Element-ui tabs标签标题添加自定义图标

关键点:slot="label"{{item.label}}˂iclass="el-icon-questi...

USBWriter之后恢复磁盘大小

USBWriter之后恢复磁盘大小的方法:1,cmd2,diskpart3,listdisk4,selectdisk*5,clean6、在我的电脑点右键,管理,然后选磁盘管理,选择USB后,右键,然后再新建卷就可以了。...

【JVM】元空间详解 Metaspace

nocs。JpgNoKlassisMetaspaceNoKlassinMetaspaces专用于存储其他与klass相关的内容,如方法、常量池等。它可以由多个不连续的存储器组成。在元空间GC之后,还将调整阈值。默认情况下,MaxMetaspaceSize基本上是无限的,因为大多数元空间都是在本地内存中分配的,但它仍然受到本地内存大小的限制。为了防止元空间的无...

【Lua】使用随机数(转)

游戏中有一个用于创建角色的随机命名功能,它使用随机数。我在网上找到一篇关于在Lua使用随机数的文章。标记它。Lua需要两个函数来生成随机数:数学。randomseed,数学。数学随机种子接收整数n作为随机序列种子。将系统时间视为随机种子是很自然的,也就是说,数学随机——然后连续生成i=1,5do打印结束的随机数,但问题出现了。如果程序在短时间内运行几次,您得...

uniapp 实现动态切换全局主题色

要求:要在开发的应用程序中切换主题颜色,如果只需要一种主题颜色,但不需要切换,则可以使用uniappSCSS文件文档思想:预先在公共css中定义所需的主题颜色。这里只是一个定义两种颜色的参考文档的示例,可以从中获得想法。您可以使用css属性选择器动态设置数据xx以动态更改主题颜色。最初,您希望将一个变量直接混合到mixin中,以实现主题颜色的全局控制,忽略了...

Vmware安装Linux打开一直黑屏的四个解决方法

方法1:以管理员身份打开cmd,输入netshwinsocksreset,按enter键,然后重新启动计算机方法2:关闭虚拟机,编辑虚拟机设置,选择硬件中的虚拟机设置、删除加速3D图形前面的复选框,然后再次启动虚拟机。最终的解决方案:我一开始使用的是14版,但上述方法都不能解决黑屏问题。然后我使用版本12来解决这个问题。...