PHPと連動したAndroidおよびiOS用のプッシュオーバープッシュ通知サービス



つまり、 プッシュ通知は、指定されたアプリケーションまたはサービスを直接操作していないときにオペレーティングシステムによって表示されるプログラムまたはサービスからの小さな重要なメッセージです。 プログラムをメモリに永久に保持する必要がない場合のこのような通知の利点は、プロセッサの電力とメモリに費やします。

ここでは、リモート通知を配信するためのテクノロジー全体については説明しません 。これは、すでに私の前で 行われているため です 。 これは次のようなものです。デーモンは時々サーバーをポーリングし、メッセージが表示されたらそれを表示します。

iOSの場合はAPNS 、Androidの場合はC2DM-GCMを考え出しましたが、クロスプラットフォーム(大音量) プッシュオーバーサービスとそのphpサイトとの接続についてお話したいと思います。



タスクの例



1日に1回、サイトの1日あたりの注文数とその価値について何か知りたいとします。

このサイトはPHPとmySQLのいくつかのCMSでスピンし、ホストにはスタイリッシュなiPhoneとAndroidの電話があります。

メッセージ配信の緊急性は、バイタルインジケータには適用されません。

条件に応じたhemo液を見つける必要があります。



プッシュオーバー



Pushoverは、控えめな通知サービスでありiOSおよびAndroid 向けのアプリケーションであり、BlackBerryとOS X Mountain Lionの両方で計画されているクラフトです。 このサービスには独自のAPIがあり 、1か月あたり最大7.5千のメッセージを無料で送信できます。





メッセージには、長さ512文字のメッセージのメインテキストに加えて、大きな見出し、URL(メッセージの長さが500に増加)、およびタイトル(すべてが個別の形成されたブロックで表示されるため、このような区別)を含めることができます。 選択した選択した優先度でメッセージを配信できます。 ユーザーは、通知を起動するだけの価値がない「静かな」時間を指定したり、通知が送信されるデバイスを接続および切断したりできます。

このユーザーのすべてのデバイスにコードを提供したユーザーに、または選択により、通知を配信できます。 メッセージを受信するには、ユーザーがサービスに登録されていて、少なくとも1台の稼働中のデバイスが必要です。



ユーザーを追加




登録が完了すると 、各ユーザーは自分のオフィスに入り、すぐにハッシュトークンを確認します。 これは、通知が後で送信されるユーザーの一意の識別子です。

メッセージを受信したいユーザーは、対応するストアのアプリケーションを携帯電話/タブレット/とにかく置く必要があります。



サービスを追加する


サービスの追加はこれ以上複雑ではありません。 個人アカウントから、アプリケーション作成するためページに移動します。ここでは、製品の説明が提案されています。



適切なフィールドに入力すると、アプリケーショントークンが認識されます。 基本的に、メッセージを送信するために必要なのはこれだけです。

その後、アプリケーションページには、正常に送信されたメッセージの美しいスケジュールが表示されます。



アプリケーションと受信者のリンク


...いかなる方法でも行われません。 トークンを知っているアプリケーションは、ユーザーに通知を送信できます。 人口からのトークンの受け入れは、アプリケーションの良心に残ります。 ニュースレターの購読も解除します。



API


小さく 、容量があり、理解しやすい。 POST要求でメッセージをapi.pushover.net/1/messages.jsonまたはapi.pushover.net/1/messages.xmlに送信するには、最小値を指定する必要があります。



これに加えて、次を追加できます。





サーバー応答


サーバーの応答は、jsonまたはxml形式で呼び出されます(呼び出されたスクリプトの拡張子に応じて)。

すべてが順調に進んだ場合、 ステータスフィールドの内容が1に等しいオブジェクトが提供されます。

それ以外の場合、 ステータスフィールドには他のものが含まれ、 エラーフィールドにはエラーの説明の配列が含まれます。 XMLの送信が成功した場合と失敗した場合の応答例を次に示します。

<?xml version="1.0" encoding="UTF-8"?> <hash> <status type="integer">1</status> </hash>
      
      



そして

 <?xml version="1.0" encoding="UTF-8"?> <hash> <token>invalid</token> <errors type="array"> <error>application token is invalid</error> </errors> <status type="integer">0</status> </hash>
      
      







Php



メインページと「簡単に見える」セクションのファックスに、送信用のさまざまな言語の最も単純なスクリプトのコードが記載されており、Chris Schalenborghのサードパーティphpクラスへのリンクがあります。

CURLはどこでも使用されますが、これは理解できます。



あなたのクラスのザフィガリム


今自転車なしでどこに?

実際、通知の送信の成功がtrue / falseとして定義されていること、またはサーバーの応答のシート全体がすぐに表示されることは、あまり好きではありませんでした。 はい、通常エラー処理はありません。 サイト訪問者が不要な場合、開発者はこのメッセージまたはそのメッセージが送信されなかった理由を知る必要があると思います。

一般に、基本的にすべてを変更しています;クラスはGitHubに残りました。

クラスPushoverException
 class PushoverException extends Exception { /** * Messages array * @var array */ private $fMessages; /** * Exception constructor * @param array $aMessages An array of messages */ public function __construct(array $aMessages) { parent::__construct('PushoverException exception'); $this->fMessages = $aMessages; } /** * Get messages array * @return array */ public function getMessages() { return empty($this->fMessages) ? array() : $this->fMessages; } }
      
      





クラスプッシュオーバー
 class Pushover { /* * Pushover json api service url */ const C_API_URL = 'https://api.pushover.net/1/messages.json'; /** * Properties storage array * @var array */ private $fProperties; /** * cURL instance */ private $fCurl; //--------------------------------------------------------------------------// /** * Properties getter * @param string $aPropertyName Property name * @return mixed */ public function __get($aPropertyName) { if(array_key_exists($aPropertyName, $this->fProperties)) return $this->fProperties[$aPropertyName]; return null; } /** * Properties setter * @param string $aPropertyName Property name * @param mixed $aValue Property value */ public function __set($aPropertyName, $aValue) { $this->fProperties[$aPropertyName] = $aValue; } //--------------------------------------------------------------------------// /** * Class constructor * @param string $aApplicationToken Application token */ public function __construct($aApplicationToken = null) { if(!empty($aApplicationToken)) $this->applicationToken = $aApplicationToken; $this->fCurl = curl_init(); curl_setopt($this->fCurl, CURLOPT_URL, self::C_API_URL); curl_setopt($this->fCurl, CURLOPT_HEADER, false); curl_setopt($this->fCurl, CURLOPT_RETURNTRANSFER, true); curl_setopt($this->fCurl, CURLOPT_SSL_VERIFYPEER, false); } /** * Class destructor */ public function __destruct() { curl_close($this->fCurl); } //--------------------------------------------------------------------------// /** * Throws an exceprion with single message * @param mixed $aMessage * @throws PushoverException */ public function throwMessage($aMessage) { throw new PushoverException(array($aMessage)); } /** * Throws an exceprion with an array of messages * @param array $aMessages * @throws PushoverException */ public function throwMessages(array $aMessages) { throw new PushoverException($aMessages); } //--------------------------------------------------------------------------// /** * Send pushover notification */ public function send() { if(!strlen($this->applicationToken)) $this->throwMessage('Application token is empty'); if(!strlen($this->userToken)) $this->throwMessage('User token is empty'); if(!strlen($this->notificationMessage)) $this->throwMessage('Notification message is empty'); if(intval($this->notificationTimestamp) <= 0) $this->notificationTimestamp = time(); $lSendParams = array( 'token' => $this->applicationToken, 'user' => $this->userToken, 'device' => $this->userDevice, 'title' => $this->notificationTitle, 'message' => $this->notificationMessage, 'priority' => $this->notificationPriority, 'timestamp' => $this->notificationTimestamp, 'url' => $this->notificationUrl, 'url_title' => $this->notificationUrlTitle ); foreach($lSendParams as $lKey => $lParam) if(empty($lParam)) unset($lSendParams[$lKey]); curl_setopt($this->fCurl, CURLOPT_POSTFIELDS, $lSendParams); $lResponseJson = curl_exec($this->fCurl); if($lResponseJson === false) $this->throwMessage('API request error'); $lResponse = json_decode($lResponseJson, true); if(empty($lResponse) || !is_array($lResponse)) $this->throwMessage('Bad API response'); if(!empty($lResponse['errors'])) $this->throwMessages($lResponse['errors']); if(empty($lResponse['status']) || intval($lResponse['status']) != 1) $this->throwMessage('Unknown notification send error'); } }
      
      









最小限のメッセージは非常に簡単に送信できるようになり、エラーを解決できます。

 $lPushover = new Pushover(' '); $lPushover->userToken = ' '; $lPushover->notificationMessage = ' '; try { $lPushover->send(); echo '<font color="green">Message sent</font>', PHP_EOL; } catch (PushoverException $aException) { echo '<font color="red">Error sending messages</font><br>', PHP_EOL; echo '<ul>', PHP_EOL; foreach($aException->getMessages() as $lMessage) echo '<li>', $lMessage, '</li>', PHP_EOL; echo '</ul>', PHP_EOL; }
      
      





ユーザーはすでにメッセージを受け入れています。



合計



AndroidとiOSのユーザーに等しく正常にメッセージを送信する便利なリモート通知サービスについて知っています。

サイトからPHPに通知を送信するための機能メカニズムがあります。



All Articles