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

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

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

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

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

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

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

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

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

А это мой скрипт после сборки в облачной сборке 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);
    }
}

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

1 Ответ

0 голосов
/ 11 июля 2019

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

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

...