zoukankan      html  css  js  c++  java
  • SDK接入(1)之Android Facebook SDK接入

    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

      注: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')
      

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

    若使用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项下配置:

       <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错误。如图:
      key hash错误
      解决:需要确认正式打包的签名文件(.keystore)和生成keyHash时是否为同一个签名文件。

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

  • 相关阅读:
    奇异值分解 SVD 的数学解释
    [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)2
    [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)
    pycharm debug后会出现 step over /step into/step into my code /force step into /step out 分别表示
    单步调试 step into/step out/step over 区别
    终端(terminal)、tty、shell、控制台(console)、bash之间的区别与联系
    pytorch: Variable detach 与 detach_
    RNN,LSTM,GRU基本原理的个人理解
    FMDB官方使用文档-GCD的使用-提高性能(翻译)
    CocoaPods一个Objective-C第三方库的管理利器
  • 原文地址:https://www.cnblogs.com/alphagl/p/5941749.html
Copyright © 2011-2022 走看看