【Cocos2d-x】【Android】ニフティクラウド mobile backendのプッシュ通知を組み込む


  • 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フォルダに設置する必要があります。

事前準備

  1. AndroidStudioで既存のプロジェクトを開きます。(無ければ新規プロジェクトを作成してください)
  2. build.gradleのdependenciesに以下を追加しSyncします。

compile 'com.google.code.gson:gson:2.3.1'

  1. AndroidStudioメニューのTools -> Android -> SDK Manager をクリックします。
  2. Launch Standalone SDK Manager をクリックします。
  3. 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はサポートされている事が多い気がします)
  • 間違いや抜けがある可能性がありますので、もしあれば、ご指摘戴ければ幸いです。