PR

【Unity】NCMBでプッシュ通知を実装しよう!

UnityとNCMBで通知を実装しよう Unity

NCMBプラグインを取り込む

ではまずは取り込んでみましょう。
ダウンロードはこちらから可能です。

Releases · NIFCLOUD-mbaas/ncmb_unity
ニフクラ mobile backend Unity SDK. Contribute to NIFCLOUD-mbaas/...

ダウンロードするバージョン

どのバージョンをダウンロードするかが重要です。

たくさんバージョンがありますね…

最新の環境(v4.4.0)をインストールするとAndroidが動かないことがありました。

なので私の環境で動作したバージョンをお伝えしたいと思います。
それは「v4.1.0」です!

 

v4.1.0に流れついた流れ

実は最初は最新「v4.4.0」を使っていました。
色々あってそのバージョンに行きつきました。

流れはこんな感じです。

  1. 最新が良いだろうとv4.4.0をインポート
  2. iOSがなんとか動いたのでAndroidを対応
  3. Androidがうんともすんとも言わない(登録できているのに通知が届かない)
  4. 色々修正方法を数日探したけど情報がない
  5. 公式からも対応も待っていられない
  6. メジャーバージョン(大きいバージョン変更)なら
    動作確認しているはずとv4.0.0を選択
  7. 色々巻き戻してプラグイン入れ直す
  8. Androidに通知きた!
  9. iOSを念の為確認すると
    XcodeでAppStoreのアップロードエラー
  10. WebViewの問題と発覚
  11. v4.0.4の項目にそれを修正したよというコメントを発見
  12. バージョン管理で巻き戻してv4.0.4で入れ直す
  13. iOS動いた!
    しかしAndroidが動かない…
  14. 嘘だろ…と思ったら「AndroidManifest」の
    パッケージ名設定を忘れてただけだった
  15. 無事、両方の環境で通知を出すことができた!
  16. 以降2021/04/27追記
  17. 記事の検証中に既にfirebaseを導入しているとAndroid通知を受信できないことが発覚…
  18. 更新履歴に怪しい更新を発見
  19. 該当バージョンの4.1.0をインストール確認すると動作した!

といった感じです。

これは壮絶な戦いの記録です。
調べても出てこないし、これも違う、あれも違うと
暗中模索状態が辛かった…

 

v4.1.0をダウンロード

色々ありましたが、皆さんが同じ轍を踏む必要はないので
何も考えず「v4.1.0」をインストールしましょう。

Release v4.1.0 · NIFCLOUD-mbaas/ncmb_unity
変更点 Prefab、Sceneの導入によるSDK構成にPrefab, Scene新規フォルダ追加 これにより、新規SD...

インストールはこちらの記事を参考にしてください。

Unityプラグイン(unitypackage)のインストール方法
今回はダウンロードしたUnityプラグイン(unitypackageファイル)を インストールする際に必要な手順を紹介したいと思います。

 

「ニフクラ mobile backend」側の設定

基本的にはこちらの流れに沿ってお伝えしていきます。

イントロダクション (Unity) : クイックスタート | ニフクラ mobile backend
ニフクラ mobile backendをUnityで利用する方法を解説します。

アプリの新規作成 というところでAPIキーを作成する場所まで完了させます。

 

プレハブ(Prefab)に設定する

手順は下記となります。

  1. Assets/Prefabsにある「NCMBManager」と「NCMBSettings」をアプリ開始時のシーンに配置
  2. そしてNCMBSettings側には先ほど紹介したサイトを元に作成した諸々IDを設定(アプリケーションキー、クライアントキー)
  3. 続いて「Use Push」という項目にもチェックをつけておきます。

これで設定はモーマンタイ(問題なし)です!

次はアプリ起動時に呼び出してプッシュ通知登録をするスクリプトを追加する必要があります。

 

自分で用意するスクリプトを作成

公式にあるスクリプトを利用して
通知の設定を行うスクリプトとゲームオブジェクトを作成しておきます。

プッシュ通知 (Unity) : 基本的な使い方 | ニフクラ mobile backend
ニフクラ mobile backendからUnityアプリにプッシュ通知を配信する方法について解説しています。
  1. 上記リンクからスクリプトをコピー、PushObject.csというスクリプトを作成
  2. スクリプトでは起動時DontDestroyOnLoadされるためGameObjectの子(下の階層)としてぶら下げない(エラーが出るため)
  3. アプリ起動時のシーンに直接配置する

といった作業となります。

これで大まかにプロジェクトの準備は完了です!

 

 

Xcode(iOS)への対応

次はXcodeに必要な設定行う準備をします。
参考サイトはこちら。

プッシュ通知 (Obj-C) : 基本的な使い方 | ニフクラ mobile backend
ニフクラ mobile backendからiOSの端末にプッシュ通知を配信する方法について解説しています。

ただ少し冗長な記事なので…簡単にお伝えします。

 

iOSではXcodeで色々設定が必要

iOSはBuildSettingsから切り替えて
ビルドするとXcodeのプロジェクトで出力されますよね。

このマニュアルではその度に必要なフレームワークの追加や
諸々の設定をする必要があることが書かれています。
ただそんなことって…

ビルド毎にやってられない!

ってレベルだったりします。

今回はビルド時に自動で設定してくれるスクリプトを作成しましたので
そちらをご利用ください。

 

Xcodeに設定するスクリプト

このスクリプト追加することによって自動でXcodeに必要な

  • WebKit.framework
  • UserNotifications.framework
  • AuthenticationServices.framework
  • LinkBinaryWithLibrariesの設定

と言ったビルドの度に設定しなければならないものが自動で設定されます。

 

スクリプト「PostXcodeBuild.cs」

下記のスクリプトを「Assets/Editor」フォルダに追加してください。
※フォルダがなければ作成してください

PostXcodeBuild.cs

using UnityEditor;
using UnityEditor.Callbacks;

#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif

public class PostXcodeBuild
{
#if UNITY_IOS
    [PostProcessBuild]
    public static void SetXcodePlist(BuildTarget buildTarget, string pathToBuiltProject)
    {
        if (buildTarget != BuildTarget.iOS){
            return;
        }

        // pbx
        {
            var projectPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
            var pbx = new PBXProject();
            pbx.ReadFromFile(projectPath);
            string targetGuid = GetTargetGuid(pbx);

            // ncmb
            pbx.AddFrameworkToProject(targetGuid, "WebKit.framework", false);
            pbx.AddFrameworkToProject(targetGuid, "UserNotifications.framework", false);
            pbx.AddFrameworkToProject(targetGuid, "AuthenticationServices.framework", true);

            pbx.WriteToFile(projectPath);
        }
    }

    private static string GetTargetGuid(PBXProject pbx)
    {
#if UNITY_2019_3_OR_NEWER
        return pbx.GetUnityFrameworkTargetGuid();
#else
        return pbx.TargetGuidByName(PBXProject.GetUnityTargetName());
#endif
    }
#endif
}

これを用意できたら、プロジェクト側の設定は完了です。

サクッと終わりましたね!

次は各プラットフォームでプッシュ通知するために必要な証明書周りの対応となります。

コメント

スポンサーリンク
Ads Blocker Image Powered by Code Help Pro

広告ブロッカーが検出されました

広告をブロックする拡張機能を使用していることがわかりました。これらの広告ブロックを無効にして、私たちをサポートしてください。

タイトルとURLをコピーしました