UnityでPush通知を実装する場合、OneSignalを使うと便利です。無料で任意のセグメントのユーザに通知を送ることができます。

iOSの設定

(1) アプリケーションフォルダにあるキーチェーンアクセスを開きます
(2) メニューの「証明書アシスタント」から「認証局に証明書を要求」してディスクに保存します
(3) iOS Dev CenterのProvision Portalへ行き、Certificatesの項目で、Apple Push Notification Authentication Key (Sandbox & Production)を作成します
(4) aps.cerをダウンロードします
(5) キーチェーンアクセスに取り込んで、右クリックし、p12で書き出します(左のタブをログインに合わせておかないとp12で書き出せません)
(6) OneSignalに登録します

証明書は毎年更新が必要です。

Androidの設定

(1) Firebaseのプロジェクトを作成してFCMのサーバーキーを取得します
(2) OneSignalに登録します

Unityの設定

(1) OneSignalのUnity SDKをインポートします
(2) 以下のコールバックを任意のスクリプトに登録します(ONE_SIGNAL_API_KEYは自分のものに書き換えます)
(3) OneSignalのサイトからPush通知を発行すると、アプリを起動している場合、ダイアログが表示されたあと、HandleNotificationOpenedが呼ばれます

using System.Collections.Generic;  
void Start () {
    // Enable line below to enable logging if you are having issues setting up OneSignal. (logLevel, visualLogLevel)
    // OneSignal.SetLogLevel(OneSignal.LOG_LEVEL.INFO, OneSignal.LOG_LEVEL.INFO);
  
  OneSignal.StartInit(ONE_SIGNAL_API_KEY)
    .HandleNotificationOpened(HandleNotificationOpened)
    .EndInit();
  
  // Sync hashed email if you have a login system or collect it.
  //   Will be used to reach the user at the most optimal time of day.
  // OneSignal.syncHashedEmail(userEmail);
}

// Gets called when the player opens the notification.
private static void HandleNotificationOpened(OSNotificationOpenedResult result) {
}

尚、Unityからアプリを書き出した後、XcodeのCapabilityでPushNotificationとBackground ModesのRemote notificationsを有効化する必要があります。従って、Unity Cloud Buildではビルドは通りますが、動作しません。

UnityのAndroid向けビルドにおいて、Google.JarResolver.ResolutionException: Cannot resolve com.google.android.gms:play-services-gcm:9+() というエラーが出る場合は、Android SDK managerでAndroid Support RepositoryとGoogle Play servicesとGoogle Repositoryをアップデートして下さい。 また、JAVA_HOMEにJREへのパスを設定する必要があります。