2012-05-16 9 views
9

numaralı bayt dizisine dönüştürün Çeşitli otomatik yenilenebilir abonelikler için iOS uygulamamız için uygulama içi satın alımları uyguluyorum. Ödeme tamamlandığında, aboneliğin geçerli olduğundan, iptal edilmediğinden/iade edilmediğinden veya yenilenmesinden emin olmak için makbuzu belirli bir aralıkta doğrulayabilmemiz amacıyla bilgileri kaydetmek için sunucuya (bulut) işlem bilgilerini göndermemiz gerekir. Uygulama içi satın alma rehberi ve paylaşılan sırrımızla bunu yapmak için belirli aralıklarla JSON çağrılarını sunucudan yapacağız. Ancak bunu yapmamız gerekmeden önce satın alma işleminden alakalı verileri almamız gerekiyor. yani bir NSData nesnesi olan TransactionReceipt.NSData'yı base64encoded ve C#

Web hizmetimize TransactionReceipt (satın alınan ProductID gibi diğer öğelerden) için iki parametre göndermek istiyoruz. Bunu, referans için JSON talebinde gönderilmesi gerektiğine inandığımız bir base64encoded değeri olarak göndermek istiyoruz, bu yüzden bunu SQL Server'da saklayacağız.

HOw, MonoTouch/C# kullanarak NSData "TransactionReceipt" i base64encoded ve ayrıca bir byte [] dönüştürebilir miyiz?

Teşekkür ederiz.

cevap

6

NSData'dan Stream veya Bytes ve Length özelliklerini kullanarak verileri almanın iki kolay yolu vardır.

public byte[] ToByte (NSData data) 
{ 
    MemoryStream ms = new MemoryStream(); 
    data.AsStream().CopyTo (ms); 
    return ms.ToArray(); 
} 

Bytes ve Length versiyonu olacaktır::

public byte[] ToByte (NSData data) 
{ 
    byte[] result = new byte[data.Length]; 
    Marshal.Copy (data.Bytes, result, 0, (int) data.Length); 
    return result; 
} 

base64 çıktı dize alınıyor özdeş kalır: gibi dere sürümü olmazdı zamanda çalışan

public string ToBase64String (NSData data) 
{ 
    return Convert.ToBase64String (ToByte (data)); 
} 
+0

En iyi ToByte yöntemini kullanmaya çalışırken bu hatayı aldım: // İleti: NSMutableData için Sarma desteklenmiyor, yeni UnmanagedMemoryStream ((Byte *) mutableData.Bytes, mutableData.Length) yerine // Özel Durum: Sarmalayıcı for NSMutableData desteklenmiyor, yerine yeni UnmanagedMemoryStream ((Byte *) mutableData.Bytes, mutableData.Length) çağrısı ::: at MonoTouch.Foundation.NSData.AsStream() [0x0002f]/Geliştirici/MonoTouch/Kaynak/monotouch/src /shared/Foundation/NSData.cs:144 – Neal

+0

Her 'NSData' değiştirilemez ve' AsStream' bunun için kontrol eder, bkz .: https://github.com/mono/maccore/blob/master/src/Foundation/NSData .cs # L136 Önerilen kodu deneyebilirsiniz (örn. "UnmanagedMemoryStream") ya da "ToByte" ın ikinci sürümü sağladım ('Marshal' kullanır ve verileri kopyalar). – poupou

0

:

string yourDataInBase64 = Convert.ToBase64String(yourData.ToArray());