集成Facebook SDK之Facebook登錄
- 2020 年 7 月 20 日
- 筆記
- Cocos Creator
前言
這幾天應公司需求,需要在項目中接入facebook的登錄,現在閑下來後再次鞏固一下!
準備工作
- 保證自己的網路已經翻牆,能夠進入Facebook網頁
- 準備一個FB的開發者帳號,如果沒有可以免費申請,附上官方網址
流程
1、登錄facebook後,點擊左側 「展開」欄,
2、選擇點擊管理應用—添加新應用,創建新的應用,然後根據自己的需求選擇相應的用途,根據他的要求填寫就可以了。
3、創建完畢後,添加產品時選擇Facebook登錄
4、點擊設置後,選擇Android平台,然後按照FB的步驟完成。
這裡具體演示下這些步驟
1、下載這裡就不講解了
2、導入Facebook SDK
對應的在Android Studio中的是
對應的在Android Studio中的是
隨後構建一下項目(點擊上面鎚子的icon按鈕進行構建)
3、在FB上填寫Android項目資訊,填寫完後要Save一下
4、添加密鑰
這個根據文檔去輸入相應的命令就可以得到密鑰了,不過有的設置了密碼的就需要輸入密鑰密碼才能得到密鑰,然後在FB的文檔中填入這個生成的密鑰就可以了,也需要記得Save一下。
5、啟用單點登錄
這個單擊啟用單點登錄,然後Save
6、根據Facebook上面的文檔在AndroidStudio的相應位置添加程式碼
1、打開您的 /app/res/values/strings.xml
文件。
2、添加如下所示的程式碼:
<string name="facebook_app_id">應用編號</string> <string name="fb_login_protocol_scheme">fb+應用編號</string>
3、打開 /app/manifest/AndroidManifest.xml
文件。
4、在 application
元素後添加以下 uses-permission
元素:
<uses-permission android:name="android.permission.INTERNET"/>
5、在 application
元素中添加以下 meta-data
元素、一個針對 Facebook 的 activity 元素以及一個針對 Chrome 自定義選項卡的 activity 元素和意向篩選條件:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" /> <activity android:name="com.facebook.CustomTabActivity" android:exported="true"> <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="@string/fb_login_protocol_scheme" /> </intent-filter> </activity>
7、設置登錄按鈕
我這裡是直接在項目中設置按鈕登錄
js程式碼
onClickLogin(){ jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "LoginFb", "()V"); }
java程式碼
public static void LoginFb(){ LoginManager.getInstance().logInWithReadPermissions(sCocos2dxActivity, Arrays.asList("public_profile")); }
8、註冊回調
在AppActivity的onCreate方法中添加以下程式碼
sCocos2dxActivity = this; callbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Toast.makeText(getApplicationContext(), "facebook登錄成功" + loginResult.getAccessToken().getUserId(), Toast.LENGTH_SHORT).show(); final String Fid = loginResult.getAccessToken().getUserId(); Cocos2dxHelper.runOnGLThread(new Runnable() { @Override public void run() { Cocos2dxJavascriptJavaBridge.evalString("window.FbLoginCallback("+Fid+");"); } }); } @Override public void onCancel() { Toast.makeText(getApplicationContext(), "facebook登錄取消", Toast.LENGTH_SHORT).show(); } @Override public void onError(FacebookException error) { Toast.makeText(getApplicationContext(), "facebook登錄錯誤", Toast.LENGTH_SHORT).show(); } });
最後,在 onActivityResult
方法中調用 callbackManager.onActivityResult
,通過 callbackManager
將登錄結果傳遞至 LoginManager
。
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { callbackManager.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data); }
最後在導出的項目中點擊按鈕看看效果