C# 如何使用Xamarin在iOS 13中获取设备令牌?
我们的RegisteredForRemoteNotifications代码已中断,因为使用以下方法检索令牌:C# 如何使用Xamarin在iOS 13中获取设备令牌?,c#,ios,xamarin,xamarin.forms,xamarin.ios,C#,Ios,Xamarin,Xamarin.forms,Xamarin.ios,我们的RegisteredForRemoteNotifications代码已中断,因为使用以下方法检索令牌: deviceToken.ToString().Trim('<').Trim('>').Replace(" ", ""); 对于如何正确使用objective c和swift,有一些答案,但我还没有找到使用c#的答案 参考: 如何使用Xamarin?看来我自己找到了答案: byte[] result = new byte[deviceToken.Length]; Mars
deviceToken.ToString().Trim('<').Trim('>').Replace(" ", "");
对于如何正确使用objective c和swift,有一些答案,但我还没有找到使用c#的答案
参考:
如何使用Xamarin?看来我自己找到了答案:
byte[] result = new byte[deviceToken.Length];
Marshal.Copy(deviceToken.Bytes, result, 0, (int) deviceToken.Length);
var token = BitConverter.ToString(result).Replace("-", "");
使用这段代码,我可以获得一个设备令牌并发送通知。我遇到了同样的问题,并试图根据这篇文章实现:
我将在第一次机会测试您的解决方案,但您是否测试过它是否与以前的iOS版本保持兼容?这里有另一种方法:
var bytes = deviceToken.ToArray<byte>();
var hexStringArray = bytes.Select(b => b.ToString("x2")).ToArray();
var token = string.Join(string.Empty, hexStringArray);
var bytes=deviceToken.ToArray();
var hexStringArray=bytes.Select(b=>b.ToString(“x2”)).ToArray();
var token=string.Join(string.Empty,hexStringArray);
上面的代码基于NSHipster的一篇文章,正如我在自己的文章中所描述的,这在iOS 13上对我很有效。我认为linq选项有更好的性能。必须测试iOS 12,看看它是否向后兼容。也曾在iOS 12上工作过。这解决了我的问题!感谢与代码新手分享。您可以使用更简化的版本:
var bytes=deviceToken.ToArray();
var token=BitConverter.ToString(字节)。替换(“-”,”);
将NSData转换为字符串
var tokenStringBase64 =deviceToken.GetBase64EncodedString(NSDataBase64EncodingOptions.None);
将字符串转换为NSData
var deviceToken = new NSData(tokenStringBase64, NSDataBase64DecodingOptions.None);
deviceToken对象中有一个名为DebugDescription的字段。格式化该字段,您将获得令牌
var myToken = deviceToken.DebugDescription.Replace("<", string.Empty).Replace(">", string.Empty).Replace(" ", string.Empty).ToUpper();
var myToken=deviceToken.DebugDescription.Replace(“,string.Empty).Replace(“,string.Empty).ToUpper();
请参阅我对答案的评论。但是,当你有问题时,不应该发布答案。这并没有给我们设备令牌字符串,它似乎对内容进行了编码
var myToken = deviceToken.DebugDescription.Replace("<", string.Empty).Replace(">", string.Empty).Replace(" ", string.Empty).ToUpper();