小屋創作

日誌2020-05-09 12:43

Cocos Creator 2.3.2 SDKBOX FaceBook第三方登入串接教學

作者:Majitoo

這幾個禮拜在公司串第三方登入和第三方支付花了不少時間
因此想做個筆記

Cocos Creator版本:2.3.2
NDK : 21.0.6113669 (Android Studio上下載的最新版)
SDK : Android Studio上載的最新版
系統:Window
目標平台:Android

這邊我是先建立一個新的專案用來演示登入效果
文末會再貼上專案下載連結

平常我自己是用typescript做開發
所以我是新建一個helloworld-typescript 專案
建完後請先確認自己新建專案能否打包APK成功
再寫本文時就有遇到項目編譯APK時出現
externalNativeBuildReleaseFeature的錯誤
好像是我資料夾名稱出現_底線報錯
我改檔案名稱就好了

能成功打包APK後,可以來開始安裝SDKBOX套件
打開CocosCreator
找到SDKBox並選擇Launch


點擊import可以看到這邊提供很多SDK

找到Social選項有個Facebook點擊import
專案就安裝好FaceBook SDK了!

此時打開CocosCreator專案
項目->構建發布

上圖我說明一下我自己是甚麼場合用這四個按鈕
1.
  是當我編譯失敗時出現fail如上圖,此時我點擊1按鈕會出現記事本
  可以查看編譯失敗的log
2.
  構建按鈕,當你新建一個乾淨的Cocos專案時,是不會有Build資料夾的,
  只要點擊構建按鈕則會產生出Build資料夾
3.
  編譯按鈕,當我勾選調試模式看Log,接著準備接換成release模式時,
  我會再重新點擊編譯按鈕,確保打包出來的模式有更換
4.
  運行按鈕,當我手機USB有連接電腦時,按下運行則會直接安裝APP到手機裡

平常我自己在做真機測試時,當只有更改程式碼時,
只需要點擊構建+運行即可同步最新code到真機上,是不必點編譯按鈕的。

回到正題安裝完FaceBook SDK後
點擊構建按鈕
構建完後接著點擊編譯按鈕會發現
編譯失敗了!
點擊上圖1的按鈕
可以查看打包出錯原因

點擊後會出現記事本
可以看到其中一行錯誤是
* What went wrong:
Execution failed for task ':game:transformClassesAndResourcesWithProguardForRelease'.

此時可以打開專案目錄下的
build\jsb-link\frameworks\runtime-src\proj.android-studio\app\proguard-rules.pro
build\jsb-link\frameworks\runtime-src\proj.android-studio\game\proguard-rules.pro
並且再這個兩個檔案結尾處加上

# facebook
-keep public class com.facebook.** { *; }
-dontwarn com.facebook.**

# cocos2d-x
-keep public class org.cocos2dx.** { *; }
-dontwarn org.cocos2dx.**
-keep public class com.chukong.** { *; }
-dontwarn com.chukong.**

# google play service
-keep public class com.google.android.gms.** { public *; }
-dontwarn com.google.android.gms.**

-keep class com.google.protobuf.** { *; }
-dontwarn com.google.protobuf.**

-keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();
}

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
    public static final *** NULL;
}

-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
    @com.google.android.gms.common.annotation.KeepName *;
}

-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

#sdkbox
-keep class com.sdkbox.** { *; }
-dontwarn com.sdkbox.**

加完之後 再重新構建+編譯
就可以發現編譯正常了

https://home.gamer.com.tw/creationDetail.php?sn=4769755
我在這篇文章有列出更多其他打包失敗的解法


接著裝完FB SDK 環境沒問題的話,
就可以開始去FB 開發者頁面建立一個應用程式
https://developers.facebook.com/?no_redirect=1


建立好應用後會看到應用程式編號
可以先記下來後面會用到
再依照下圖操作


接著不斷的點擊繼續就好
到第三步驟時
只要按照他的說明去填即可

再來是最麻煩的第四步會看到

大意是說你需要先產生一個keystore
然後cocos專案就要使用這個key
接著再輸入keytool -exportcert指令取得到密鑰雜湊後
再填入下方選項內

詳細步驟如下:
1.產生一組keystore
keytool -genkey -v -keystore tester.keystore -alias tester -keyalg RSA -validity 10000
我這是用指令的方式產生的,也可以利用Android Studio去產生 效果都是一樣的

2.下載openssl-0.9.8e_X64檔案
  我自己是下載0.9.8e版本的,下載後解壓縮放自己要的位子

3.取得密鑰
指令意思大致上是這樣
keytool -exportcert -alias {keystore別名} -keystore "{keyStore路徑}" | "{openssl.exe路徑}"sha1 -binary | "{openssl.exe路徑}" base64

以我的專案來說會是
keytool -exportcert -alias tester -keystore "C:\Users\Jim\tester.keystore" | "C:\Users\Jim\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\Users\Jim\openssl-0.9.8e_X64\bin\openssl.exe" base64

圖中紅框我拿到的金鑰
再把此金鑰貼到FB開發頁面的密鑰雜湊選項即可

以上是FaceBook開發者那邊的設定
接下來是SDKBox那邊的設定

FaceBook SDKBox官方文檔和API說明
http://docs.sdkbox.com/en/plugins/facebook/v3-js/

Setup Android
  • Make sure java -version >= 1.7
  • Configure your APP on Facebook follow Android Quick Start Guide
  • Open res/values/strings.xml and replace facebook_app_id with your Facebook App ID
  • Open AndroidManifest.xml and replace _replace_with_your_app_id_ with your Facebook App ID
  • Open project.properties and change target to target=android-15
只要設定列表中的第三行就好

第三行是打開跟目錄下的
build\jsb-link\frameworks\runtime-src\proj.android-studio\res\values\strings.xml
原本會是
<?xml version='1.0' encoding='UTF-8'?>
<resources>
    <string name="app_name" translatable="false">FaceBookLogin</string>
    <string name="facebook_app_id">your_app_id</string>
    <string name="fb_login_protocol_scheme">fbyour_app_id</string>
</resources>

your_app_id的部分換成剛FB開發頁創立的應用程式編號
如果以我的專案舉例則會改成

<?xml version='1.0' encoding='UTF-8'?>
<resources>
    <string name="app_name" translatable="false">FaceBookLogin</string>
    <string name="facebook_app_id">910007862813093</string>
    <string name="fb_login_protocol_scheme">fb910007862813093/string>
</resources>

接著再打開build\jsb-link\res\sdkbox_config.json
{
"debug":true,
"app_id":"填入你的FB應用程式ID",
"url_scheme_suffix":""
}

以上都調整完畢後終於來到最後一步的打包了
記得再項目構建那邊不要勾選調試模式
否則FB不會授權給你登入

除非打包選擇的金鑰是用debug.keystore
才需要勾選調試模式


主要程式碼:
        //fb登入初始化
        sdkbox.PluginFacebook.init();

        if (cc.sys.isNative) {
            if (sdkbox.PluginFacebook.isLoggedIn())
                sdkbox.PluginFacebook.logout();
            sdkbox.PluginFacebook.login()
            sdkbox.PluginFacebook.setListener({
                onLogin: (isLogin, msg) => {
                },
                onAPI: (tag, data) => { },
                onSharedSuccess: function (data) { },
                onSharedFailed: function (data) { },
                onSharedCancel: function () { },
                onPermission: function (isLogin, msg) { },
                onGetUserInfo: (
                    (userInfo) => {
                        //使用者資料
                        this.label.string = sdkbox.PluginFacebook.getUserID()
                    }
                )
            });
        }

成功後真機效果圖:

顯示玩家UID


大致流程基本上就是這樣
取到玩家UID後就能跟自己遊戲帳號做綁定傳給server
就能做一系列的功能了
以後有空的話,
會再寫有關SDKBOX的 Google Play Services登入
以及第三方支付功能In App Purchase的心得筆記

項目範例原始碼

2

1

LINE 分享

相關創作

Cocos2d-x DragonBones 製作骨骼動畫 實現換裝效果

Cocos2d-x手機遊戲 口袋江湖 學生畢業專題

Cocos Creator 2.3.2 SDKBOX FB登入 第三方支付 Android打包失敗紀錄串

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】