繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM