cocos2d-js 接入anysdk

Cocos2d-JS 項目接入AnySDK

http://cn.cocos2d-x.org/tutorial/show?id=1836javascript

前言

國內居高不下的安卓手機佔有率以及不斷提高的回報率,使得安卓市場已成爲遊戲研發商沒法忽視的淘金熱土。然而,上百個渠道的SDK接入令遊戲公司大呼「傷不起」,各類渠道、用戶、支付、廣告、統計、分享等SDK接入費時費事、犧牲掉大量的時間機會,遊戲公司須要面對文檔上語焉不詳的各類技術坑、聯調坑。咱們一邊讀着如何深耕300個安卓渠道獲利的案例望梅止渴,一邊卻須要花費三個月甚至半年的時間去作SDK接入。php

本文以Cocos2d-JS項目做爲示例,講解如何集成AnySDK-JS。css

1、建立Cocos2d-JS項目

1.1 基本需求:

1.2 新建項目

經過Cocos Code IDE建立一個Cocos JavaScript項目anysdkTest。java

  1. 打開Cocos Code IDE,點擊File->New->Cocos JavaScript Projectandroid

p1 p2

記得勾選在Add Native Code項。 點擊Finish完成項目建立。接下來進入咱們的主題,集成AnySDK-js。git

2、集成AnySDK

參考anysdk-js快速集成指南github

2.1 獲取AnySDK Framework

首先,我須要下載anysdk框架包。下載地址:http://www.anysdk.com/downloadsjson

p3

選擇AnySDK Framework for JS下載。api

將下載下來的AnySDK_Framework_JS.zip文件解壓,目錄以下:微信

p4

其中framework目錄下,有三個版本的stl庫。根據當前項目使用的stl庫選取相應的stl庫。

1
2
3
以Cocos2d-x框架爲例,開發者能夠在工程目錄下jni/application.mk文件第一行找到stl庫類型設置
    若是此處設置的是 APP_STL := gnustl_static,則表示當前工程以gnu靜態庫的方式引入使用stl標準庫,此時應選擇集成protocols_gnustl_static這個文件夾中的框架資源。
    反之,則應選擇集成 protocols_stlport_static文件夾中的框架資源。

2.2 獲取anysdk-jsb綁定文件

下載AnySDK Framework for JS包後,解壓,會有兩個2.x和3.x的包,根據使用的Cocos2d-js的版本,來選擇相應的綁定文件。 src下面則是一個anysdkConst.js文件,該文件是對應C++裏面定義的枚舉變量。(使用的時候,須要添加到project.json裏面)

1
2
3
4
5
"jsList" : [
     "src/resource.js" ,
     "src/anysdkConst.js" ,
     "src/app.js"
]

由於咱們是使用Cocos2d-JS 3.x建立的項目,全部咱們選擇3.x的目錄。

2.3 配置AnySDK Framework到項目中

  1. 拷貝anysdk framework stl庫到protocols文件夾

    首先,查看anysdkTest項目的frameworks/runtime-src/proj.android/jni/application.mk文件第一行找到stl庫類型設置。 以下圖:

    p5

    而後,進入anysdkTest項目的frameworks/runtime-src/proj.android目錄,新建protocols文件夾。根據上面查看到的stl類型,選取AnySDK_Framework_JS/framework/protocols_gnustl_static庫,而後將該目錄下的android和include文件夾拷貝到protocols目錄。

  2. AnySDK_Framework_JS/framework/protocols_gnustl_static目錄下的res文件,拷貝到proj.android/res目錄下,注意選擇合併,避免文件覆蓋。

  3. AnySDK_Framework_JS/3.x目錄下的文件拷貝到proj.android/Classes目錄下

  4. 編輯proj.android/jni/Android.mk文件

    在LOCAL_SRC_FILES新增 兩個文件: autoanysdkbindings.cpp 和 manualanysdkbindings.cpp,例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    LOCAL_SRC_FILES := \
    ../../Classes/protobuf-lite/google/protobuf/io/coded_stream.cc \
     
    ...
     
    ../../Classes/autoanysdkbindings.cpp \
    ../../Classes/manualanysdkbindings.cpp \
    javascript/Runtime_android.cpp \
    javascript/main.cpp

    在LOCAL_C_INCLUDES 新增目錄:protocols/android 和 protocols/include,例:

    1
    2
    3
    4
    5
    6
    LOCAL_C_INCLUDES := \
    $(LOCAL_PATH)/../../Classes/runtime \
    $(LOCAL_PATH)/../../Classes/protobuf-lite \
    $(LOCAL_PATH)/../protocols/android \
    $(LOCAL_PATH)/../protocols/include \
    $(LOCAL_PATH)/../../Classes

    新增 static lib, 例:

    1
    LOCAL_WHOLE_STATIC_LIBRARIES += PluginProtocolStatic

    新增 modules, 例:

    1
    $(call import-module,protocols/android)
  5. 增長ADK_MODULE_PATH:

    3.x, 修改 build-cfg.json文件(也就是加上: "" ):

    1
    2
    3
    4
    5
    6
    7
    8
        "ndk_module_path" :[
        "../../js-bindings" ,
        "../../js-bindings/external" ,
        "../../js-bindings/cocos2d-x" ,
        "../../js-bindings/cocos2d-x/cocos" ,
        "../../js-bindings/cocos2d-x/external" ,
        ""
    ],
  6. 在proj.android目錄下新建libs文件夾,而後將AnySDK_Framework_JS/framework/protocols_gnustl_static/android目錄下的libPluginProtocol.jar拷貝到該目錄下。

  7. 添加設置javaVM代碼

    編輯proj.android/jni/javascript/main.cpp文件。如圖: p6

  8. 配置AndroidManifest.xml 添加框架須要的權限

    1
    2
    3
    4
    5
    <uses-permission android:name= "android.permission.INTERNET" />
    <uses-permission android:name= "android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name= "android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name= "android.permission.RESTART_PACKAGES" />
    <uses-permission android:name= "android.permission.KILL_BACKGROUND_PROCESSES" />
  9. 在JAVA層初始化AnySDK Framework框架

    首先找到遊戲工程的主Activity,以Cocos2d-x引擎遊戲爲例,主Activity便是繼承了cocos2dxActivity的Activity。 並在主Activity的onCreate()方法中新增以下代碼來初始化AnySDK Framework:修改proj.android/src/org/cocos2dx/javascript/AppActivity.java文件。

    1
    2
    3
    4
    5
    6
    7
    8
    import com.anysdk.framework.PluginWrapper;
     
    public class MainActivity extends Activity{
       protected void onCreate(Bundle savedState)
           {
               super.onCreate(savedState);
               PluginWrapper.init( this ); // for plugins
           }

    重寫Activity生命週期相關方法,代碼以下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @Override
    protected void onActivityResult( int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    PluginWrapper.onActivityResult(requestCode, resultCode, data);
    }
    @Override
    protected void onResume() {
    super.onResume();
    PluginWrapper.onResume();
    }
    @Override
    public void onPause(){
    PluginWrapper.onPause();
    super.onPause();
    }
    @Override
    protected void onNewIntent(Intent intent) {
    PluginWrapper.onNewIntent(intent);
    super.onNewIntent(intent);
    }

2.4 配置anysdk-jsb文件到項目中

修改runtime-src/Classes下的AppDelegate.cpp文件

在 sc->start(); 這一行以前 新增:

1
2
sc->addRegisterCallback(register_all_autoanysdkbindings);
sc->addRegisterCallback(register_all_anysdk_manual);

並引用對應的頭文件:

1
2
#include "jsb_anysdk_auto.hpp"
#include "jsb_anysdk_manual.hpp"

修改結果如圖:

p7

在完成anysdk的集成後,咱們須要爲anysdk進行一些配,遊戲管理、渠道、sdk管理等!

3、anysdk配置

3.1 工具下載安裝

請開發者訪問 AnySDK下載頁面下載 AnySDK開發組件

p8

3.2 配置anysdk

參考配置AnySDK相關參數

1. 使用的開發者帳號登錄AnySDK

p9

已有帳號的直接登陸,沒有的點擊註冊。(能夠直接使用Cocoa china的帳號)

2. 添加遊戲

p10

在此我添加了一個名叫test的遊戲做爲演示示例。

p11

3. 配置渠道

p12

在渠道管理界面咱們能夠爲咱們的遊戲配置發佈渠道,如圖中的渠道列表:選取所需的渠道。

此處我選取了官網渠道。

你能夠根據本身的項目需求,選取添加渠道。

4. 渠道增長SDK

p13

配置好渠道後,咱們接下來爲該渠道增長SDK。能夠在右側的SDK分類列表選取所須要添加的SDK,如用戶,廣告,支付,分享,統計。

此處,選取了友盟推送和統計,及shareSDK的新浪微博分享!

你能夠根據本身的項目需求,選取添加SDK。

5. 配置SDK參數

p14

添加好SDK,咱們須要爲所添加的sdk配置參數。

如上圖,在SDK列表選中SDK,而後在右側的參數配置區配置參數。這些參數須要到各SDK的網站去申請。 好比: umeng,shareSDK。 在sdk網站上完成應用註冊後,將獲取到的appkey等信息,填入上圖右側的參數配置區。

4、AnySDK使用

AnySDK集成完成後,和AnySDK配置好後,咱們來編寫代碼,使用咱們要集成的SDK。 讓咱們回到咱們的app.js文件。

4.1. 初始化anysdk

在app.js文件的合適位置加入下面代碼,初始化anysdk。appKey等參數來自下圖中紅色區域

1
2
3
4
var appKey = "EDAB0B5C-81FD-7718-0484-D861196DA227" ;
var appSecret = "76d97fcf7ef02e2e6aa487ab5821c0ca" ;
var privateKey = "6ECF2C672E23435D637383C59851E363" ;

p15

4.2. 使用各個接口

  1. 首先要load plugin:

    1
    agent.loadALLPlugin();
  2. 獲取各個插件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    agent = anysdk.AgentManager.getInstance();
    // init
    agent.init(appKey,appSecret,privateKey,oauthLoginServer);
    // load
    agent.loadALLPlugin();
    // get plugins
    user_plugin  = agent.getUserPlugin();
    iap_plugin   = agent.getIAPPlugin();
    share_plugin = agent.getSharePlugin();
    ads_plugin   = agent.getAdsPlugin();
    social_plugin = agent.getSocialPlugin();
    push_plugin  = agent.getPushPlugin();
    analytics_plugin = agent.getAnalyticsPlugin();
  3. 使用插件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
         onShareAction:function(idx){
         if (share_plugin == null) {
             cc. log ( "share plugin was not loaded." );
             return ;
         }
         switch (idx){
             case share_operation.share:{
                     var info = {
                         title : "ShareSDK是一個神奇的SDK" ,
                         titleUrl : "http://sharesdk.cn" ,
                         site : "ShareSDK" ,
                         siteUrl : "http://sharesdk.cn" ,
                         text : "ShareSDK集成了簡單、支持如微信、新浪微博、騰訊微博等社交平臺" ,
                         comment : "無" ,
                     }
                     cc. log ( "share info:" +info+ ", " +info[ "site" ]);
                     share_plugin.share(info) //1
                     cc. log ( "will log event" );
                     analytics_plugin.logEvent( "share" ) //2
                 } break ;
         }
    }
    1. 使用share 插件分享信息。
    2. 使用統計插件,統計分享事件。
  4. 其餘插件使用方法

詳細的能夠查看app.js。也能夠AnySDK使用幫助。

參考 AnySDK Framework 2.0.0版本在cocos2d-x js中,支付、分享、廣告等系統使用的各個接口。 http://docs.anysdk.com/IapsystemJS

5、打包 & 測試

在完成AnySDK framework的集成,AnySDK 參數申請配置及sdk插件的使用代碼的添加後。一切就緒,咱們就可使用AnySDK打包工具進行打包了。

5.1 打包

在打包以前,咱們得先生成母包。母包就是咱們集成了AnySDK framework和插件使用的Cocos2d-JS項目的Android平臺的apk。

  1. 先生成母包

    使用Cocos命令進行打包,操做以下:

    1
    2
    IvenYangtekiMacBook-Pro-2:~ zeroyang$ cd /Users/zeroyang/Documents/cocos/anysdkTest
    IvenYangtekiMacBook-Pro-2:anysdkTest zeroyang$ cocos compile -p android -m release

    先打開終端,而後cd進入項目根目錄,輸入cocos compile -p android -m release 回車進行打包。

  2. 使用使用AnySDK打包工具進行打包,打包生成各個渠道的apk。 此處添加了官網渠道,開發者能夠自行添加。

p16

p17

5.2 測試

打包好後,能夠將測試手機經過USB鏈接到電腦,點擊安裝,將打包好的遊戲安裝到手機上。

圖1:

p18

圖1是運行的測試界面。點擊各菜單按鈕使用各SDK插件。 若是沒有打包該插件SDK,插件會加載失敗。例如:咱們能夠在控制檯看到以下信息:

1
user plugin was not loaded.

圖2: p19

圖2是點擊分享菜單後,彈出新浪微博分享按鈕。由於咱們添加了shareSDk和新浪微博的分享代碼。 點擊分享按鈕,能夠打開新浪微博分享界面分享消息。

咱們前面添加了友盟的統計SDK,並自定義了分享事件analytics_plugin.logEvent("share")。咱們打開友盟的應用統計管理網頁能夠查看到統計信息。

p20

總結

本文講解了,Cocos2d-JS如何集成AnySDK。包含Cocos-JS項目的建立,AnySDK framework的集成,渠道和SDK參數配置申請、SDK使用及打包。 開發者能夠結合自身項目靈活選擇,增減渠道,SDK打包。經過使用AnySDK你能夠快速的開發出各個渠道的發佈包。

完整代碼

分享到:
相關文章
相關標籤/搜索