4

Je dois envoyer des notifications push à un périphérique Blackberry à partir de mon application ASP.NET. Quelle est la meilleure façon de le faire? Y a-t-il des bibliothèques .NET? Ai-je besoin de compiler une demande PAP par moi-même ou quelque chose comme ça?Blackberry Push Service Initiator sur IIS/.NET

Répondre

1

Il existe désormais un SDK C# BlackBerry Push open-source pouvant être utilisé et consommé par une application ASP.NET.

Le projet est hébergé sur CodePlex here.

0

Si vous ne voulez pas mettre en œuvre une bibliothèque 3ème partie, ce code a bien fonctionné pour moi:

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; 
} 
Questions connexes