IOS Pushnotification在阿拉伯语 [英] IOS Pushnotification in Arabic language

查看:314
本文介绍了IOS Pushnotification在阿拉伯语的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请让我知道如何发送推送通知的非英语语言。

我下面这个发送推送通知。英语推送通知都OK了。

但是,当我与非英语语言获得通知试图为 ???????????????????

在获得谷歌搜索建议来改变有效载荷后长度。任何一个可以帮助我在哪里可以改变如下方法尺寸长?

 私有静态的byte [] GeneratePayload(NotificationPayload负载)
    {
      尝试
      {
        //转换Devide令牌HEX值。
        字节[] = deviceToken新字节[payload.DeviceToken.Length / 2];
        的for(int i = 0; I< deviceToken.Length;我++)
            deviceToken [I] = byte.Parse(payload.DeviceToken.Substring(ⅰ* 2,2),System.Globalization.NumberStyles.HexNumber);        VAR的MemoryStream =新的MemoryStream();        //命令
        memoryStream.WriteByte(1); //更改命令类型        //添加ID有效载荷
        memoryStream.Write(Encoding.ASCII.GetBytes(payload.PayloadId.ToString()),0,payload.PayloadId.ToString()长度。);        //添加ExpiryDate有效载荷
        INT划时代=(INT)(DateTime.UtcNow.AddMinutes(300) - 新的日期时间(1970年,1,1))TotalSeconds。
        字节[] =的timeStamp BitConverter.GetBytes(时代);
        memoryStream.Write(时间标签,0,timeStamp.Length);        字节[] = tokenLength BitConverter.GetBytes((Int16的)32);
        Array.Reverse(tokenLength);
        //设备令牌的长度
        memoryStream.Write(tokenLength,0,2);        //令牌
        memoryStream.Write(deviceToken,0,32);      //字符串长度
        字符串apnMessage = payload.ToJson();
        Logger.Info(+ payload.DeviceToken +有效载荷为生成:+ apnMessage);        字节[] = apnMessageLength BitConverter.GetBytes((Int16的)apnMessage.Length);
        Array.Reverse(apnMessageLength);        //消息长度
        memoryStream.Write(apnMessageLength,0,2);        //写消息
        memoryStream.Write(Encoding.ASCII.GetBytes(apnMessage),0,apnMessage.Length);
        返回memoryStream.ToArray();
      }
      赶上(异常前)
      {
        Logger.Error(无法生成有效载荷 - + ex.Message);
        返回null;
      }
    }


解决方案

参照<一个href=\"http://stackoverflow.com/questions/1020762/does-anyone-know-how-to-write-an-apple-push-notification-provider-in-c\">this修改GeneratePayload方法,我能够发送任何非英语语言的推送通知。
code如下:

 私有静态的byte [] GeneratePayload(NotificationPayload负载)
    {
      尝试
      {
        //转换Devide令牌HEX值。
        字节[] = deviceToken新字节[payload.DeviceToken.Length / 2];
        的for(int i = 0; I&LT; deviceToken.Length;我++)
            deviceToken [I] = byte.Parse(payload.DeviceToken.Substring(ⅰ* 2,2),System.Globalization.NumberStyles.HexNumber);        VAR的MemoryStream =新的MemoryStream();        的BinaryWriter作家=新的BinaryWriter(MemoryStream的);        writer.Write((字节)0); //命令
        writer.Write((字节)0); //将DEVICEID长度的第一个字节(big-endian的第一个字节)
        writer.Write((字节)32); //该长度的DeviceID(大端第二个字节)        writer.Write(deviceToken);        writer.Write((字节)0); //载荷长度的第一个字节; (大端第一个字节)
        字节[] = B1 System.Text.Encoding.UTF8.GetBytes(payload.ToJson());
        writer.Write((字节)b1.Length);
        writer.Write(B1);
        writer.Flush();        byte []数组= memoryStream.ToArray();        //命令
        memoryStream.WriteByte(1); //更改命令类型        //添加ID有效载荷
        memoryStream.Write(Encoding.ASCII.GetBytes(payload.PayloadId.ToString()),0,payload.PayloadId.ToString()长度。);        //添加ExpiryDate有效载荷
        INT划时代=(INT)(DateTime.UtcNow.AddMinutes(300) - 新的日期时间(1970年,1,1))TotalSeconds。
        字节[] =的timeStamp BitConverter.GetBytes(时代);
        memoryStream.Write(时间标签,0,timeStamp.Length);        字节[] = tokenLength BitConverter.GetBytes((Int16的)32);
        Array.Reverse(tokenLength);
        //设备令牌的长度
        memoryStream.Write(tokenLength,0,2);        //令牌
        memoryStream.Write(deviceToken,0,32);      //字符串长度
        字符串apnMessage = payload.ToJson();
        Logger.Info(+ payload.DeviceToken +有效载荷为生成:+ apnMessage);        字节[] = apnMessageLength BitConverter.GetBytes((Int16的)apnMessage.Length);
        Array.Reverse(apnMessageLength);        //消息长度
        memoryStream.Write(apnMessageLength,0,2);        //写消息
        memoryStream.Write(Encoding.ASCII.GetBytes(apnMessage),0,apnMessage.Length);
        返回数组;
      }
      赶上(异常前)
      {
        Logger.Error(无法生成有效载荷 - + ex.Message);
        返回null;
      }
    }

Please let me know how to send push notification in non-English language.

I am following this for sending push notification. English push notifications are OK.

But when I am trying with non English language getting notification as ???????????????????.

After searching in google getting suggestions to change the length in payload. Can any one help me out where to change size length in following method?

private static byte[] GeneratePayload(NotificationPayload payload)
    {
      try
      {
        //convert Devide token to HEX value.
        byte[] deviceToken = new byte[payload.DeviceToken.Length / 2];
        for (int i = 0; i < deviceToken.Length; i++)
            deviceToken[i] = byte.Parse(payload.DeviceToken.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber);

        var memoryStream = new MemoryStream();

        // Command
        memoryStream.WriteByte(1); // Changed command Type 

        //Adding ID to Payload          
        memoryStream.Write(Encoding.ASCII.GetBytes(payload.PayloadId.ToString()), 0, payload.PayloadId.ToString().Length);

        //Adding ExpiryDate to Payload
        int epoch = (int) (DateTime.UtcNow.AddMinutes(300) - new DateTime(1970, 1, 1)).TotalSeconds;
        byte[] timeStamp = BitConverter.GetBytes(epoch);
        memoryStream.Write(timeStamp, 0, timeStamp.Length);

        byte[] tokenLength = BitConverter.GetBytes((Int16) 32);
        Array.Reverse(tokenLength);
        // device token length
        memoryStream.Write(tokenLength, 0, 2);

        // Token
        memoryStream.Write(deviceToken, 0, 32);

      // String length
        string apnMessage = payload.ToJson();
        Logger.Info("Payload generated for " + payload.DeviceToken + " : " + apnMessage);

        byte[] apnMessageLength = BitConverter.GetBytes((Int16) apnMessage.Length);
        Array.Reverse(apnMessageLength);

        // message length
        memoryStream.Write(apnMessageLength, 0, 2); 

        // Write the message
        memoryStream.Write(Encoding.ASCII.GetBytes(apnMessage), 0, apnMessage.Length);        
        return memoryStream.ToArray();
      }
      catch (Exception ex)
      {
        Logger.Error("Unable to generate payload - " + ex.Message);
        return null;
      }
    }

解决方案

with reference to this modified GeneratePayload method and I am able to send push notifications in any non english language. Code as follows:

private static byte[] GeneratePayload(NotificationPayload payload)
    {
      try
      {
        //convert Devide token to HEX value.
        byte[] deviceToken = new byte[payload.DeviceToken.Length / 2];
        for (int i = 0; i < deviceToken.Length; i++)
            deviceToken[i] = byte.Parse(payload.DeviceToken.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber);

        var memoryStream = new MemoryStream();

        BinaryWriter writer = new BinaryWriter(memoryStream);

        writer.Write((byte)0);  //The command
        writer.Write((byte)0);  //The first byte of the deviceId length (big-endian first byte)
        writer.Write((byte)32); //The deviceId length (big-endian second byte)

        writer.Write(deviceToken);       

        writer.Write((byte)0); //First byte of payload length; (big-endian first byte)        
        byte[] b1 = System.Text.Encoding.UTF8.GetBytes(payload.ToJson());
        writer.Write((byte)b1.Length);       
        writer.Write(b1);
        writer.Flush();

        byte[] array = memoryStream.ToArray();

        // Command
        memoryStream.WriteByte(1); // Changed command Type 

        //Adding ID to Payload                  
        memoryStream.Write(Encoding.ASCII.GetBytes(payload.PayloadId.ToString()), 0, payload.PayloadId.ToString().Length);

        //Adding ExpiryDate to Payload
        int epoch = (int) (DateTime.UtcNow.AddMinutes(300) - new DateTime(1970, 1, 1)).TotalSeconds;
        byte[] timeStamp = BitConverter.GetBytes(epoch);
        memoryStream.Write(timeStamp, 0, timeStamp.Length);

        byte[] tokenLength = BitConverter.GetBytes((Int16) 32); 
        Array.Reverse(tokenLength);
        // device token length
        memoryStream.Write(tokenLength, 0, 2);

        // Token
        memoryStream.Write(deviceToken, 0, 32);

      // String length
        string apnMessage = payload.ToJson(); 
        Logger.Info("Payload generated for " + payload.DeviceToken + " : " + apnMessage);

        byte[] apnMessageLength = BitConverter.GetBytes((Int16)apnMessage.Length);
        Array.Reverse(apnMessageLength);

        // message length
        memoryStream.Write(apnMessageLength, 0, 2); 

        // Write the message        
        memoryStream.Write(Encoding.ASCII.GetBytes(apnMessage), 0, apnMessage.Length);
        return array;
      }
      catch (Exception ex)
      {
        Logger.Error("Unable to generate payload - " + ex.Message);
        return null;
      }
    }

这篇关于IOS Pushnotification在阿拉伯语的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆