我正在努力让推送通知在iOS上运行,但我无法访问设备令牌!
我的Unity版本是5.4.1f1。
我在XCode中启用了推送通知功能,并且所有证书都已正确设置:
在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保持为空。
有人能指出我正确的方向吗?我还能尝试什么,或者如何在出错的地方获得更多信息?
答案 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并且超时,所以它不会永远要求它。 如果您接受并且您没有收到令牌可能是互联网连接。而且我猜你是在真实的设备上玩这个。