3

Z10の通知をプッシュしようとすると問題が発生します。デバイスはプッシュ通知に正常に登録され、 「プッシュ対応のAndroidアプリの作成」で説明されているようにBlackBerryで生成された登録IDを受け取ります。

そのサーバーに通知を送信しようとすると、問題が発生します。

通常のAndroidの場合、 GCMサーバーライブラリを使用していました。メッセージがBlackBerryサーバー( https://cpXXX.pushapi.eval.blackberry.com )に送信されるように変更する必要がありました。ここで、XXXは私のCPID(コンテンツプロバイダーID)です。

問題は、私が404を受け取り、それを引き起こしている原因がわからないことです...何かアイデアはありますか?同じメッセージが通常のAndroidデバイスに正常に送信されます...

または、誰かがプッシュメッセージをデバイスに送信することに成功しましたか?もしそうなら、リクエストがどのように見えるかを共有できますか?

4

2 に答える 2

2

やっとプッシュリクエストできました。BlackBerry サーバーにプッシュする必要があります。ここで入手できる BB SDK を使用しました。使用する 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\">";
于 2013-03-28T20:08:15.883 に答える
0

あなたの要求のために、あなたが追加した多くのことがあります:

  1. この URL へのリクエストを作成する必要がありますhttps://android.googleapis.com/gcm/send
  2. リクエストのヘッダーにサーバー API キーを追加する必要があります。
  3. また、Google API コンソールから提供される 2 と 3 の両方であるリクエスト送信者 ID のヘッダーに追加する必要があります。
  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()
于 2013-03-13T17:25:27.723 に答える