top of page
搜尋

CocosCreator 2.4.5 整合FB登入(Android App)

  • 作家相片: 承鑫 郭
    承鑫 郭
  • 2021年7月15日
  • 讀畢需時 2 分鐘

建立FB開發者應用程式




加入FBLogin相依套件

  • 在專案中開啟 your_app > Gradle Scripts > build.gradle(專案),確認 buildscript { repositories {}} 中列出了以下存放庫: jcenter()

  • 在專案中開啟 your_app > Gradle Scripts > build.gradle(模組:應用程式),然後將下列實作陳述式新增至 dependencies{} 區塊以使用最新版的 Facebook 登入 SDK: implementation 'com.facebook.android:facebook-login:[8.1)'

  • 建置您的專案。


編輯資源和 Manifest



將應用程式與您的套件名稱和預設類別建立連結


提供您應用程式的「開發金鑰雜湊」和「發行金鑰雜湊

  • keytool -exportcert -alias androiddebugkey -keystore ~/.android/xxx.keystore | openssl sha1 -binary | openssl base64

  • Android 應用程式必須先以發行密鑰雜湊進行數位簽署,才能上傳至商店。若要產生發行密鑰雜湊,請在 Mac 或 Windows 上執行下列指令,並替換成您的發行密鑰別名和 KeyStore 路徑:

  • keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64


實作FB登入的類(由於此類某些方法需要由cocos呼叫, 故呼叫的Fun一定要Static) 僅提供片段


 /** 監聽 onActivityResult **/
 public static void onActivityResult(int requestCode, int resultCode, Intent data) {
       Log.i(TAG, "onActivityResult data = " + data.toString());

       if (mCallbackManager != null) {
 mCallbackManager.onActivityResult(requestCode, resultCode, data);
 }
   }

 /** 初始化SDK **/
 public static void initSdk(Activity activity) {
       Log.i(TAG, "initSdk");

 mActivity = activity;
 mCallbackManager = CallbackManager.Factory.create();

 initLogin();
 //initShare();
 }

 /** 登入初始化 **/
 private static void initLogin() {
       Log.i(TAG, "initLogin");

 LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
 @Override
 public void onSuccess(LoginResult loginResult) {
               Log.e(TAG, "login onSuccess loginResult = " + loginResult.toString());
/** FB登入 **/
   /** 因為Cocos呼叫必須為Static **/
 public static void facebookLogin() {
       Log.i(TAG, "facebookLogin");

       if (isAuthorization()) {
         //已经授权
         requestAuthInfo();
         return;
       }

       Collection<String> permissions = 
       Arrays.asList("public_profile", "email");
                       LoginManager.getInstance().logInWithReadPermissions(mActivity,   permissions);
 }


 /** 獲取授權個人訊息 **/
 private static void requestAuthInfo() {
       Log.i(TAG, "requestAuthInfo");

 AccessToken accessToken = AccessToken.getCurrentAccessToken();
 GraphRequest graphRequest = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
 @Override
 public void onCompleted(JSONObject object, GraphResponse response) {
               Log.e(TAG, "requestAuthInfo onCompleted object = " + object.toString() + " response = " + response.toString());

               if (response.getError() != null) {
 //授权错误
                   //通知js
 final String eval = String.format("xxx.onFacebookLoginError('%s')", response.getError().getErrorMessage());
 Cocos2dxHelper.runOnGLThread(new Runnable() {
 @Override
 public void run() {
 try {
                               Cocos2dxJavascriptJavaBridge.evalString(eval);
 } catch (Exception e) {
                               e.printStackTrace();
 }
                       }
                   });
                   return;
 }

 //id:1565455221565
 String id = object.optString("id");
 //昵称:Zhang San
 String name = object.optString("name");
 //性别:比如 male (男)  female (女)
 String gender = object.optString("gender");
 //邮箱:比如:56236545@qq.com
 String email = object.optString("email");
 //头像
 String picture = "";
 JSONObject objPicture = object.optJSONObject("picture");
               if (objPicture != null) {
                   JSONObject objPictureData = objPicture.optJSONObject("data");
                   if (objPictureData != null) {
                       picture = objPictureData.optString("url");
 }
               }
 //头像
 String avatar = String.format("https://graph.facebook.com/%s/picture?type=large", id);
 String authInfo = String.format("{\"id\":\"%s\",\"name\":\"%s\",\"gender\":\"%s\",\"email\":\"%s\",\"picture\":\"%s\",\"avatar\":\"%s\"}",
 id, name, gender, email, picture, avatar);

 //通知js
 final String eval = String.format("xxx.onFacebookLoginSuccess('%s')", authInfo);
 Cocos2dxHelper.runOnGLThread(new Runnable() {
 @Override
 public void run() {
 try {
                           Cocos2dxJavascriptJavaBridge.evalString(eval);
 } catch (Exception e) {
                           e.printStackTrace();
 }
                   }
               });
 }
       });

 Bundle param = new Bundle();
 param.putString("fields", "id,name,gender,email,picture");
 graphRequest.setParameters(param);
 graphRequest.executeAsync();
 }

初始化管理者



監聽主Activity的OnActivityResult()




Cocos呼叫原生


//FB登入
 fbLogin: function () {
 console.log("Facebook login");
 
 if (cc.sys.isNative) {
 if (cc.sys.os == cc.sys.OS_ANDROID) {
 let className = "tools/FacebookSdk";
 let methodName = "facebookLogin";
 let methodSignature = "()V";
 jsb.reflection.callStaticMethod(className, methodName,    methodSignature);
 } 


 
 
 

Comments


文章: Blog2_Post

訂閱表單

感謝您提交以上資訊!

  • Facebook
  • Twitter
  • LinkedIn

©2020 by CCGamer. Proudly created with Wix.com

bottom of page