Unity3D iOS设备令牌始终为空

时间:2017-06-30 09:43:45

标签: ios unity3d push-notification

我正在努力让推送通知在iOS上运行,但我无法访问设备令牌!

我的Unity版本是5.4.1f1。

我在XCode中启用了推送通知功能,并且所有证书都已正确设置: enter image description here

在start方法的脚本中,我称之为:

UnityEngine.iOS.NotificationServices.RegisterForNotifications
    (UnityEngine.iOS.NotificationType.Alert | UnityEngine.iOS.NotificationType.Badge
    | UnityEngine.iOS.NotificationType.Sound, true);

然后从更新方法我调用这个方法:

private bool RegisterTokenWithPlayfab( System.Action successCallback,
    System.Action<PlayFabError> errorCallback )
{
    byte[] token = UnityEngine.iOS.NotificationServices.deviceToken;
    if(token != null)
    {
        // Registration on backend
    }
    else
    {
        string errorDescription = UnityEngine.iOS.NotificationServices.registrationError;
        Debug.Log( "Push Notifications Registration failed with: " + errorDescription );
        return false;
    }
}

令牌保持为空,因此每次调用都会输入else分支。此外,registrationError保持为空。

有人能指出我正确的方向吗?我还能尝试什么,或者如何在出错的地方获得更多信息?

2 个答案:

答案 0 :(得分:0)

试试这个

Go to your application target. Choose Capabilities and ensure that ‘Push Notifications’ is enabled there.

答案 1 :(得分:-1)

您需要在Coroutine或更新中检查deviceToken。

    using UnityEngine;
    using UnityEngine.Networking;
    using System.Collections;
    using NotificationServices = UnityEngine.iOS.NotificationServices;
    using NotificationType = UnityEngine.iOS.NotificationType;

    public class NotificationRegistrationExample : MonoBehaviour
    {
        bool tokenSent;

        void Start()
        {
            tokenSent = false;

            NotificationServices.RegisterForNotifications(
                NotificationType.Alert |
                NotificationType.Badge |
                NotificationType.Sound, true);
        }

        void Update()
        {
            if (!tokenSent)
            {
                byte[] token = NotificationServices.deviceToken;
                if (token != null)
                {
                    // send token to a provider
                    string token = System.BitConverter.ToString(token).Replace('-', '%');
                    Debug.Log(token)
                    tokenSent = true;
                }
            }
        }
    }

实现很糟糕,但我们没有Unity方面的回调,所以我们需要继续监听变量值。

查看文档:

https://docs.unity3d.com/ScriptReference/iOS.NotificationServices.RegisterForNotifications.html

似乎还需要互联网。我想那里有Apple服务。

是的,即使用户拒绝权限,注册错误也是空的。

我所做的是使用UniRX并设置一个Observable fron一个Coroutine并且超时,所以它不会永远要求它。  如果您接受并且您没有收到令牌可能是互联网连接。而且我猜你是在真实的设备上玩这个。