4

サーバーが、OS を統合せずに、Windows(Phone)、iPhone、Mac、または Android デバイスなどのクライアントにデータをワイヤレスかつシームレスにプッシュする方法はありますか?

もしそうなら、これを行うのに最適な設計パターンは何ですか?また、これを行うのに最適なテクノロジは何ですか?

4

6 に答える 6

1

プッシュテクノロジーは、クライアントがサーバーにデータの転送を要求するのではなく、サーバーがデータの転送を開始する方法論にすぎません。

Appleは、OSに組み込まれたこのような機能を提供することにより、プッシュテクノロジーを比較的使いやすくしています。Android用のGoogleクラウドメッセージングを介してAndroidと同様に。ただし、Windowsはそうではありません。

Appleプッシュ通知とAndroid向けGoogleのメッセージングは​​、OSが処理する必要のある魔法や機能のようです。ただし、必ずしもそうとは限りません。OSに「統合」することの利点は、フレームワークに機能を処理させることと同じです。


技術用語で言えば、プッシュテクノロジーは、クライアントからメッセージを受け入れるサーバーへの長期的な接続です。これらのメッセージは、クライアントが個別に要求しなかったため、プッシュされたメッセージと見なされます。

プッシュテクノロジーを自分で実装する際に留意すべき主なことは、クライアントその長寿命の接続を可能な限り維持する責任があるということです。クライアントのIPアドレスは切断間で変更される可能性があるため、サーバーはクライアントのアドレスが切断間で永続的であることが保証されていません。さらに、クライアントはファイアウォールの背後から接続できるため、サーバーがクライアントに到達することはできません。

比較のために、プルテクノロジーは、クライアントがサーバーに接続してデータを要求する、より伝統的なプロセスです。


Apple iOSの最善の策は、プッシュ通知サービスを使用することです。

Androidデバイスの場合、Android用のGoogleCloudMessagingを使用する必要があります。または、メッセージングを処理するための独自のバックグラウンドサービスを作成することもできます。ここにガイドがあります。

Windows(少なくともデスクトップ)の場合、そのような義務を実行するために独自のサービスを作成する必要があります。これは、Visual Studio( VBおよびC# )を使用してWindowsサービスを作成する方法を説明するMSDNガイドです。Windowsでそのようなメッセージングを処理するフレームワークがすでに構築されている可能性がありますが、私は何も知りません。

于 2013-02-23T21:22:25.820 に答える
1

WebSocketを使用します( socket.ioの有無にかかわらず)。将来的には、WebRTC を使用できます。

Websocket を使用すると、セットアップは非常に簡単です。クライアント (ブラウザーや WebView などのユーザー エージェント) は、http(s) 経由で Websocket サーバーに接続します (ファイアウォールの問題は少ない)。それだけです。イベントベースの API を備えた双方向ソケットがあります。

于 2013-03-02T01:47:17.283 に答える
1

「OS 統合」が「プラットフォームごとに特別なコードを書く」ことを意味する場合、答えはノーです。

ご指摘のとおり、ファイル システムへのアクセスとバックグラウンド処理が必要です。この組み合わせは、現時点ではクロスプラットフォームでは利用できません。

「OS 統合」が「apple/google/ms が機能を提供するのを待つ必要がない」ことを意味する場合、答えは「はい/たぶん」です。

一般的なプラットフォームはすべて、特定のプラットフォームが期待する方法でコーディングする限り、プッシュ通知とバックグラウンド処理のサポートを備えています。

ただし、ファイル システムへのアクセスは、プラットフォームがユーザーに課す制限に限定されます。たとえば、ios と win8(phone) では、独自のアプリのプライベート ファイル構造の外でファイルを読み書きする方法はありません。セキュリティ上の理由から、他のアプリのファイル システムにはアクセスできません。

アップデート:

ここでの一般的なパターンは、サポートしたいプラットフォームごとにアプリをリリースすることです。アプリは、それぞれのプラットフォームのプッシュ通知サービスに自身を登録します。

すべてのクライアント デバイスにプッシュするデータを受け入れるための一般的なサーバー側コードを記述します。次に、サポートするプラットフォームごとにそれぞれのプッシュ API を呼び出して、クライアント デバイスをウェイクアップさせ、指定したアプリをトリガーして応答させます。

アプリが開くと、アプリがサーバーに接続し、完全なデータをダウンロードするようになります。「プッシュ通知はアプリの単なるウェイクアップ コールです」

このようにして、どのデバイスがデータを受信したかを簡単に知ることができます。

各プラットフォーム固有のアプリは、データを独自のローカル ストレージに保存し、それぞれのプラットフォームでサポートされている方法でデータを共有する方法を提供する必要があります。

IOS では、「Open In..」パラダイムをサポートするのと同じくらい簡単です。W8Phone では、利用可能な「共有契約」のいずれかを介してデータを公開する必要があります。サポートするすべてのプラットフォームについても同様です。

これが現在の一般的なパターンです。いくつかの注意事項があります。IOS では、プッシュ通知を受信して​​もアプリは自動的に起動しません。これは、ユーザーがアプリを開いたときにのみ、アプリがデータ全体をダウンロードすることを意味します。

また、モバイル アプリは通常、バックグラウンドで無期限に実行することもできません。これは、アプリが開始されると、プッシュ通知がアプリによって自動的に処理される時間枠が限られていることを意味します。許可された「バックグラウンド時間」の後。アプリが閉じ、デバイスでプッシュ通知のビープ音が鳴りますが、ユーザーがいずれかの通知をタップするか、アプリを直接開くまで、アプリは開きません。

于 2013-02-27T09:53:30.707 に答える
0

サーバーとクライアントの間で (デバイスや OS に関係なく) リアルタイム通信を送受信したい場合は、XMPP テクノロジを使用することを強くお勧めします。

Extensible Messaging and Presence Protocol (XMPP) は、Extensible Markup Language [XML] のアプリケーション プロファイルであり、2 つ以上のネットワーク エンティティ間で構造化された拡張可能なデータのほぼリアルタイムの交換を可能にします。[XMPP‑CORE] で定義されている XMPP のコア機能は、特定の XML 名前空間によって修飾されたアプリケーション固有のデータを送信することにより、コアの上に重ねることができる、多くのタイプの準リアルタイム アプリケーションのビルディング ブロックを提供します。

http://xmpp.org/rfcs/rfc6121.html#intro - これは、適切な出発点となる最新の RFC です。

于 2013-03-03T09:04:33.343 に答える
0

技術的にはXMPP Librariesを使用できます。これはチャット システム (msn、gtalk、Facebook チャットなど) を実装するためのものですが、これはオープンソースであり、すべてのケースを処理するように構築されているため、プッシュ メッセージ システムとしてうまく機能します。考えたこともありません。また、独自のサーバーをホストして、その方法でプッシュ メッセージを送信することもできます...

于 2013-03-02T02:46:14.980 に答える