2012-05-16 11 views
9

私はさまざまな自動再生可能なサブスクリプションのiOSアプリケーション用のアプリ内購入を実装しています。支払いが完了したら、取引情報をサーバー(クラウド)に送信して情報を記録する必要があります。これにより、定期的に領収書を確認して、有効期限を確認したり、キャンセル/払い戻しをしたり、更新したりする必要がなくなります。私たちは、アプリ内購買ガイドと共有秘密を使ってこれを行うために、サーバーからJSON呼び出しを一定の間隔で行うつもりですが、それにはまだ到達していませんが、購入する前に関連データを取得する必要がありますすなわち、NSDataオブジェクトであるTransactionReceiptである。NSDataをbase64エンコードに変換し、C#のバイト配列を

TransactionReceipt(購入したProductIDなどの他の項目の中で)の2つのパラメータをWebサービスに送信します。これを検証用のJSONリクエストで送信する必要があると考えられるbase64エンコード値として送信したいので、これをSQL Serverに保存します。

HOw、MonoTouch/C#を使用すると、NSData "TransactionReceipt"をbase64エンコードされたバイトに変換できますか?

ありがとうございます。

答えて

6

またはBytesLengthのプロパティを使用して、NSDataからデータを取得する2つの簡単な方法があります。ストリームのバージョンは次のようになります。

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

BytesLengthバージョンは次のようになります。base64で出力文字列を取得する

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

は同じまま:

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

トップToByteメソッドを使用しようとしたときにこのエラーが発生しました。 //メッセージ:NSMutableDataのラッパーはサポートされていません。代わりにnew UnmanagedMemoryStream((Byte *)mutableData.Bytes、mutableData.Length)を呼び出してください。 //例外: NSMutableDataがサポートされていないため、/ Developer/MonoTouch/Source/monotouch/srcのMonoTouch.Foundation.NSData.AsStream()[0x0002f]ではなく、新しいUnmanagedMemoryStream((Byte *)mutableData.Bytes、mutableData.Length)を呼び出します。 /shared/Foundation/NSData.cs:144 – Neal

+0

「NSData」のすべてが変更可能であるとは限らず、「AsStream」がこれをチェックするわけではありません。https://github.com/mono/maccore/blob/master/src/Foundation/NSData .cs#L136あなたは提案されたコードを試すことができます。 'UnmanagedMemoryStream')、または' Marshal'を使ってデータをコピーする 'ToByte'の2番目のバージョンです。 – poupou

0

あまりにも動作すること:

string yourDataInBase64 = Convert.ToBase64String(yourData.ToArray()); 
関連する問題