cocos2dx遊戲demo接入微信分享SDK
這是筆者第二次接SDK,第一個是為遊戲接的語音SDK。本以為微信SDK會同語音一般簡單,後來折騰了半天,才知道微信SDK難多了。為避免各位有像我一樣的SDK接入新手重蹈筆者的覆轍,特地寫一篇部落格。
本文涉及到的一些技術要求:C++,Java,JNI,還有一丟丟安卓的知識。當然,預設讀者是cocos2dx引擎的使用者。首先需要先下載微信SDK並配置好環境。此步驟可參考:https://open.weixin.qq.com官方網站。
進入專案的安卓工程,筆者使用的是eclipse開啟。找到org.cocos2dx.cpp包下面的AppActivity類,在其成員中新增如下程式碼:
其中api是微信SDK提供給我們用來呼叫分享的一些介面的物件。appid需要我們自己去申請,不懂的讀者可以去上面筆者提供的官網去參考。在AppActivity的onCreate方法中,需要新增如下程式碼:
初始化api物件後,需要將appid註冊到微信。因為筆者是團隊開發,由於某些原因,筆者這一步驟被開發團隊的夥伴給改動了。這導致後來筆者測試微信分享的時候,點選微信分享遊戲就閃退,原因就是遺漏了此步驟。
接下來就開始介紹筆者新增分享的函式吧,直接上圖。
筆者的這個函式,囊括了文字+圖片+網頁分享。著重註釋了網頁分享部分,圖片部分亦類似,一般說來,大多分享物件都帶有title和description兩個屬性。其他不懂的可以參考官方文件,還是筆者之前提到的參考網站。筆者對微信SDK的理解也是邊看官方API文件,邊自己理解,也無法註釋的非常詳細。
接下來在遊戲中新增方法,實現C++呼叫Java程式碼,點選分享按鈕時呼叫此方法即可:
重點就在JniHelper的getStaticMethodInfo函式上,此函式第一個引數:需要傳入JniMethodIofo物件;第二個引數是要呼叫的方法所在的java類的完整包名,必須用“/”而不能使用“.”來間隔;第三個引數是方法名;第四個引數是“方法簽名”,意思是告知將要呼叫的“OnWxShare”函式的引數型別,以及返回型別,這些也正是函式的要點。
前面可以看到“OnWxShare”擁有4個String型別的引數和一個boolean型的引數,並且其返回值為void。
在“方法簽名”引數中,Ljava/lang/String;此簽名表示一個String型別,因為“OnWxShare
學過Java的童鞋應該知道,String在Java中是物件型別,而不是基本型別。因此它才需要用Ljava/lang/String;來簽名,只有當方法引數為物件型別時,才採用這種方式簽名:L+“物件的完整包名”+封號隔開。若是基本型別變數則不需要,例如:如果上圖的OnWxShare方法引數型別為4個int型別+1個boolean型別,則簽名為“(IIIIZ)V”,I是int的簽名。
當getStaticMethodInfo執行完畢後,若成功找到方法,則資訊將儲存在info裡面,並且返回true。info的env屬性可以通過CallStaticVoidMethod去呼叫“OnWxShare”方法。呼叫時,java的String型別會被JNI轉換為jstring型別,也就是說現在CallStaticVoidMethod接受4個jstring型別引數和一個bool引數。
而C++的string不是jstring型別,因此需要通過NewStringUTF函式來將string轉換為jstring,進行呼叫。如果讀者不想轉換,可以在java程式碼中全部使用基本型別,而不使用String等物件型別(String在Java中是物件型別)。因為基本型別不需要轉換。
至此,只要建立我們的“微信分享”按鈕,點選後呼叫此方法即可實現拉起微信,分享我們所要分享的了。