我正在尝试为MonoTouch实现推送通知,但我无法在任何地方找到这样的示例。我的问题是尝试将deviceID读入.NET字符串。
下面的输出只是很多问号,所以我在这里做错了。
非常感谢任何帮助!
public override void RegisteredForRemoteNotifications (UIApplication application, NSData deviceToken)
{
Console.WriteLine("Converting device ID...");
NSString s = NSString.FromData(deviceToken, NSStringEncoding.UTF8);
Console.WriteLine("DEVICE ID IS: " + s);
s = NSString.FromData(deviceToken, NSStringEncoding.ASCIIStringEncoding);
Console.WriteLine("DEVICE ID IS: " + s);
s = NSString.FromData(deviceToken, NSStringEncoding.Unicode);
Console.WriteLine("DEVICE ID IS: " + s);
}
答案 0 :(得分:7)
在MonoTouch中有一个隐式转换运算符。
所以你只是这样做:
NSString s = NSString.FromData(deviceToken, NSStringEncoding.UTF8);
string csstring = s;
// done
或者,您可以使用NSString
的{{1}}方法:
ToString()
Here's相关文档。
答案 1 :(得分:3)
这是一篇很棒的文章,展示了如何使用MonoTouch进行推送通知:
这是完成你想要的代码片段:
var str = (NSString)Runtime.GetNSObject (
Messaging.intptr_objc_msgSend (deviceToken.Handle, new Selector("description").Handle));
var deviceTokenString = str.ToString ().Replace ("<", "").Replace (">", "").Replace (" ", "");
答案 2 :(得分:0)
我设法实现了这个,我使用了以下代码:
NSString newDeviceToken = new NSString(MonoTouch.ObjCRuntime.Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(new MonoTouch.ObjCRuntime.Class("NSString").Handle, new MonoTouch.ObjCRuntime.Selector("stringWithFormat:").Handle, strFormat.Handle, deviceToken.Handle));
string token = newDeviceToken.ToString();
这将为您提供一个读取
的字符串< 64characterlonghexstring >
您可以使用正则表达式来删除空格和“&lt;” “&gt;” 中字符根据要求。
我发现以下项目非常有用,可以实现推送通知的Monotouch实现: C# Apple Push Notification Service - 它提供客户端代码以及服务器端代码。