Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Xamarin在iOS 13中获取设备令牌?_C#_Ios_Xamarin_Xamarin.forms_Xamarin.ios - Fatal编程技术网

C# 如何使用Xamarin在iOS 13中获取设备令牌?

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

我们的RegisteredForRemoteNotifications代码已中断,因为使用以下方法检索令牌:

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();