2010-12-12 35 views
4

Ich versuche, Push-Benachrichtigungen für MonoTouch zu implementieren, aber ich konnte nirgendwo Samples finden. Mein Problem versucht, die Geräte-ID in eine .NET-Zeichenfolge zu lesen.Wie man einen NSString zu einem String in MonoTouch konvertiert

Die Ausgabe unten ist nur eine Menge Fragezeichen, also mache ich hier etwas falsch.

Jede Hilfe würde sehr geschätzt werden!

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


    } 

Antwort

2

Hier ist ein großer Artikel zeigt, wie Push-Benachrichtigungen mit Monotouch zu tun:

http://weblogs.thinktecture.com/cweyer/2010/12/implementing-push-notifications-for-ios-with-c-monotouch-using-the-cloud-urban-airship.html

Hier ist das Snippet, das tut, was Sie wollen:

var str = (NSString)Runtime.GetNSObject (
       Messaging.intptr_objc_msgSend (deviceToken.Handle, new Selector("description").Handle)); 

var deviceTokenString = str.ToString().Replace ("<", "").Replace (">", "").Replace (" ", ""); 
+0

Danke, er hat diesen Artikel basierend auf dieser Frage eigentlich gemacht :-) –

6

Es gibt einen Operator für die implizite Konvertierung in MonoTouch.

So tun Sie gerade:

NSString s = NSString.FromData(deviceToken, NSStringEncoding.UTF8); 
string csstring = s.ToString(); 

Here's bezogene Dokumentation:

NSString s = NSString.FromData(deviceToken, NSStringEncoding.UTF8); 
string csstring = s; 
// done 

Alternativ können Sie NSString ‚s ToString() Methode verwenden.

+0

Hmmm, gibt mir noch kein Gerät ID obwohl. Ich bekomme nur DEVICE ID = ????:?. V? I ???????>? L; wenn ich die ASCII-Codierung verwende. Das UTF8 gibt mir eine leere Zeichenfolge. Vielleicht stimmt also etwas mit der Push-Registrierung nicht? Es scheint aber seltsam, da ich den Rückruf in "RegisteredForRemoteNotifications" –

+0

bekommen Das ist wahrscheinlich ein anderes Problem. Kein Konvertierungsproblem. Auf dem NSString erhalten Sie den Wert, wenn Sie es drucken? –

+0

UTF8 = Nichts, Ascii = Fragezeichen. –

0

Ich habe es geschafft, dies zu implementieren, und ich den folgenden Code:

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

Diese Sie mit einem String liefert die

<64characterlonghexstring> 

liest Sie einen Regex verwenden können, um loszuwerden, der Leerzeichen und das Zeichen "<" ">" wie erforderlich.

Ich fand das folgende Projekt sehr nützlich, um eine Monotouch-Implementierung von Push-Benachrichtigungen funktioniert: C# Apple Push Notification Service - es bietet Client-Seite Code sowie Server-Side-Code.

+0

Danke, Spot auf! Ich eigentlich nur gefunden, was ich suchte und Christian Weyer schrieb einen Artikel basierend auf meiner Anfrage http://weblogs.thinkntecture.com/cweyer/2010/12/implementing-push-notifications-for-ios-with-c-monotouch-using -the-cloud-urban-airship.html –

Verwandte Themen