【GrowthPush】Cocos2d-xプロジェクトへのSDK組み込み方法まとめ


はじめに

GrowthPushの公式ドキュメントは、個人的にあんま当てにしない方が良い気がする。
いきなり本命プロジェクトじゃなくて、テストプロジェクトを cocos new して練習することをオススメする。

iOS/Android 共通でやること

SDKダウンロード

下からcocos2d-x用のSDKをダウンロード。(直DLリンクです。)
執筆時: v1.1.3
https://growthpush.com/downloads/cocos2dx3/libraries/latest

GrowthPushクラスの組み込み

Xcodeから、 Classes/ 配下にダウンロードしてきた growthpush-cocos2dx3-v.1.1.3/Classes/GrowthPushAdd File to "プロジェクト名" ... する。
この時「Copy items if needed」にチェックを入れるのを忘れないように。

ソース書き書き

ソース書き書きは、iOS/Androidの各SDK組み込みのあとに記述。

iOS向けにやること

iOS用SDKダウンロード

cocos用のだけでなく、iOS/Androidの各プラットフォーム用のSDKも必要。
まずはiOS用のSDKをダウンロード。(直リン)
https://growthpush.com/downloads/ios/libraries/latest

Frameworkの追加

Xcodeでプロジェクトファイルの[General]タブを開き、一番下の[Linked Frameworks and Libraries]にフレームワークファイルを追加する。

  1. [+]ボタン
  2. [Add Other...]ボタン
  3. iOS用SDKの growthpush-ios/GrowthPush.framework を追加

図解:

ここでもしシンボルが解決出来ないエラーが出るようであれば、以下の2つのフレーム笑0区ファイルをインポートすると解決出来るかもしれないらしい。(やってない。)

  • Security.framework
  • SystemConfiguration.framework

Android向けにやること

Android用SDKダウンロード

(直リン)
執筆時: v1.1.4(※問題アリ。後述)
https://growthpush.com/downloads/android/libraries/latest

ちょっと待った。

Android用のSDKファイルのv1.1.4は、GrowthPushの人がビルドする時にミスってるっぽい。
詳しくは別に投稿してある。
http://qiita.com/hashimotoryoh/items/25302c874bc95bce74d8

↑という訳で、

  1. growthpush-android-1.1.4/growthpush.jar を手動で .zip に拡張子変更
  2. それを展開
  3. 中に bin/growthpush-android.jar が有ることを確認

確認できたら次へ。
結局、無理やりパスを書くなら growthpush-android-1.1.4/growthpush.jar/bin/growthpush-android.jar これを次に使う。

JARファイルの追加

JARファイルをプロジェクトに追加する。
上記に記した growthpush-android-1.1.4/growthpush.jar/bin/growthpush-android.jar を、

  1. growthpush.jar にリネームする
  2. cocosプロジェクトの proj.android/libs/ 配下に配置する

あと2つ追加するJARファイルがある。
が、次の2つは既に有るものであれば無視して良い。配置場所は同じところ。

  • growthpush-android-1.1.4/google-play-services.jar
  • growthpush-android-1.1.4/android-support-v4.jar (これについてはバージョンが違っていても、何かが入っていれば良い。)

Android.mk の編集

cocosのプロジェクトの proj.android/jni/Android.mk に編集が必要。
LOCAL_SRC_FILESLOCAL_C_INCLUDES という変数にGrowthPushのソースのパスを追記する。

Android.mk
:
:

LOCAL_SRC_FILES := hellocpp/main.cpp \        # なんかこんな風に書いてるはず
                   ../../Classes/GrowthPush/android/GrowthPush.cpp        # これを末尾に追記

# 個人的には↓の書き方の方が好き。どっちでも良い。
# LOCAL_SRC_FILES := hellocpp/main.cpp
# LOCAL_SRC_FILES += ../../Classes/GrowthPush/android/GrowthPush.cpp

:
:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
                    $(LOCAL_PATH)/../../Classes/GrowthPush

# これもどっちでも良い。↓
# LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
# LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/GrowthPush

:
:

AppActivity.java の編集

AppActivity クラスは Cocos2dxActivity クラスを継承している。
これを GrowthPushCocos2dxActivity クラスを継承するようにする。

※GrowthPushのソースはあまり信用しない方が良い。
GPCocos2dxActivity という名前のクラスのバージョンのSDKもある…

AppActivity.java
:
:

import com.growthpush.cocos2dx.GrowthPushCocos2dxActivity;

:

public class APpActivity extends GrowthPushCocos2dxActivity {
    :
    :

AndroidManifest.xml の編集

cocosのプロジェクトの proj.android/AndroidManifest.xml に次のコードを追記する。
YOUR_PACKAGE_NAME となっている部分は要変更。(ex. com.hashimotoryoh.growthpushtest)

<application ... >...</application> タグ内に次を追記。

AndroidManifest.xml
<!-- GrowthPush -->
<activity
    android:name="com.growthpush.view.AlertActivity"
    android:configChanges="orientation|keyboardHidden"
    android:launchMode="singleInstance"
    android:theme="@android:style/Theme.Translucent" />
<receiver
    android:name="com.growthpush.BroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="YOUR_PACKAGE_NAME" />
    </intent-filter>
</receiver>

さらに <manifest ... >...</manifest> タグ内に次のパーミッションを追記。
ただし、既に書いてあるパーミッションは重複させる必要無し。

AndroidManifest.xml
<permission
    android:name="YOUR_PACKAGE_NAME.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="YOUR_PACKAGE_NAME.permission.C2D_MESSAGE" />

ソースの記述

ここまででSDKの組み込みは終わったはず。

あとはデバイストークンをGrowthPushのサーバに登録するソースを書いて終わり。

AppDelegate.cpp

Classes/AppDelegate.cppbool AppDelegate::applicationDidFinishLaunching() メソッド内の任意の場所に次のを追記。

AppDelegate.cpp
#include "GrowthPush.h"
:
bool AppDelegate::applicationDidFinishLaunching()
{
    :

    // GrowthPushインスタンス初期化
#if COCOS2D_DEBUG
    GrowthPush::initialize((int)アプリケーションID,
                           "シークレットキー",
                           GPEnvironment::GPEnvironmentDevelopment,
                           true);
#else
    GrowthPush::initialize((int)アプリケーションID,
                           "シークレットキー",
                           GPEnvironment::GPEnvironmentProduction,
                           false);
#endif

    // GrowthPushサーバにデイバスを登録
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    GrowthPush::registerDeviceToken();
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    GrowthPush::registerDeviceToken("AndroidのセンダーID");
#endif

    :
    :

アプリケーションID : GrowthPushの管理画面、左カラムの[シークレットキー]から確認できる 4桁の数字
シークレットキー : 同じところから確認できる 権限が"SDK権限"であると安心。自分で追加できる。
AndroidのセンダーID: Google API Sender ID

こんな感じ。