سؤال

أحتاج إلى إرسال إشعارات الدفع إلى جهاز BlackBerry من تطبيق ASP.NET الخاص بي. ما هي أفضل طريقة للقيام بذلك؟ هل توجد مكتبات .NET؟ هل أحتاج إلى تجميع طلب PAP بنفسي أو شيء من هذا القبيل؟

هل كانت مفيدة؟

المحلول

يوجد الآن SDK C# Open Source C# BlackBerry يمكن استخدامه واستهلاكه بواسطة تطبيق ASP.NET.

يتم استضافة المشروع على CodePlex هنا.

نصائح أخرى

إذا كنت لا ترغب في تنفيذ مكتبة الطرف الثالث ، فقد عمل هذا الرمز بشكل جيد بالنسبة لي:

private static string UrlForPush = "https://cp815.pushapi.na.blackberry.com";
private static string ApplicationId = "your_appid";
private static string Password = "your_password";

// NOTE: deviceToken below is the BB PIN unique to each device.

public static string SendPushNotification(string deviceToken, string message)
{
    try
    {
        var myPushId = DateTime.Now.ToFileTime().ToString();
        var deliverBefore = DateTime.UtcNow.AddMinutes(5).ToString("s", CultureInfo.InvariantCulture) + "Z";
        var boundary = "CiTySoUrCeDbLaCkBeRrY";
        var url = UrlForPush + "/mss/PD_pushRequest";

        var data = new StringBuilder();
        data.AppendLine("--" + boundary);
        data.AppendLine("Content-Type: application/xml; charset=UTF-8");
        data.AppendLine("");
        data.AppendLine("<?xml version=\"1.0\"?>");
        data.AppendLine("<!DOCTYPE pap PUBLIC \"-//WAPFORUM//DTD PAP 2.1//EN\" \"http://www.openmobilealliance.org/tech/DTD/pap_2.1.dtd\">");
        data.AppendLine("<pap>");
        data.AppendLine("<push-message push-id=\"" + myPushId + "\" deliver-before-timestamp=\"" + deliverBefore + "\" source-reference=\"" + ApplicationId + "\">");
        data.AppendLine("<address address-value=\"" + deviceToken + "\"/>");
        data.AppendLine("<quality-of-service delivery-method=\"unconfirmed\"/>");
        data.AppendLine("</push-message>");
        data.AppendLine("</pap>");
        data.AppendLine("--" + boundary);
        data.AppendLine("Content-Type: text/plain");
        data.AppendLine("Push-Message-ID: " + myPushId);
        data.AppendLine("");
        data.AppendLine(message);
        data.AppendLine("--" + boundary + "--");
        data.AppendLine("");

        // Create the Request...
        var request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = ("POST");
        request.Accept = "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2";
        request.Credentials = new NetworkCredential(ApplicationId, Password);
        request.PreAuthenticate = true;
        request.ContentType = "multipart/related; boundary=" + boundary + "; type=application/xml";
        SetBasicAuthHeader(request, ApplicationId, Password);
        var bytes = new ASCIIEncoding().GetBytes(data.ToString());
        request.ContentLength = bytes.Length;

        // Write Stream...
        using (var stream = request.GetRequestStream())
        {
            stream.Write(bytes, 0, bytes.Length);
        }

        // Get Response ... 
        var responseAsString = string.Format("Push ID: {0}", myPushId) + Environment.NewLine + Environment.NewLine;
        using (var response = request.GetResponse() as HttpWebResponse)
        {
            var reader = new StreamReader(response.GetResponseStream());
            responseAsString += reader.ReadToEnd();
            reader.Close();
        }

        // Return...
        return responseAsString;
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
}
private static void SetBasicAuthHeader(WebRequest webRequest, String userName, String password)
{
    var authInfo = userName + ":" + password;
    authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
    webRequest.Headers["Authorization"] = "Basic " + authInfo;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top