c#推送通知无法使用土耳其语

时间:2016-08-11 13:04:20

标签: c# ios notifications

我想从c#向IOS发送通知。但它不发送包含土耳其字符的消息。

这是我的Pushmessage功能:

    public bool PushMessage(string Mess, string DeviceToken, int Badge, string Custom_Field)
    {
        ConnectToAPNS();
        List<string> Key_Value_Custom_Field = new List<string>();
        String cToken = DeviceToken;
        String cAlert = Mess;
        int iBadge = Badge;

        // Ready to create the push notification
        byte[] buf = new byte[256];
        MemoryStream ms = new MemoryStream();
        BinaryWriter bw = new BinaryWriter(ms);
        bw.Write(new byte[] { 0, 0, 32 });

        byte[] deviceToken = HexToData(cToken);
        bw.Write(deviceToken);

        bw.Write((byte)0);

        // Create the APNS payload - new.caf is an audio file saved in the application bundle on the device
        string msg = "";
        msg = "{\"aps\":{\"alert\":\"" + cAlert + "\",\"badge\":\"" + iBadge.ToString() + "\",\"sound\":\"noti.aiff\",\"priority\":\"10\"}";

        String PayloadMess = "";
        if (string.IsNullOrWhiteSpace(Custom_Field) == false)
        {
            List<string> list_Custom_Field = Custom_Field.Split(';').ToList();

            if (list_Custom_Field.Count > 0)
            {
                for (int indx = 0; indx < list_Custom_Field.Count; indx++)
                {
                    Key_Value_Custom_Field = list_Custom_Field[indx].Split('=').ToList();
                    if (Key_Value_Custom_Field.Count > 1)
                    {
                        if (PayloadMess != "") PayloadMess += ", ";
                        PayloadMess += "\"" + Key_Value_Custom_Field[0].ToString() + "\":\"" + Key_Value_Custom_Field[1].ToString() + "\"";
                    }
                }
            }
        }

        if (PayloadMess != "")
        {
            msg += ", " + PayloadMess;
        }
        msg += "}";

        bw.Write((byte)0);
        bw.Write((byte)msg.Length);
        byte[] b1 = System.Text.Encoding.UTF8.GetBytes(msg);
        bw.Write(b1);
        bw.Flush();


        if (sslStream != null)
        {

            sslStream.Write(ms.ToArray());

            return true;
        }

        return false;
    }

2 个答案:

答案 0 :(得分:1)

以下是解决方案:

我改变了

bw.Write((byte)msg.Length);
byte[] b1 = System.Text.Encoding.UTF8.GetBytes(msg);
bw.Write(b1);

byte[] bytes = Encoding.UTF8.GetBytes(msg);
// Write the data out to the stream
bw.Write((byte)bytes.Length);
bw.Write(msg.ToCharArray());

现在它有效。问题是字符计数错误。

答案 1 :(得分:0)

可能你刚用过

    Encoding.UTF8.GetBytes(Message);

您可以尝试以下操作:

    Encoding iso = Encoding.GetEncoding("ISO-8859-9"); //Turkish 
    Encoding utf8 = Encoding.UTF8;
    byte[] utfBytes = utf8.GetBytes(Message); 
    byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
    string msg = iso.GetString(isoBytes);