Как решить «Не удалось зарегистрироваться для получения удаленных уведомлений», чтобы получать push-уведомления в игре iOS, созданной с помощью «Unity Cloud Build»

Мы используем для создания моего проекта сервис «Облачная сборка Unity» для Android и iOS, используя Firebase в качестве нашего бэкэнда. Недавно мы решили добавить в наш проект возможность «push-уведомлений», чтобы улучшить взаимодействие с пользователем.

Я начал тестировать, чтобы увидеть, как все это работает, и добавил пакеты обмена сообщениями firebase и стандартный «официальный» код для получения и сохранения токена. Также я сделал небольшой код «отправителя», используя «функции Firebase» для отправки тестовых уведомлений.

В сборке Android проблем нет, заработало сразу. Он получил токен, и всякий раз, когда я использую этот токен для отправки тестового уведомления, уведомление появляется сразу же без проблем.

Но у нас есть некоторые проблемы с версией для iOS! Это не сработало! Это очень расплывчато, в чем проблема, и я не смог найти подобную проблему с помощью Google! Мы потратили много времени на настройку .p12, файлов подготовки и файла .p8 (для соединения APN с firebase), все они выглядят нормально, и мы не уверены, есть ли проблема!

Вот как ведет себя версия для iOS:

  1. В журнале видно, что устройство подключилось к FCM и получило токен, но сразу после этой строки всегда идет строка с ошибкой: Failed to register for remote notifications

  2. Когда я отправляю сообщение на этот токен, он не показывает никакого уведомления, только в журнале я вижу это: FCM: Received message

Кроме того, это мои настройки iOS в Unity для включения удаленных уведомлений: Image

И это мой скрипт после сборки в облаке Unity.

using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using System.Collections;
using UnityEditor.iOS.Xcode;
using System.IO;

public class BuildSettings
{
    [PostProcessBuild]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget != BuildTarget.iOS)
            return;
        string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
        PBXProject project = new PBXProject();
        project.ReadFromFile (projectPath);
        string targetGuid = project.TargetGuidByName(PBXProject.GetUnityTargetName());
        project.AddCapability(targetGuid, PBXCapabilityType.PushNotifications);
        project.AddFrameworkToProject(targetGuid, "CoreBluetooth.framework", false);
        project.AddFrameworkToProject(targetGuid, "UserNotifications.framework", false);
        File.WriteAllText (projectPath, project.WriteToString ());

        var plistPath = Path.Combine(path, "Info.plist");
        var plist = new PlistDocument();
        plist.ReadFromFile(plistPath);
        plist.root.SetString("NSBluetoothPeripheralUsageDescription", "Bluetooth connection message!");
        plist.WriteToFile(plistPath);
    }
}

Большое спасибо.


person Mehdi Sabouri    schedule 28.05.2019    source источник


Ответы (1)


Дальнейшее расследование показало, что проблема возникла из-за отсутствия права на aps-среду, процесс добавления этого права в вашу сборку iOS отличается, если вы используете Xcode или облачную сборку.

Вы можете найти решение этой проблемы здесь: https://forum.unity.com/threads/how-to-put-ios-entitlements-file-in-a-unity-project.442277/

person Mehdi Sabouri    schedule 11.07.2019