Firebase Cloud MessagingからPWAにPUSH通知 (Androidのみ)

先日obniz IoTコンテストに参加して「obniz Board 1Yと距離センサー VL53L0X 使用した鍵閉め忘れ通知アプリ」という作品を投稿したのですが、その中でFirebaseを利用してPWAへのPUSH通知を実装しました。
コンテストでは時間が限られていたので、通知をタップしてアプリのページを開くなど実装できなかった機能があったため改めて調べ直してまとめてみました。

ところで、2021年5月現在、PWAでPUSH通知を受けられるのはモバイルだとAndroidのみでiOSは残念ながらできません。iOS向けにPUSH通知をしたい場合はやはりアプリを提供する必要があります。
また、PWAはAndroidとデスクトップのChromeで若干実装が異なっているので注意が必要です。
“Firebase Cloud MessagingからPWAにPUSH通知 (Androidのみ)” の続きを読む

Larval 5アプリをGoogle AppEngineで動かすには

AppEngineでLaravelを動かすには、Cloud SQLに接続するためのunix_socketの設定や、runtimeディレクトリへの出力をCloud Strageへ向けるなどの対応が必要になります。
これらに対応した設定を生成してくれるパッケージがGaeSupportL5です。
GaeSupportL5がサポートするLaravelのバージョンは5.1です。

この記事では、Laravel5プロジェクトにGaeSupportL5をインストールし、AppEngine、Cloud SQLおよびCloud Strageリソースを設定し、デプロイ、動作確認することろまでをまとめています。

この記事で作成するLaravel 5.1のプロジェクトはGithubにアップしてありますので、全体のソースはこちらを参照ください。
Github: hrendoh/trial-gae-support-l5

Laravelプロジェクトの作成

GaeSupportL5は、5.2にはまだ対応していないので、5.1のプロジェクトを作成します。

$ composer create-project laravel/laravel laravel5-gae "5.1.*"
$ cd laravel5-gae

“Larval 5アプリをGoogle AppEngineで動かすには” の続きを読む

Google AppEngine PHPからCloud SQLへ接続する

PHPのGoogle AppEngine アプリケーションからGoogle Cloud SQLを利用する手順について調べてみたのでまとめてみました。

公式ドキュメントのチュートリアルUsing Google Cloud SQLに沿って試してみた内容になります。
このページの解説では、かなり他のページも参照しながらでないと進められませんでしたので、ここでは以下の流れを1記事で解説しています。

  1. Cloud SQLのインスタンスを作成
  2. ローカルPC(Max OS X)のMySQL Clientから接続してアプリ用のテーブルを作成
  3. AppEngineからCloud SQLデータベースへ接続

Cloud SQLは、パフォーマンスや機能が改善された第2世代が利用可能になっていますが、2016.03.30現在ベータでAppEngineからの利用はできませんので今回は第1世代を利用しました。

AppEngineのプロジェクト作成とPHPのHello Worldについては前回の記事「Google App Engine PHP開発の進め方」を参照ください。
以下は、この後からの手順になります。
“Google AppEngine PHPからCloud SQLへ接続する” の続きを読む

Google App Engine PHP開発の進め方

AppEngineは、構成選択肢がだいぶ増えておりPHPに加えて、Go、Node.js、Dockerなど様々なプラットフォームが利用可能になっています。
PHPについては、2015.6.16に正式サポートされるようになっています。
App Engine for PHP is generally available. Build scalable apps, faster.

PHPアプリを動かすプラットフォームを改めて検討することになりそうなので、App Engine SDK for PHPの使い方を調べています。
まずは、Hello Worldからですが、AppEngineは、現在Google Cloud Platformの1つのサービスとして利用可能になっています(しばらく触っていなかったのでその辺りも一から調べ直してます)。
昔のコンソール https://appengine.google.com もまだ利用可能なようですが、CGPプロジェクトを作成してAppEngineにデプロイする手順を確認しています。

手順は、Mac OS X El Capitanで確認しました。
SDKを利用するには、前提条件としてPython 2.7が必要です。El Capitanはデフォルトで利用可能なので、Pythonのセットアップと確認は省略しています。

Google App Engine SDK for PHPのインストール

Google App Engine SDK for PHPを開きMac OS XのGoogleAppEngineLauncher-1.9.35.dmg (2016.3.27現在)をダウンロードします。

「Installing on Mac OS X」にしたがってインストールしていきます。

GoogleAppEngineLauncherApplicationsフォルダにドラッグします。
GoogleAppEngineLauncherを開くと、Make command symlinksのプロンプトが開くので[OK]をクリックします。
“Google App Engine PHP開発の進め方” の続きを読む

Cloud SQL 第2世代にSQL Proxy経由でMySQLクライアントから接続するには

Cloud SQLは、2016.03.30現在ベータですが、パフォーマンスや機能が改善され価格も安い第2世代が利用可能になっています。

この記事では、第2世代から利用可能になった、Cloud SQL Proxyを利用し、ローカルPC (Mac OS X) のMySQL ClientからCloud SQLインスタンスへの接続を試した手順をまとめてみました。
外部ネットワークから接続する方法は、第1世代はIPを制限して接続を許可する方法のみでしたが、第2世代では、サーバーアカウントキーで認証してAPIを介して安全にデータベースへ接続できるようになっています。

第2世代は、AppEngineで利用できないなど制限がいくつかあります。
制限については、Google Cloud SQLとは?Cloud SQL Second Generation (ベータ)の制限で確認できます。

インスタンスの作成

Google Cloud SQLは、プロジェクトのメニュー[ストレージ]の[SQL]から利用できます。

Google Cloud SQL メニュー

初めて、利用する場合は、以下のように[インスタンスを作成]のボタンのみ表示されています。

Google Cloud SQL インスタンスの作成
※ 請求先アカウントを設定していないプロジェクトでは、左上に[課金を有効にする]ボタンが表示され、[インスタンスの作成]ボタンは表示されません。
お支払い情報を入力して請求先アカウントを設定する必要があります(無料試使用あり)。

[インスタンスを作成]ボタンをクリックしてインスタンスの作成を開始します。
“Cloud SQL 第2世代にSQL Proxy経由でMySQLクライアントから接続するには” の続きを読む

Mac OSX Marvericks上でAppEngien Pyhon 開発環境 GoogleAppEnginLauncher をセットアップする

公式のドキュメントでは The Development Environment – Google App Engine — Google Developers にセットアップ方法が記載されています。

PHPがサポートされるようになったので、もうPythonで開発する必要もなくなりましたが、久しぶりにセットアップする必要があったので手順をメモしておきます。

  1. Pythonのインストール

2014年4月現在、AppEngine SDKを利用するは Python 2.7 が必要です。
Marvericksは、プリインストールされているPythonのバージョンが2.7なので改めてPythonをインストールする必要はありません。

$ python -V
Python 2.7.5
  1. SDKの入手

Download the Google App Engine SDK – Google App Engine — Google Developers よりSDKをダウンロードします。

GoogleAppEngineLauncher-1.9.1.dmg をダウンロードし、開いて GoogleAppEnginLauncher を Applications にコピーします。
Applications にコピーした GoogleAppEnginLauncher を開くとコマンドにパスを通すか聞かれます。

GoogleAppEnginLauncher-install1
OK しておきます。

GoogleAppEnginLauncher-install2

以上でセットアップは終わり。GoogleAppEngineLauncherが開きます。

GoogleAppEngineLauncher

GoogleAppEnginLauncherは、アプリケーションを追加、起動、デプロイなどの機能を提供します。

アプリケーションの追加、起動までやってみます。

アプリケーションの追加は左下の[+]ボタンから行います。
[+]ボタンを押すと以下の設定画面が表示されます。

GoogleAppEnginLauncher-add-application

https://appengine.google.com/ で作成したApplication Identifierを Application ID に指定し、プロジェクトを保存するディレクトリ Application Directory を入力して OK します。

とりあえず Application ID は、ローカルでテストするだけなので helloworld と入れました。
指定したディレクトリに、HelloWorldアプリケーション (Hello, World! – Google App Engine — Google Developers) が生成されます。

GoogleAppEngineLauncher-start-application
追加されたアプリケーションを選択して、左上の [Run]ボタンをクリックするとアプリケーションが起動します。
(コマンドラインで dev_appserver.py を実行するのと同じです)

http://localhost:8080 にアクセスすると Hello World と表示されます。

AppEnginePython-HelloWorld

ローカルに環境を作成しなくても機能を試すだけなら、Cloud Playground が便利です。
フレームワーク Flask、Django、Bottleを利用した例:
Get Started With Python – Google App Engine — Google Developers

AppEngin (Python) でメール受信

app.yaml
[text]
– url: /_ah/mail/.+
script: handle_incoming_email.app
login: admin

inbound_services:
– mail
[/text]

handle_incoming_email.app
[python]
import logging
import webapp2
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler

class ReceiveEmail(InboundMailHandler):
def receive(self,message):
logging.info("Received email from %s" % message.sender)
plaintext = message.bodies(content_type=’text/plain’)
for text in plaintext:
txtmsg = ""
txtmsg = text[1].decode()
logging.info("Body is %s" % txtmsg)
self.response.out.write(txtmsg)

app = webapp2.WSGIApplication([
ReceiveEmail.mapping()
], debug=True)
[/python]