3

我试图推送我的Z10通知时遇到问题。该设备已成功注册推送通知,并收到BlackBerry生成的注册ID,如"Creating Push-Enabled Android Apps"中所述。BlackBerry Android推送消息服务器

虽然尝试向该服务器发送通知,但我遇到问题。

对于一般的Android我使用的是GCM server library。 我必须对其进行修改,以便将消息发送到BlackBerry服务器,即https://cpXXX.pushapi.eval.blackberry.com,其中XXX是我的CPID(内容提供商ID)。

问题是,我收到一个404回报,不知道是什么原因造成的......任何想法?相同的消息会成功发送到常规Android设备...

或者,有没有人成功地将推送消息发送到您的设备,如果是这样,你能分享请求应该是什么样子吗?

回答

2

最后,我能够提出推送请求。您必须将其推送到BlackBerry服务器。我用BB SDK可用here。你必须使用的URL应该是这样的:

https://cpXXX.pushapi.eval.blackberry.com/mss/PD_pushRequest 

示例代码:

IdGenerator idGenerator = new IdGeneratorImpl(); 

     List<String> addresses = new ArrayList<String>(); 

     JSONObject message = new JSONObject(); 
     //populate message with key-value pairs 
     String data = message.toString(); 
     //populate addresses with device PINs 

     PushMessageControl pushMessageControl = new PushMessageControl(PPGType.PUBLIC_PUSH, idGenerator, "[ YOUR BlackBerryAppId]", addresses); 

     Content content = new TextContent(data, "UTF-8"); 

     PapService papService = new PapServiceImpl(); 

     PushSDKProperties properties = new PushSDKPropertiesImpl(); 
     properties.setPublicPpgAddress("[YOUR BLACKBERRY PPG ADDRESS]"); 
     properties.setParserSpecialCharacters(BLACKBERRY_PARSER_SPECIAL_CHARACTERS); 
     properties.setHttpIsPersistent(false); 
     properties.setHttpConnectionTimeout(BLACKBERRY_CONNECTION_TIMEOUT); 
     properties.setDtdDeclarationPublic(BLACKBERRY_DTD_DECLARATION_PUBLIC); 
     properties.setHttpReadTimeout(BLACKBERRY_READ_TIMEOUT); 

     HttpClientImpl client = new HttpClientImpl(); 
     client.setPushSDKProperties(properties); 
     papService.setHttpClient(client); 
     papService.setPushSDKProperties(properties); 

     PushResponse response = papService.push("[ YOUR BlackBerryAppId]", "[ YOUR BlackBerryPassword]", "[ YOUR BlackBerryAppId]", pushMessageControl, content); 

其中

private static final int BLACKBERRY_READ_TIMEOUT = 120000; 

private static final int BLACKBERRY_CONNECTION_TIMEOUT = 60000; 

private static final char[] BLACKBERRY_PARSER_SPECIAL_CHARACTERS = new char[] {'&', '"', ':', '<'}; 

private static final String BLACKBERRY_DTD_DECLARATION_PUBLIC = "<!DOCTYPE pap PUBLIC \"-//WAPFORUM//DTD PAP 2.1//EN\" \"http://www.openmobilealliance.org/tech/DTD/pap_2.1.dtd\">"; 
+0

@Zawadzki您可以分享示例代码吗? – med 2013-04-11 13:36:09

+0

@med我编辑了我的答案,我希望它能帮助你 – 2013-04-12 08:20:51

0

对于你的要求有你有添加很多东西:

  1. 你必须创建请求此URL https://android.googleapis.com/gcm/send
  2. 您必须将您的请求头添加到服务器API密钥。
  3. 并且您还必须添加到您的请求的发件人ID中,这两个ID都是由Google API控制台提供给您的2和3。
  4. 最后,这是我用来推送通知我5000个多的用户代码:

注:它已经被ASP.Net和VB.Net开发但都必须采用相同的原则:

Dim request As WebRequest = WebRequest.Create("https://android.googleapis.com/gcm/send") 
request.Method = "POST" 
request.ContentType = "application/json" 
request.Headers.Add("Authorization: key=AIzaSyA47-XMaePL1mmI0P1yQ9V4sntMVn9q-1o") 
request.Headers.Add("Sender: id=648406549877") 
Dim collapsKey = Guid.NewGuid.ToString("n") 
Dim postdata As String = "{""registration_ids"":" + ids(j) + ",""data"":{""message"":""" + TextBox1.Text + """,}" + ",""collapse_key"":""" + collapsKey + """,}" 
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postdata) 
request.ContentLength = byteArray.Length 
Dim dataStream As Stream = request.GetRequestStream 
dataStream.Write(byteArray, 0, byteArray.Length) 
dataStream.Close() 
Dim resposne As WebResponse = request.GetResponse 
Dim dataresponse As Stream = resposne.GetResponseStream 
Dim reader As New StreamReader(dataresponse) 
Dim sResponseFromServer As String = reader.ReadToEnd 
reader.Close() 
+0

感谢您的评论,但我觉得你描述的是如何发送推送什么通知Android设备工作和GCMs Java服务器库完全相同。我的问题是如何为BlackBerry设备(您可以在其上部署APK文件)执行此操作 – 2013-03-14 08:14:59

相关问题