2010-12-12 36 views
4

J'essaye d'implémenter des notifications push pour MonoTouch mais je n'ai pas pu trouver d'exemples de ceci n'importe où. Mon problème est d'essayer de lire le deviceID dans une chaîne .NET.Comment convertir un NSString en String sous MonoTouch

La sortie ci-dessous est juste un tas de points d'interrogation, donc je fais quelque chose de mal ici.

Toute aide serait grandement appréciée!

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


    } 

Répondre

2

est ici un article montrant comment faire les notifications push avec MonoTouch:

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

est ici l'extrait de code qui fait ce que vous voulez:

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

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

Merci, il a fait cet article basé sur cette question :-) –

6

Il existe un opérateur pour la conversion implicite dans MonoTouch.

Alors vous venez:

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

Vous pouvez également utiliser la méthode de ToString()NSString:

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

Here's documentation relative.

+0

Hmmm, ne fonctionne toujours me donne pas un appareil ID cependant. Je viens d'obtenir DEVICE ID = ????:?. V? I ???????> ??????> l; si j'utilise le codage ascii. L'UTF8 me donne une chaîne vide. Alors peut-être qu'il y a quelque chose qui ne va pas avec l'enregistrement push? Cela semble étrange, car je reçois le rappel dans "RegisteredForRemoteNotifications" –

+0

C'est probablement un autre problème. Pas un problème de conversion. Sur le NSString vous obtenez la valeur si vous l'imprimez? –

+0

UTF8 = Rien, Ascii = points d'interrogation. –

0

J'ai réussi à mettre en œuvre, et je le code suivant:

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

Cela vous donnera une chaîne qui se lit

<64characterlonghexstring> 

Vous pouvez utiliser une expression régulière pour se débarrasser des espaces et le caractère "<" ">" selon les besoins.

J'ai trouvé le projet suivant très utile pour obtenir une implémentation Monotouch des notifications push fonctionnant: C# Apple Push Notification Service - il fournit le code côté client ainsi que le code côté serveur.

+0

Merci, spot on! J'ai trouvé ce que je cherchais et Christian Weyer a écrit un article basé sur ma demande http://weblogs.thinktecture.com/cweyer/2010/12/implementing-push-notifications-for-ios-with-c-monotouch-using -the-cloud-urban-airship.html –