techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

CoinCheck APIをJava+OKHttp3の組み合わせで呼び出してみる

仮想通貨はBitcoinなどの取引所はいくつかありますがcoincheckは多くの仮想通貨を取り扱っているのが特徴です。 そして公開されているAPIがあり、注文やレートなどの取得などを取得やコントロールすることができます。

そこで今回はcoincheckをGAEで利用するために導入にJavaのサンプルコードを分解し一番簡単な内容に抽出し説明します。

続きを読む

Firebase Cloud Messagingを使ってみる 後編

前回はFirebaseSDKを設定し、実際にPush通知を受信するところまで実施しました。

blog.techium.jp

今回はメッセージをアプリでハンドリングする方法についてみていきます。

FirebaseMessagingServiceを設定する

受信したメッセージをアプリで処理するためにはFIrebaseMessagingServiceを継承したクラスを定義し、onReceiveMessageをオーバーライドする必要があります。
受信から10秒間の処理は実行が保証されますが、10秒以上かかる処理の場合、実行が保証されないため、FirebaseJobSchedulerを使用してください。

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    Log.d(TAG, "From: " + remoteMessage.getFrom());

    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());

        if (/* 長い処理が必要な場合 */ true) {
            //  10秒以上かかる処理の場合 Firebase Job Dispatcherを使用する
            scheduleJob();
        } else {
            // 10秒未満の場合はすぐに処理する
            handleNow();
        }

    }

    // Notificationメッセージの場合
    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    }

}

メッセージの種類

  • 通知メッセージ
    受信すると自動的にNotificationを表示してくれます。
  • データメッセージ
    受信したメッセージをアプリにて処理します。
  • 両方が含まれるメッセージ
    通知とデータが両方含まれたメッセージで、基本は通知メッセージと同様の動作となります。

詳しくは以下を確認ください。
About FCM Messages  |  Firebase

フォアグラウンドとバックグラウンドの動作の違い

ここではメッセージの送信にNotifications Composerを使用しています。
メッセージの種別は、通知とデータ両方が含まれるメッセージについて記載します。

  • フォアグラウンドでの受信 FIrebaseMessagingService#onMessageReceivedメソッドが呼び出されます。
    Notificationは自動的に表示されませんので、アプリ自身がRemoteMessageの内容から適切に処理する必要があります。 データペイロードもRemoteMessageに含まれています。

  • バックグラウンドでの受信 FIrebaseMessagingService#onMessageReceivedメソッドが呼び出されません。 Notificationは自動的表示され、ユーザーに通知されます。
    メッセージに含まれるデータペイロードは、Notificationをタッチしてアプリを開いた時のIntentに付与されます。 Activityの起動時にIntentを確認し、Notificationからの起動を判断してください。

まとめ

通知メッセージはフォアグラウンドの場合のみonMessageReceivedが呼ばれ、バックグラウンドの場合はNotificationが自動的に表示され、起動Intentにデータペイロードが付与される。
データメッセージの場合は、フォアグラウンド、バックグラウンド関係なくonMessageReceivedが呼ばれ、Notificationの表示はアプリ自身が行う。
両方が含まれる場合は通知メッセージと同じ動作となる。

参考

Set Up a Firebase Cloud Messaging Client App on Android  |  Firebase Receive Messages in an Android App  |  Firebase

Python で配布用モジュールの作成

Python で配布用モジュールの作成

Python で、pip install でインストール可能なモジュールを作成する。

Python 3.6.3 (v3.6.3:2c5fed86e0, Oct  3 2017, 00:32:08) 

バージョンは3.6.3。
3.4 以降 setuptools が簡単に使えるようになっている。

準備

とりあえず書いたコードが PEP 8 準拠できているか確認する。

やらなくてもモジュール作成はできるので特にこのタイミングでやる意味はない。
(むしろコーディング中からマメに確認しておくべし)

PEP とは

PEP は Python Enhancement Protocol の略称。
コードフォーマットについてのベストプラクティス集がPEP 8。

ちなみに PEP 8 はStyle Guide for Python Codeで、PEP 257 は docstring のフォーマットについて触れている。どちらも一読すべし。

pytest/pep8

PEP 8 準拠できているかは pytest を使って確認できる。

pytest と pep8 プラグインのインストール

pip を使ってインストール可能。
これはグローバルに入れるべきか仮想環境に入れるかよくわからん。定石はあるのだろうか。
とりあえず仮想環境に入れる。

$ python3 -m venv .
$ source ./bin/activate
$ pip install pytest
$ pip install pytest-pep8

実行

上記インストールで py.test が使えるようになる。

$ pytest --pep8 ./panic.py 
============================= test session starts ==============================
platform darwin -- Python 3.6.3, pytest-3.2.3, py-1.4.34, pluggy-0.4.0
rootdir: /Users/kazuhirofurue/work/hfpython, inifile:
plugins: pep8-1.0.6
collected 1 item                                                                

panic.py .

=========================== 1 passed in 0.02 seconds ===========================

違反がなければパスする。
違反箇所は丁寧に指摘してくれるので一つずつ修正していく。

ディストリビューションパッケージの作成

setuptools を使用する。
モジュール作成したいファイルと同じディレクトリに以下を用意する。

  • README.txt
  • setup.py
$ mkdir mymodules
$ cp panic.py mymodules
$ cd mymodules
$ touch README.txt
$ touch setup.py

setup.py

from setuptools import setup

setup(
    name='hoge',
    version='1.0',
    description='Hoge hoge tools',
    author='fuga',
    author_email='fuga@example.com',
    url='example.com',
    py_modules=['panic'],
)

最後にカンマあるのすごい違和感あったけど Python ではこれ許容だそうな。もちろん無くてもいい。

README.txt はひとまずファイルだけあればモジュール作成は可能。内容はまた今度。

setup.py を実行する。

$ python3 setup.py sdist
running sdist
running egg_info
writing panic.egg-info/PKG-INFO
writing dependency_links to panic.egg-info/dependency_links.txt
writing top-level names to panic.egg-info/top_level.txt
reading manifest file 'panic.egg-info/SOURCES.txt'
writing manifest file 'panic.egg-info/SOURCES.txt'
running check
creating panic-1.0
creating panic-1.0/panic.egg-info
copying files to panic-1.0...
copying README.txt -> panic-1.0
copying setup.py -> panic-1.0
copying panic.py -> panic-1.0
copying panic.egg-info/PKG-INFO -> panic-1.0/panic.egg-info
copying panic.egg-info/SOURCES.txt -> panic-1.0/panic.egg-info
copying panic.egg-info/dependency_links.txt -> panic-1.0/panic.egg-info
copying panic.egg-info/top_level.txt -> panic-1.0/panic.egg-info
Writing panic-1.0/setup.cfg
Creating tar archive
removing 'panic-1.0' (and everything under it)

これで tar.gz ファイルが出来上がる。
このファイルを配布すれば、以下のように pip でインストール可能。

$ pip install panic-1.0.tar.gz

その他

Download Python for Other Platforms にて紹介されている

Python for iOS
Pythonista is a complete development environment for writing Python scripts on your iPad or iPhone.

気になったので購入。

Pythonista 3 - omz:software

試しに Flask とか描いてみたら普通に iPad ローカル上で動いちゃってますな。
面白そうだけど多機能過ぎて使いこなせるかは怪しい。しかし面白い

Firebase Remote Configを使ってみる

Firebase Reote Configとは

アプリのアップデートを公開しなくても、アプリの動作と外観を変更することができます。

Firebase Remote Config は、アプリのアップデートをユーザーにダウンロードしてもらわなくても、アプリの動作と外観を変更できるクラウド サービスです。Remote Config を使用する場合は、アプリの動作や外観を制御するアプリ内デフォルト値を作成します。後から Firebase コンソールを使用して、すべてのアプリユーザーまたはユーザー層のセグメントに対してアプリ内デフォルト値をオーバーライドすることができます。アップデートを適用するタイミングはアプリ側で制御できます。アプリはアップデートの有無を頻繁にチェックし、パフォーマンスにほとんど影響をおよぼすことなくアップデートを適用することができます。

  • Firebase Reote Configとは
  • セットアップ
  • FirebaseRemoteConfigのインスタンスを取得する
  • デフォルト値を設定する
  • 値を取得する
  • RemoteConfigに値を設定する
  • RemoteConfigの値を取得する
  • まとめ
  • 参考
続きを読む

Firebase Cloud Messagingを使ってみる 前編

Firebase Cloud Messaging(FCM)は、メッセージを無料で確実に配信するためのクロスプラットフォーム メッセージング ソリューションです。

FCM を使用すると、同期可能な新しいメールやその他のデータがあることをクライアント アプリに通知することができます。通知メッセージを送信することで、ユーザーにアプリを再度アピールし、定着率の向上へとつなげられます。インスタント メッセージなどの用途では、メッセージで最大 4 KB のペイロードをクライアント アプリに転送することも可能です。

  • Firebaseプロジェクトの設定
  • コンソールからメッセージを送信する。
  • 参考サイト
続きを読む