如何在iPhone中使用C#.net进行推送通知的后端准备 [英] How to prepare backend using C#.net for Push Notifcation in iPhone

查看:50
本文介绍了如何在iPhone中使用C#.net进行推送通知的后端准备的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using System.Text;
using System.Security.Authentication;
using System.Net.Security;
using System.Net.Sockets;
using System.Security.Cryptography.X509Certificates;
using Newtonsoft.Json.Linq;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnPush_Click(object sender, EventArgs e)
        {
            pushMessage(txtDeviceID.Text.Trim(), txtPayload.Text.Trim());
        }


        public void pushMessage(string deviceID, string Mesaj)
        {

            int port = 2195;
            String hostname = "gateway.push.apple.com";

            String certificatePath = HttpContext.Current.Server.MapPath("new_dev_cert.p12");
            X509Certificate2 clientCertificate = new X509Certificate2(System.IO.File.ReadAllBytes(certificatePath), "taxmann");
            X509Certificate2Collection certificatesCollection = new X509Certificate2Collection(clientCertificate);

            TcpClient client = new TcpClient(hostname, port);
            SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);

            try
            {
                sslStream.AuthenticateAsClient(hostname, certificatesCollection, SslProtocols.Ssl3, false);

                MemoryStream 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(HexStringToByteArray(deviceID.ToUpper()));
                String payload = "{\"aps\":{\"alert\":\"" + Mesaj + "\",\"badge\":1,\"sound\":\"default\"}}";
                writer.Write((byte)0);
                writer.Write((byte)payload.Length);
                byte[] b1 = System.Text.Encoding.UTF8.GetBytes(payload);
                writer.Write(b1);
                writer.Flush();
                byte[] array = memoryStream.ToArray();
                sslStream.Write(array);
                sslStream.Flush();
                client.Close();
                lblResponse.Text = "Sucess..";
            }
            catch (System.Security.Authentication.AuthenticationException ex)
            {
                client.Close();
                lblResponse.Text = ex.Message;
            }   
            catch (Exception e)
            {
                client.Close();
                lblResponse.Text = e.Message;
            }
        }

        // The following method is invoked by the RemoteCertificateValidationDelegate. 
        public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;
            else // Do not allow this client to communicate with unauthenticated servers. 
                return false;
        }

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

            return deviceToken;
        }
    }
}

以上是我用于发送通知的后端的源代码.我的代码调试成功并收到消息.但是我无法在iPhone上获取通知.

Above is my source code of the Back End for sending Notification. My code debugs successfully and getting message. But I am not able to Get Notification on iPhone.

我已遵循此 http://blog.serverdensity.com/how-to-build-an-apple-push-notification-provider-server-tutorial/.我不知道问题出在哪里.您能帮我解决这个问题吗?

I have followed this http://blog.serverdensity.com/how-to-build-an-apple-push-notification-provider-server-tutorial/. I don't know where is the problem is. Can you please help me out on this issue.

推荐答案

在本教程中,它从头到尾解释了您所需的一切,并且效果很好.它说明了如何在服务器端和ios设备上设置所有内容,以及如何在开发人员门户中整理所有证书.

Go through this tutorial it explains everything you need from start to finish and works perfectly. It explains how to set up everything server side and on the ios device as well as sorting out all the certificates in the developer portal.

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

希望这会有所帮助

山姆

{
    "aps":
    {
        "alert":
        {
            "body": "Hello, world!"
        },
        "badge": 2
    }
}

这篇关于如何在iPhone中使用C#.net进行推送通知的后端准备的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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