SDK接入(1)之Android Facebook SDK接入 由於游戲已上線,且處於維護階段,所以有空寫寫各種SDK接入過程和遇到的問題,也當作一種工作總結。SDK接入主流分為這麼幾類, 、`支付 分享 推送 統計`等,達到借‘他山之石’的效果。順便吐槽下,現在國內是個渠道就弄個所謂的自己的SDK ...
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/
版權所有,歡迎保留原文鏈接進行轉載 :)