Unity

【Unity】Onesignalのサーバープッシュ導入手順を解説

この記事ではUnity環境にOneSignalを使ったサーバープッシュを導入する手順を解説します。

  • Onesignalの会員登録とUnityアプリ用にiOS/Androidアプリの登録は完了済とします。
    https://onesignal.com
  • Androidのプッシュを利用する場合はFirebaseの会員登録とAndroidプロジェクトを作成済とします。 (iOSのプッシュでは必要ありません。)
【Unity】Firebaseのサーバープッシュ導入手順を解説この記事ではUnity環境にFirebaseを使ったサーバープッシュを導入する手順を解説します。 Unityアプリ用にFireba...

 

OneSignalの特徴

サーバープッシュはGoogleのFirebase Cloud Messaging(FCM)が有名ですが、OneSignalは無料で利用できるのはもちろん、プッシュ通知サーバーを用意しなくてもOneSignalのwebサイトからマルチ言語に対応したプッシュ通知が行えます。

FCMもwebサイトからプッシュ通知を行えますが言語を指定できないので、アプリをマルチ言語に対応させる場合は別途、プッシュ通知サーバーの構築が必要となります。

OneSignalの対応環境は以下の通りです。

  • Unity 2021.3 or newer
  • iOS: iOS 11+ or iPadOS 11+
  • Xcode 14+ 、iOS 16+のシミュレータが動作すること
  • Android: Android 7.0+

 

この記事の導入環境は次の通りです

  • OneSignal 5.1.11
  • Unity6 6000.0.25f1
  • XCode16.2
  • iPhone15 : Pro iOS18.3.2
  • Pixel6a : Android15

 

OneSignalのインストール

Unity Asset Storeで無料公開されているので、マイアセットに追加します。
https://assetstore.unity.com/packages/add-ons/services/billing/onesignal-sdk-193316

追加したらPackage ManagerからImportします。

するとセットアップのダイアログがでるので「Run All Steps」しておきます。
終わっても勝手にダイアログは閉じないので全項目にチェックがついたら、自分で閉じます。

 

次に、Edit > Project Settings… > Package Manager、を選び以下のようにScopeを追加してSave

Name: npmjs
URL: https://registry.npmjs.org
Scope(s): com.onesignal

 

iOS用のセットアップ

ここからはiOS用のセットアップを解説していきます。

iOS用パッケージのインストール

OneSignal本体とは別にiOS用のpackageをインストールします。
(僕の環境ではもう入ってました。いつ入ったのかな?)

Window > Package Manager > My Registries > OneSignal Unity SDK – iOS

Automatically Signの有効化

Edit > Project Settings > Player > Appleタブ(リンゴマーク) > Other Settings > Identification欄の Automatically Sign にチェックを入れる。

APNs認証キーの発行と登録

iOS環境でサーバープッシュをする場合、APNs(Apple Push Notification Service)を利用します。

APNsをOneSignalから利用できるようにするため、APNsの認証キーを発行してOneSignalに登録します。

APNs認証キーの発行

APNs認証キーは新旧2種類あります。
初代のApple Push Notification Service SSLはアプリごとに認証キーが違い、また、発行から1年の有効期限があり、毎年更新する必要があります。

新しく出来た、Apple Push Notification Authentication Keyは全アプリ共有の認証キーとなっており、有効期限もありません。

と言うわけで迷わず新しい「Apple Push Notification Authentication Key」を発行します。

 

  1. Appleの開発サイト(https://developer.apple.com/account)にログインし、「証明書、ID、プロファイル」欄の「証明書」をクリック。
  2. 左メニューからKeysを選び、右側のKeysという見出しの右側にある + ボタンを押す。
  3. 適当にkey Nameを入れて、Apple Push Notifications Serviceにチェックを入れたら、Configureボタンを押す。
  4. EnvironmentをSandbox & Productionにして、Saveボタンを押す。
  5. 前の画面に戻ってきたら、Continueボタンを押す。
  6. Registerを押して登録。
  7. Downloadを押して認証キーをダウンロードして完了です。このDownloadボタンは1回しか押せないので、安全な場所にダウンロードした認証キーを保存しておいてください。
    認証キーをFirebaseに登録する時にKey IDも必要になるので、この画面にあるKey IDをメモっておく事。

APNs認証キーの登録

OneSignalに登録したUnity用のiOSアプリを選択。

Settings > Push & In-App > Push Platforms > Apple iOS (APNs)を選択。
Update Authenticationにチェックが入っていない場合は入れて、各項目を入力する。

  • APNs Authentication Typeは「.p8 Auth Key」を選択
  • Key (.p8 file)は先程ダウンロードした認証ファイルをアップロード
  • Key IDは、認証ファイルに書いてあるAuthKey_[この部分].p8、を入力
  • Team IDはAppleの開発サイト(https://developer.apple.com/account)のメンバーシップ詳細欄にあるチームIDを入力
  • App Bundle IDはアプリのBundle IDを入力

Save & Contineを押してiOSのセットアップは完了です。

Firebase Crashlyticsも入れていると実機ビルドでエラーがでました。
Target > Unity-iPhone > Build Phasesで、Crashlytics Run Scriptをドラッグして一番最後(下)に移すことで解消されます。

 

Android用のセットアップ

ここからはAndroid用のセットアップを解説していきます。

Android用パッケージのインストール

OneSignal本体とは別にAndroid用のpackageをインストールします。
(僕の環境ではもう入ってました。いつ入ったのかな?)

Window > Package Manager > My Registries > OneSignal Unity SDK – Android

Publishing Settingsのカスタマイズ

Edit > Project Settings > Player > Androidタブ > Publishing Settings の以下2つにチェックを入れます。

  • Custom Main Gradle Template
  • Custom Gradle Properties Template

ここで一旦
Assets > External Dependency Manager > Android Resolver > Force resolve
を叩く。

FCM認証キーの発行と登録

Android環境でサーバープッシュをする場合、FCM(Firebase Cloud Messaging)を利用します。

外部サービスからFCMを使う場合はFirebase Admin SDKを通さないと利用できないので、Firebase Admin SDKのプライベートキーを発行してOneSignalに登録します。

Firebase Admin SDKのプライベートキーを発行

Firebaseに作ったAndroidプロジェクトを開き、設定 > サービスアカウント > Firebase Admin SDKを選んだら、新しい秘密鍵を生成、を押してプライベートキーをダウンロードします。

Firebase Admin SDKのプライベートキーの登録

次にOnesiganalに作成したAndroidアプリのページを開き
Settings > Push Platforms > Google Android(FCM)を選択。

先ほどダウンロードしたFirebase Admin SDKのプライベートキーをService Account JSONに登録して、Save & Continueを押します。

次の画面にOneSignalを初期化するためにApp IDが表示されるのでメモをしたらDoneを押して設定を完了します。

 

Android用、プッシュ通知の受信許可ダイアログの表示

Android13以降からはiOSのようにプッシュ通知の受信をユーザーに許可してもらわないとプッシュ通知が受け取れなくなりました。

その受信許可ダイアログを表示するため、UnityのPackage Managerから「Mobile Notifications」パッケージをインストールしておきます。

そして次のコードを追加します。

#if UNITY_ANDROID
using UnityEngine.Android;
#endif

....


private async void Start()
    {

.....

#if UNITY_ANDROID
        // サーバープッシュの受信権限がない場合、リクエストする
        if (!Permission.HasUserAuthorizedPermission("android.permission.POST_NOTIFICATIONS"))
        {
            Permission.RequestUserPermission("android.permission.POST_NOTIFICATIONS");
        }
#endif

 

このコードが実行されると写真のように、プッシュ通知を受信する権限がoffの場合、プッシュ通知の許可を求めるダイアログが表示されるようになります。

僕の環境ではAndroidの実機ビルドでエラーが起こりましたが、以下の対応で直りました。

Assets/Plugins/Android/OneSignalConfig.androidlibにある

  • AndroidManifest.xmlのpackage名を自分のアプリのpackage名に変更
  • build.gragleのandroid {} の中に、namespace ‘[自分のpackage名]’、を追加

 

 

OneSignalの初期化

iOS / Androidのセットアップが完了したら、Unityのプロジェクトを開き、次の初期化コードを、プッシュ通知を初期化したい場所に追加します。

using OneSignalSDK;

void Start () {
  OneSignal.Initialize("YOUR_ONESIGNAL_APP_ID");
}

 

ONESIGNAL_APP_IDは、OneSignalの管理サイトに入り、該当アプリを選び
Settings > Key & IDs > APP IDの欄に書いてあります。

 

 

 

 

以上で設定は完了です。OneSignalのサイトからサーバープッシュを送れるので試してみてください。