[英]How to get device token in iOS 13 with Xamarin?
我们的 RegisteredForRemoteNotifications 代码中断,因为令牌是通过以下方式检索的:
deviceToken.ToString().Trim('<').Trim('>').Replace(" ", "");
这曾经有效,但不适用于 iOS 13,因为数据将如下所示:
"{length = 32, bytes = 0x965b251c 6cb1926d e3cb366f dfb16ddd ... 5f857679 376eab7c }"
有关于如何使用目标 c 和 swift 正确执行此操作的答案,但我还没有找到 C# 的答案。
参考:
https://nshipster.com/apns-device-tokens/
如何用 Xamarin 做到这一点?
看起来我自己找到了答案:
byte[] result = new byte[deviceToken.Length];
Marshal.Copy(deviceToken.Bytes, result, 0, (int) deviceToken.Length);
var token = BitConverter.ToString(result).Replace("-", "");
使用此代码,我能够获取设备令牌并发送通知。
这是另一种方法:
var bytes = deviceToken.ToArray<byte>();
var hexStringArray = bytes.Select(b => b.ToString("x2")).ToArray();
var token = string.Join(string.Empty, hexStringArray);
上面的代码基于我在自己的帖子https://medium.com/@kevinle/correctly-capture-ios-13-device-token-in-xamarin-3d0fa390b71b中描述的 NSHipster 的帖子
您可以使用更简化的版本:
var bytes = deviceToken.ToArray();
var token = BitConverter.ToString(bytes).Replace("-", "");
将 NSData 转换为字符串
var tokenStringBase64 =deviceToken.GetBase64EncodedString(NSDataBase64EncodingOptions.None);
将字符串转换为 NSData
var deviceToken = new NSData(tokenStringBase64, NSDataBase64DecodingOptions.None);
deviceToken object 中有一个字段叫做 DebugDescription。 格式化该字段,您将获得令牌。
var myToken = deviceToken.DebugDescription.Replace("<", string.Empty).Replace(">", string.Empty).Replace(" ", string.Empty).ToUpper();
我有同样的问题,并试图根据这篇文章实施: https://onesignal.com/blog/ios-13-introduces-4-break-changes-to-notifications/
我将在第一次有机会时测试您的解决方案,但您是否测试过它是否与以前的 iOS 版本保持兼容性?
这在 iOS 13 上对我有用。我认为 linq 选项具有更好的性能。 必须测试 iOS 12 以查看它是否向后兼容。 也曾在 iOS 12 上工作。 这解决了我的问题。 感谢您与代码新手分享..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.