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


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

如圖:
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/
版權所有,歡迎保留原文鏈接進行轉載 😃


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM