4

OS < 7.X のプッシュ通知を使用しようとしています。

サンプル サーバー/クライアント コードをダウンロードしました。デバイスにクライアント コードをデプロイし、提供された tomcat に低レベル サンプル コードをデプロイしました。

記録のために、ここでプッシュ通知に登録したときに、BIS オプションを使用して登録しました。実際にブラックベリーを与えられたので、BESを使用していると知らされました(これが私が説明しようとしている問題の根本であるとは思いません..)。

デバイスのサンプル アプリケーションで、受信した電子メールから得られたすべての正しい設定を行いました。

Tomcatサーバーを実行しているPCと電話の両方が同じwifiに接続されています。

デバイスブラウザからサーバーに接続しようとしています。https://196.84.32.112:8443/low-level-sample

ブラウザは通常どおりページを開きます。つまり、モバイルからサーバーに接続できます。

デバイス サンプル アプリから登録を押すと (設定で BIS/BES の両方のオプションを試しました)、常に次のエラーが表示されます。

登録のリクエストに失敗しました。原因 java.io.IOException: Network operation[Subscribe] failed. コンテンツ プロバイダーの URL にアクセスできることを確認してください。

ログで私が得る:

URL を開く: ユーザー名/パスワード/モデル/接続タイプなどの情報が追加されたサーバーの URL コンテンツ プロバイダーのネットワーク コマンド [登録] が196.84.32.112:8443 失敗しました。 【購読】失敗しました。コンテンツ プロバイダーの URL にアクセスできることを確認してください。

新しいプッシュ キーを再度登録し、BIS のみではなく BIS/BES オプションを使用する必要があると考えられますが、ここでの問題は、RIM サーバーではなく、ローカル サーバーとの接続がないことのようです。私はすでに登録しようとしましたが、新しい設定のメールを待っています。

また、BIS / BES オプションについても少し混乱しています。ユーザーが BIS または BES を有効にするかどうかわからないので、コードに何を入れればよいでしょうか?! サンプル アプリケーションでは、BIS または BES のどちらかを選択するように求められますが、アプリが本番環境に移行し、プログラムでその選択を行う必要がある場合、何を選択すればよいでしょうか?! または、この選択はアプリの評価/開発のためにのみ行われ、本番環境には別のサーバーがありますか?

4

2 に答える 2

3

ここですべて正しいことを述べたと思いますが、いくつかの回答をまとめて、この質問を締めくくることを望んでいます。

コードを共有していないため、事態はさらに複雑になりますが、多くの人が RIM/BlackBerry が提供する PushDemo ソースを使用しており、接続サフィックスは/pushdemo/com/rim/samples/device/push/PushUtils.java.

private static String getConnectionSuffix() {
    return ";deviceside=false;ConnectionType=mds-public";
}

私はまた、あなたの他の質問を読んだことからこれを推測しています。

これにより、BIBS の BlackBerry トランスポート タイプがハードコーディングされました。 BlackBerry は、BES、BIS、BIBS、WAP など、さまざまなトランスポートをサポートしています。BIBS トランスポートは、デバイスからインターネット上の BlackBerry のサーバーにリクエストを送信します。(注: この部分は、おそらく iOS/Android 開発者を混乱させるでしょう。これらのプラットフォームは、通常の HTTP/S トラフィックを中継するための Apple/Google ネットワーク仲介を提供しないためです) 。

次に、リクエストは次の場所にあるサーバーに中継されます。

196.84.32.112:8443

TCP/IP エンドポイントがインターネットから利用できないことは確かです (到達できません)。だから、それがあなたにとって失敗する理由です。

このURLを取ることができます

https://196.84.32.112:8443/low-level-sample

それを BlackBerry デバイスのブラウザに貼り付ければ、機能します。デバイスは、会社の内部サーバーを使用する BES 用に構成されています。これらの内部サーバーはエンドポイントに到達できる196.84.32.112:8443ため、うまく機能しているようです。しかし、それは、を使用するプッシュ コードにあるように、 transportをハードコーディングしていないためですgetConnectionSuffix()。デバイスのブラウザーは、機能するトランスポートを見つけ出すほどスマートであり、BES はそのイントラネットサーバーにアクセスするために機能します。

うまくいけば、それは紛らわしい部分を説明します.

ソリューション

他の人が言ったように、解決策は、会社の IT 担当者に、ファイアウォールを介して IP アドレス 196.84.32.112 とポート 8443 にアクセスできるようにすることです。これにより、BlackBerry サーバーが正常にアクセスできるようになります。

もう 1 つの解決策は、PushUtils.java コードを変更して BIBS トランスポートを回避することです。

private static String getConnectionSuffix() {
    return ";deviceside=false";
}

非常に柔軟なコードが必要な場合は、5.0 より前の HTTP 接続ロジックを使用しているように見えるため、その PushUtils.java コードを書き直すことをお勧めします。 複数のトランスポートをサポートする場合、OS 5.0+ の ConnectionFactoryにより、これがより簡単になり、より堅牢になります。

複数のトランスポートを持つユーザーのサポートに関する質問に答えるには、この blackberry.com の例、特にMyConnectionFactoryクラスを見てください。アプリで許可するトランスポートと、最初に試行するトランスポートを選択できます。

最終的に、サーバーを公開するかどうかの決定は、それがどのように使用されるか、および非企業のインターネット クライアントが企業サーバーに登録しようとするかどうかによって決まります。

于 2013-04-17T08:00:02.707 に答える
2

まず、BB Push Demo の登録フローについて説明します。

[登録] をクリックすると、デバイスが

  1. デバイスが登録を希望していることを Web アプリケーションに通知します。このために、デバイスに関する情報を Web アプリケーション (いわゆる ContentProvider) に送信します。その情報をデータベースに保存することが期待されています。このステップContentProviderProtocol.performCommand()は、プッシュ デモのメソッドで行われます。

  2. アプリケーションからのプッシュ通知を受信するためにデバイスが登録することを BB プッシュ サーバーに通知します。これBpasProtocol.register()は、プッシュ SDK のメソッドで発生します。

ステップ 1 は、プッシュ通知に登録されているすべてのユーザーを知りたい場合にのみ必要です (おそらく、各デバイスに個別のプッシュ通知を送信し、すべての登録ユーザーにメッセージをブロードキャストしたくない場合)。その場合、とにかくプッシュをカスタマイズするために、そのユーザーの設定などの他の情報が必要になるでしょう。

取得しているエラーはステップ 1 からのものです。ステップ 1 が成功するには、デバイスが接続できない Web アプリに接続できる必要があります。

ContentProviderProtocol.performCommand()この問題を解決するには、Web アプリをパブリックにアクセスできるようにする (そして負荷を処理する準備ができている) か、何もせずに returnしてアプリからステップ 1 をコメントアウトする必要があります。

PS: ステップ 1 で使用する webapp は、プッシュ イニシエーターと同じである必要はありません。webapp は、プッシュを受信するために登録されているすべての人を追跡するために使用されているだけであり、多くのユーザーが予想される場合は、理想的には分散アーキテクチャ上のクラウドに配置する必要があります。

于 2013-04-17T07:48:21.660 に答える