0

私が知っている誰もがここで議論の質問を歓迎するわけではないので、私はこれをできるだけプログラム的にしようとしています. 一言で言えば、これを行うためのより良い方法、または既存のコードを最適化する方法を求めています。私のアプリケーションはUnity3Dゲーム エンジンを使用して作成されましたが、ゲームではありません。このエンジンは本当に使いやすいと思います。そのため、OneSignalというサービス Web サイトを使用しています。とりとめのない話はもう十分で、質問とは無関係になります。

を使用しないインスタント メッセージング アプリケーションを作成するのはこれが初めての試みですSockets。だから私の全体的なデザインはせいぜいずさんです。ただし、ここに私のセットアップがあります:

現在、PHP を使用してすべてのロジックを Web サーバーに保存する HTTP プロトコルを使用しています。基本的に私がやっていることは、データベースの結果をJSONC# で解析しSimpleJSON、アプリケーションで処理して新しいメッセージなどを表示する形式で返すことです (アプリケーション/サーバーの「読み取り済み」状態に基づいています)。

ここが私の目に問題になるところです。ユーザーが新しいメッセージを受信したときにプッシュ通知を送信することはできますが、サーバーからこれらのメッセージをすべて取得するにはどうすればよいでしょうか? これを行うために私が考えた唯一の論理的な方法は、Web サーバーを 5 ~ 10 秒ごとに定期的にポーリングし、新しいメッセージがあるかどうかを確認することでした。存在する場合は、それらを適切なメッセージ リストに追加し、「未読メッセージ」属性を適用します。

では、電話はユーザーの以前のメッセージをすべてメモリに保存する必要がありますか? または毎回データベースからすべてのメッセージを取得する必要がありますか? 2 番目のオプションは、単純なチャット機能に必要な帯域幅よりもはるかに多くの帯域幅を消費するようです. ただし、デバイスに大量のメッセージが保存されているとデバイスが乱雑になり、メッセージを開くたびにメッセージを含むフラットファイルストレージから読み取ると (私の意見では) かなりのディスク I/O が使用されるようです。では、メッセージをメモリに保存する必要がありますか? その後、Android はかなりの量を使用し、メッセージ (スレッド) が削除されない限り、GC によって収集されることはないため、常にメモリが不足しているデバイスに遭遇します。

友人から、メッセージをプッシュ通知で配信し、受信したデバイスで処理すればよいと言われたのですが、プッシュ通知が常に受信されるとは限らず、最終的には多くの失われたメッセージ。

データベースを絶えずポーリングすると、ユーザーのバッテリーが消耗します。

私はここで何をすべきか完全に途方に暮れており、いくつかのガイダンスが欲しい. これは私の最初の Android アプリケーションであり、非常に順調に進んでいますが、単純だと思ったので最後まで延期した機能 (メッセージング) が最も難しいことが判明しました。

これがこのような質問をするのに不適切な場所である場合は、これが属するコメントに(すぐに反対票を添えて)投稿してください。

4

1 に答える 1

1

Unity3d は .net/mono をサポートしているため、アプリケーションに XMPP クライアントを実装してみてください。適切なライブラリを見つけることができるはずです。

プッシュ通知は実際には IM 向けではありません (少なくともすべてのメッセージ向けではありません)。

于 2015-05-15T19:10:07.920 に答える