- mBaasの公式ではCocos2d-xはサポートされていないため、私と同じく色々な事情からどうしてもニフティクラウドのmobile backendのプッシュ通知を既存のCocos2d-xプロジェクトで使いたい、という人の役に少しでも立てればと思い執筆しました。
- Cocos2d-x framework 3.8を使用しています。
- NCMB 2.2.1を使用しています。
- 筆者の環境では、proj-androidフォルダが作成されないため、AndroidStudioを直接使わずに導入する方法の解説となります。(jarファイルの入手のため、一部使用します)
- 基本的にはドキュメントのクイックスタートとプッシュ通知_基本的な使い方に沿えば実装可能ですが、一部ドキュメントに書かれている通りに実装しようとすると、筆者の場合躓く箇所があったため、その点を補足する形になっています。
jarファイルの入手と設置
- proj-androidフォルダが無いCocos2d-xプロジェクトでは、AndroidStudioで直接編集出来ないため、Gradleが利用出来ません。
- そこで、jarファイルを入手し、libsフォルダに設置する必要があります。
事前準備
- AndroidStudioで既存のプロジェクトを開きます。(無ければ新規プロジェクトを作成してください)
- build.gradleのdependenciesに以下を追加しSyncします。
compile 'com.google.code.gson:gson:2.3.1'
- AndroidStudioメニューのTools -> Android -> SDK Manager をクリックします。
- Launch Standalone SDK Manager をクリックします。
- Extras の Android Support Library, Google Play services の Status が Not installed の場合、チェックを付け、右下の「install 2 package...」 をクリックし、インストールします。
- この時、Name の項目にマウスオーバーし続けると、ファイルが置かれる(置かれた)パスが表示されます。
各jarファイルの場所
- 下記を参考にし、libsフォルダにjarファイルを入れてください。
GSON 2.3.1
(ホームディレクトリ)/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson
android-support-v4, android-support-v7-appcompat
(ホームディレクトリ)/Library/Android/sdk/extras/android/support/v7/appcompat/libs
Google Play Services
- こちらは、jarファイル単体ではなく、フォルダを追加してください。
(ホームディレクトリ)/Library/Android/sdk/extras/google/google_play_services/libproject
- フォルダを追加後、proj.android直下のproject.propertiesを開き、一行追加します。
android.library.reference.1=libs/google-play-services_lib
パッケージ名に合わせたフォルダの生成とファイルの設置
- 筆者の環境では、パッケージ名をデフォルトから変更しているため、以下のmeta-dataの値を使用するこの箇所の処理が問題になりました。
- そこで、以下の画像のように proj.android/src の直下にパッケージ名に合わせたフォルダを作成し、そこにjavaファイルを作成し、配置しました。
- 生成したフォルダに設置したOpenPushStartActivityには以下のように記述しています。
package (生成したフォルダ構造に合わせたパッケージ名)
import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxHelper;
import android.os.Bundle;
public class OpenPushStartActivity extends Cocos2dxActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
AndroidManifestへの追記
- Manifestに追加したActivityの記述を以下のように追加しておきます。
<activity
android:configChanges="orientation"
android:label="@string/app_name"
android:name="(生成したフォルダ構造に合わせたパス)"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
</activity>
meta-dataの記述
- タップされた時に起動するActivityを指定するmeta-dataには以下のように記述しました。
<meta-data
android:name="openPushStartActivity"
android:value=".OpenPushStartActivity" />
- 以上がドキュメントの補足説明になります。
余談
- 当初は app C cloudのプッシュ通知サービスを使用する予定でしたが、タイミングが悪いことに2016年3月1日より新規登録を停止しており、問い合わせると、プッシュ通知サービスが再び利用出来るのが5月以降との返答でした。(納期に間に合わないためこの時点で選択肢から消えました)
- Growth Pushもapp C cloud同様Cocos2d-xに対応しているようでしたが、こちらは累積1,000,000リクエストを超えると有料だったため、選択肢から消えました。
- 紆余曲折の後、消極的選択ですがニフティのmBaasを使うことになり、今回案の定他のCocos2d-x非対応のサービス導入時に起きた苦労が生じたため、このような記事を執筆しました。(導入する必要に迫られたサービスに限って、「Cocos2d-x?知らない子ですね」なので…Unityはサポートされている事が多い気がします)
- 間違いや抜けがある可能性がありますので、もしあれば、ご指摘戴ければ幸いです。