Upload
vuongtram
View
256
Download
4
Embed Size (px)
Citation preview
FUJITSU SoftwareInterstage Mobile Application Server V1.3.0
アプリケーション開発ガイド
B1X1-0326-03(00)2016年8月
まえがき
本書の目的
本書は、Interstage Mobile Application Serverを利用したアプリケーションを開発できるようになることを目的としています。
本書の読者
本書は、Interstage Mobile Application Serverを利用したアプリケーションの設計・開発を行う方を対象としています。
本書を読むにあたって、以下の知識が必要です。
・ 使用するOSに関する基本的な知識
・ インターネットに関する基本的な知識
・ スマートデバイスに関する基本的な知識
・ Interstage Mobile Application Serverの基本的な知識
・ アプリケーションサーバ管理に関する基本的な知識
・ アプリケーション開発に関する基本的な知識
・ HTML5、JavaScript、CSS3の知識
本書の構成
本マニュアルは、次の構成になっています。
第1章 Interstage Mobile Application Serverにおけるアプリケーション開発の概要
Interstage Mobile Application Serverにおけるアプリケーション開発の流れ、提供するライブラリ(API)/フレームワークの概要につ
いて説明します。
第2章 ハイブリッドアプリケーション
Interstage Mobile Application Serverを使用したハイブリッドアプリケーションの開発について説明します。
第3章 ネイティブアプリケーション
Interstage Mobile Application Serverを使用したネイティブアプリケーションの開発について説明します。
第4章 Webアプリケーション
Interstage Application ServerのJava EE、Java EE 6によるWebアプリケーションの開発について説明します。
第5章 サーバアプリケーション
Interstage Mobile Application Serverにおけるサーバアプリケーションについて説明します。
第6章 プッシュ通知機能
Interstage Mobile Application Serverが提供するプッシュ通知機能を利用したアプリケーションの開発について説明します。
第7章 双方向通信サービスを利用したアプリケーション
Interstage Mobile Application Serverが提供する双方向通信サービスを利用したアプリケーションの開発について説明します。
第8章 認証
Interstage Mobile Application Serverで認証機能を利用する方法について説明します。
付録A プッシュWeb API
プッシュ通知が提供するプッシュWeb APIについて説明します。
付録B プッシュ通知のクライアントアプリケーションのサンプル
プッシュ通知のクライアントアプリケーションのサンプルについて説明します。
付録C クライアント設定ファイル
クライアント設定ファイルについて説明します。
- i -
付録D プッシュクライアント設定ファイル
プッシュクライアント設定ファイルについて説明します。
付録E Cordova CLI
Cordova CLIについて説明します。
付録F 双方向通信アプリケーションのサンプル
双方向通信アプリケーションのサンプルについて説明します。
付録G jQuery Mobile
Interstage Mobile Application ServerにおけるjQuery Mobileの使い方について説明します。
付録H トラブルシューティング
アプリケーション開発時のトラブルシューティングについて記載します。
オペレーティングシステム表記
本書では、オペレーティングシステムを以下のように略記しています。
正式名称 略称
Microsoft(R) Windows Server(R) 2012 R2 Datacenter Windows Server 2012 Windows
Microsoft(R) Windows Server(R) 2012 R2 Standard
Microsoft(R) Windows Server(R) 2012 R2 Foundation
Microsoft(R) Windows Server(R) 2012 Datacenter
Microsoft(R) Windows Server(R) 2012 Standard
Microsoft(R) Windows Server(R) 2012 Foundation
Microsoft(R) Windows Server(R) 2008 R2 Standard Windows Server 2008 R2
Microsoft(R) Windows Server(R) 2008 R2 Enterprise
Red Hat Enterprise Linux 6 (for Intel64) Linux 6 Linux
Red Hat Enterprise Linux 7 (for Intel64) Linux 7
製品添付マニュアル
本マニュアル以外に、以下のマニュアルが本製品のDVD-ROMに以下の形式で格納されています。DVD-ROMから直接参照するか、
ハードディスクにコピーして参照してください。PDF形式のマニュアルを参照するためには、Adobe Readerが必要になります。
マニュアル名称 形式 目的・用途
解説書 PDF 製品の概要や、運用および使用のうえで必要な基礎となる知識について知る
ときにご利用ください。
導入ガイド PDF 製品の動作環境やインストール、アンインストール、およびセットアップ手順に
ついて知るときにご利用ください。
運用ガイド PDF 構築した情報システムを運用・操作する方法を知るときにご利用ください。
メッセージ集 PDF メッセージの意味、対処方法を知るときにご利用ください。
トラブルシューティング集 PDF 想定されるトラブルに対する、原因と対処方法を知るときにご利用ください。
用語集 PDF 重要な用語や、製品固有の用語を知るときにご利用ください。
リリース情報 PDF 本製品の以前のバージョン・レベルからの変更点について知るときにご利用く
ださい。
商標
・ Access、Excel、PowerPointおよびWordは、米国Microsoft Corporationの製品です。
- ii -
・ Adobe、Acrobat、Adobe Reader、Acrobat Reader、Adobe ロゴ、Adobe AIR、Flash、Flash Playerは、Adobe Systems Incorporatedの
米国ならびに他の国における商標または登録商標です。
・ Android、Google Playは、Google Inc. の商標です。
・ iOSは、Cisco の米国およびその他の国における商標または登録商標です 。
・ Internet Explorer、Microsoft Internet Explorer ロゴ、Microsoft、Windows、Windows Server、Windows ストアまたはその他のマイク
ロソフト製品の名称および製品名は、米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
・ Interstageは、富士通株式会社の登録商標です。
・ OracleとJavaは、Oracle Corporation およびその子会社、関連会社の米国およびその他の国における登録商標です。文中の社名、
商品名等は各社の商標または登録商標である場合があります。
・ 本書におけるその他名称については、各社の登録商標または商標です。
なお、本書では、システム名または製品名に付記される登録表示((TM)または(R))は、省略しています。
輸出管理規制
本ドキュメントを輸出または提供する場合は、外国為替、外国貿易法および米国輸出管理関連法規等の規制をご確認の上、必要な
手続きをおとりください。
お願い
・ このマニュアルは、予告なしに変更されることがあります。
・ このマニュアルを無断で他に転用しないようお願いします。
・ このマニュアルに記載されたデータの使用に起因する第三者の特許権およびその他の権利の侵害については、当社はその責を
負いません。
発行年月日
2016年8月
著作権
マイクロソフト製品のスクリーンショットはマイクロソフトの許可を得て使用しています。
Copyright 2016 FUJITSU LIMITED
- iii -
目次
第1章 Interstage Mobile Application Serverにおけるアプリケーション開発の概要......................................................................11.1 運用イメージ........................................................................................................................................................................................ 11.2 クライアントのアプリケーション............................................................................................................................................................ 2
1.2.1 アプリケーション形態の特徴と留意点......................................................................................................................................... 21.2.2 必要なライセンス.......................................................................................................................................................................... 3
1.3 サーバのアプリケーション................................................................................................................................................................... 31.4 APIの概要........................................................................................................................................................................................... 31.5 動作環境............................................................................................................................................................................................. 5
第2章 ハイブリッドアプリケーション............................................................................................................................................. 62.1 ハイブリッドアプリケーションの概要....................................................................................................................................................6
2.1.1 Cordovaプロジェクトの構造..........................................................................................................................................................62.2 開発の流れ..........................................................................................................................................................................................7
2.2.1 開発環境の準備...........................................................................................................................................................................72.2.1.1 事前準備............................................................................................................................................................................... 72.2.1.2 開発環境のインストール........................................................................................................................................................82.2.1.3 環境変数の設定....................................................................................................................................................................82.2.1.4 外部ライブラリのインストール................................................................................................................................................ 9
2.2.2 アプリケーションの開発................................................................................................................................................................92.2.2.1 Cordovaプロジェクトの作成...................................................................................................................................................92.2.2.2 プラグインの追加...................................................................................................................................................................92.2.2.3 プラットフォームの追加....................................................................................................................................................... 102.2.2.4 コーディング.........................................................................................................................................................................102.2.2.5 アプリケーションのビルド.....................................................................................................................................................10
2.2.3 動作確認(デバッグ)................................................................................................................................................................... 102.2.4 パッケージング........................................................................................................................................................................... 10
2.2.4.1 Androidのパッケージング................................................................................................................................................... 102.2.4.1.1 Gradleの設定................................................................................................................................................................112.2.4.1.2 署名の設定...................................................................................................................................................................11
2.2.4.2 iOSのパッケージング.......................................................................................................................................................... 132.2.4.2.1 署名の設定...................................................................................................................................................................13
2.2.4.3 Windowsのパッケージング................................................................................................................................................. 142.2.4.3.1 ビルドオプション........................................................................................................................................................... 142.2.4.3.2 プロセッサアーキテクチャ............................................................................................................................................ 142.2.4.3.3 署名の設定...................................................................................................................................................................15
2.2.4.4 IMAPSサーバでアプリケーションを配布する場合のパッケージング................................................................................162.2.5 配布............................................................................................................................................................................................ 18
2.3 Cordovaプラグイン.............................................................................................................................................................................182.3.1 Battery.........................................................................................................................................................................................192.3.2 Camera........................................................................................................................................................................................ 202.3.3 Compat........................................................................................................................................................................................202.3.4 Console....................................................................................................................................................................................... 202.3.5 Contacts...................................................................................................................................................................................... 202.3.6 Crosswalk WebView Engine...................................................................................................................................................... 202.3.7 Devivce....................................................................................................................................................................................... 202.3.8 Devivce Motion.......................................................................................................................................................................... 202.3.9 Devivce Orientation....................................................................................................................................................................202.3.10 Notification............................................................................................................................................................................... 212.3.11 File............................................................................................................................................................................................ 212.3.12 File Transfer..............................................................................................................................................................................212.3.13 Geolocation...............................................................................................................................................................................212.3.14 Globalization.............................................................................................................................................................................212.3.15 Inappbrowser............................................................................................................................................................................ 212.3.16 Media........................................................................................................................................................................................ 212.3.17 Capture......................................................................................................................................................................................21
- iv -
2.3.18 Network Information................................................................................................................................................................ 212.3.19 Screen Orientation.................................................................................................................................................................... 212.3.20 Splashscreen..............................................................................................................................................................................222.3.21 Statusbar....................................................................................................................................................................................222.3.22 Test Framework........................................................................................................................................................................ 222.3.23 Vibration................................................................................................................................................................................... 222.3.24 Whitelist....................................................................................................................................................................................222.3.25 Cordova WKWebView Engine................................................................................................................................................ 222.3.26 IMAPS Application Available Time Control........................................................................................................................... 222.3.27 Beacon...................................................................................................................................................................................... 24
2.3.27.1 Beacon受信機能............................................................................................................................................................... 242.3.27.2 お知らせメッセージ表示機能........................................................................................................................................... 242.3.27.3 サンプル............................................................................................................................................................................ 25
2.3.28 IMAPS Core............................................................................................................................................................................. 252.3.28.1 各機能の設定....................................................................................................................................................................252.3.28.2 認証................................................................................................................................................................................... 26
2.3.28.2.1 ログイン....................................................................................................................................................................... 262.3.28.2.2 ログアウト.....................................................................................................................................................................272.3.28.2.3 ユーザー情報の登録、取得、削除............................................................................................................................272.3.28.2.4 SLS内のデータの引き継ぎ........................................................................................................................................ 282.3.28.2.5 管理情報による認証.................................................................................................................................................. 292.3.28.2.6 パスワード変更........................................................................................................................................................... 302.3.28.2.7 タイムアウト検知..........................................................................................................................................................30
2.3.28.3 SLS.....................................................................................................................................................................................302.3.28.3.1 データの格納および取得.......................................................................................................................................... 312.3.28.3.2 データの削除、データ数およびキーの取得............................................................................................................. 322.3.28.3.3 サンプル..................................................................................................................................................................... 32
2.3.28.4 ログ収集.............................................................................................................................................................................332.3.28.4.1 ログ出力とサーバへの送信....................................................................................................................................... 332.3.28.4.2 ログ設定の変更.......................................................................................................................................................... 34
2.3.29 IMAPS Push............................................................................................................................................................................. 352.3.30 IMAPS Cloud Push...................................................................................................................................................................352.3.31 IMAPS Push Properties............................................................................................................................................................ 362.3.32 IMAPS Zip File........................................................................................................................................................................ 36
2.3.32.1 サンプル............................................................................................................................................................................ 362.3.33 Keyboard...................................................................................................................................................................................362.3.34 BarcodeScanner........................................................................................................................................................................ 36
2.4 プラグインの開発...............................................................................................................................................................................372.5 注意事項........................................................................................................................................................................................... 37
2.5.1 CordovaプラグインのAPI使用時の注意事項............................................................................................................................372.5.2 WNSを使用する場合の注意事項............................................................................................................................................. 372.5.3 Windowsアプリのビルド対象プロセッサについて.....................................................................................................................382.5.4 Visual Studioを使用した場合の注意事項.................................................................................................................................392.5.5 iOSでHTTP通信する場合の注意事項..................................................................................................................................... 39
第3章 ネイティブアプリケーション..............................................................................................................................................403.1 ネイティブアプリケーションの概要.................................................................................................................................................... 403.2 開発の流れ........................................................................................................................................................................................403.3 Androidアプリケーションの開発........................................................................................................................................................40
3.3.1 開発環境の準備.........................................................................................................................................................................403.3.2 ネイティブアプリケーションの開発をする(Android Studio)....................................................................................................... 403.3.3 認証............................................................................................................................................................................................ 43
3.3.3.1 認証API............................................................................................................................................................................... 433.3.3.2 ログイン................................................................................................................................................................................ 433.3.3.3 ログアウト..............................................................................................................................................................................443.3.3.4 認証情報の付与..................................................................................................................................................................453.3.3.5 管理情報の設定..................................................................................................................................................................45
- v -
3.3.3.6 パスワード変更.................................................................................................................................................................... 463.3.3.7 ユーザー情報の登録、取得、削除.....................................................................................................................................473.3.3.8 SLS内のデータの引き継ぎ................................................................................................................................................. 473.3.3.9 タイムアウト検知...................................................................................................................................................................48
3.3.4 SLS..............................................................................................................................................................................................493.3.4.1 SLSのAPI............................................................................................................................................................................ 493.3.4.2 データの格納および取得................................................................................................................................................... 493.3.4.3 データの削除、データ数およびキーの取得...................................................................................................................... 49
3.3.5 ログ収集......................................................................................................................................................................................503.3.5.1 ログ収集API........................................................................................................................................................................ 503.3.5.2 ログ出力と送信.................................................................................................................................................................... 503.3.5.3 ログ設定の変更................................................................................................................................................................... 51
3.3.6 利用時間制御............................................................................................................................................................................ 513.3.6.1 利用時間制御API............................................................................................................................................................... 523.3.6.2 利用時間の制御..................................................................................................................................................................52
3.3.7 パーミッション..............................................................................................................................................................................533.3.7.1 パーミッションAPI................................................................................................................................................................ 533.3.7.2 APIに必要なパーミッションの取得とチェック..................................................................................................................... 54
3.3.8 パッケージング........................................................................................................................................................................... 553.3.9 デバッグ...................................................................................................................................................................................... 563.3.10 配布.......................................................................................................................................................................................... 56
3.4 iOSアプリケーションの開発...............................................................................................................................................................563.4.1 開発環境の準備.........................................................................................................................................................................563.4.2 ネイティブアプリケーションの開発をする(Objective-C)............................................................................................................ 573.4.3 ネイティブアプリケーションの開発をする(Swift)....................................................................................................................... 583.4.4 認証............................................................................................................................................................................................ 60
3.4.4.1 認証API............................................................................................................................................................................... 603.4.4.2 ログイン................................................................................................................................................................................ 603.4.4.3 ログアウト..............................................................................................................................................................................613.4.4.4 認証情報の付与..................................................................................................................................................................613.4.4.5 管理情報の設定..................................................................................................................................................................623.4.4.6 パスワード変更.................................................................................................................................................................... 623.4.4.7 ユーザー情報の登録、取得、削除.....................................................................................................................................623.4.4.8 SLS内のデータの引き継ぎ................................................................................................................................................. 633.4.4.9 タイムアウト検知...................................................................................................................................................................64
3.4.5 SLS..............................................................................................................................................................................................653.4.5.1 SLSのAPI............................................................................................................................................................................ 653.4.5.2 データの格納および取得................................................................................................................................................... 653.4.5.3 データの削除、データ数およびキーの取得...................................................................................................................... 66
3.4.6 ログ収集......................................................................................................................................................................................663.4.6.1 ログ収集API........................................................................................................................................................................ 663.4.6.2 ログ出力と送信.................................................................................................................................................................... 663.4.6.3 ログ設定の変更................................................................................................................................................................... 67
3.4.7 利用時間制御............................................................................................................................................................................ 683.4.7.1 利用時間制御API............................................................................................................................................................... 683.4.7.2 利用時間の制御..................................................................................................................................................................68
3.4.8 パッケージング........................................................................................................................................................................... 693.4.9 デバッグ...................................................................................................................................................................................... 713.4.10 配布.......................................................................................................................................................................................... 71
3.5 Windowsアプリケーションの開発......................................................................................................................................................713.5.1 開発環境の準備.........................................................................................................................................................................713.5.2 ネイティブアプリケーションの開発をする(Visual Studio)..........................................................................................................713.5.3 認証............................................................................................................................................................................................ 73
3.5.3.1 認証API............................................................................................................................................................................... 733.5.3.2 ログイン................................................................................................................................................................................ 733.5.3.3 ログアウト..............................................................................................................................................................................743.5.3.4 認証情報の付与..................................................................................................................................................................74
- vi -
3.5.3.5 管理情報の設定..................................................................................................................................................................753.5.3.6 パスワード変更.................................................................................................................................................................... 753.5.3.7 ユーザー情報の登録、取得、削除.....................................................................................................................................763.5.3.8 SLS内のデータの引き継ぎ................................................................................................................................................. 763.5.3.9 タイムアウト検知...................................................................................................................................................................77
3.5.4 SLS..............................................................................................................................................................................................783.5.4.1 SLSのAPI............................................................................................................................................................................ 783.5.4.2 データの格納および取得................................................................................................................................................... 783.5.4.3 データの削除、データ数およびキーの取得...................................................................................................................... 79
3.5.5 ログ収集......................................................................................................................................................................................793.5.5.1 ログ収集API........................................................................................................................................................................ 793.5.5.2 ログ出力と送信.................................................................................................................................................................... 793.5.5.3 ログ設定の変更................................................................................................................................................................... 80
3.5.6 利用時間制御............................................................................................................................................................................ 803.5.6.1 利用時間制御API............................................................................................................................................................... 813.5.6.2 利用時間の制御..................................................................................................................................................................81
3.5.7 パッケージング........................................................................................................................................................................... 823.5.8 デバッグ...................................................................................................................................................................................... 843.5.9 配布............................................................................................................................................................................................ 84
3.6 注意事項........................................................................................................................................................................................... 843.6.1 iOSでHTTP通信する場合の注意事項..................................................................................................................................... 84
第4章 Webアプリケーション..................................................................................................................................................... 864.1 Webアプリケーションの概要............................................................................................................................................................. 864.2 開発の流れ........................................................................................................................................................................................864.3 開発環境の準備................................................................................................................................................................................864.4 開発................................................................................................................................................................................................... 86
4.4.1 認証............................................................................................................................................................................................ 864.4.2 双方向通信サービス.................................................................................................................................................................. 864.4.3 jQuery Mobile.............................................................................................................................................................................86
4.5 パッケージング.................................................................................................................................................................................. 864.6 デバッグ............................................................................................................................................................................................. 864.7 配備・配備解除................................................................................................................................................................................. 87
第5章 サーバアプリケーション.................................................................................................................................................. 885.1 サーバアプリケーションの概要......................................................................................................................................................... 885.2 認証の組み込み................................................................................................................................................................................88
第6章 プッシュ通知機能...........................................................................................................................................................896.1 動作概要........................................................................................................................................................................................... 896.2 受信したメッセージの表示................................................................................................................................................................ 90
6.2.1 IMAPSプッシュ...........................................................................................................................................................................916.2.2 GCM........................................................................................................................................................................................... 926.2.3 APNs...........................................................................................................................................................................................946.2.4 WNS............................................................................................................................................................................................95
6.3 受信したメッセージからのアクション............................................................................................................................................... 1006.4 API................................................................................................................................................................................................... 103
6.4.1 サーバ側のAPI........................................................................................................................................................................ 1036.4.2 クライアント側のAPI..................................................................................................................................................................104
6.5 クライアントのアプリケーションの開発.............................................................................................................................................1056.5.1 ハイブリッドアプリケーション向けのAPIの開発....................................................................................................................... 1056.5.2 IMAPSプッシュ通知を利用するネイティブアプリケーションの開発.......................................................................................1076.5.3 GCMプッシュ通知を利用するネイティブアプリケーションの開発..........................................................................................1106.5.4 APNsプッシュ通知を利用するネイティブアプリケーションの開発......................................................................................... 1136.5.5 WNSプッシュ通知を利用するネイティブアプリケーションの開発.......................................................................................... 1156.5.6 ログ出力のカスタマイズ............................................................................................................................................................1176.5.7 認証クラスの定義..................................................................................................................................................................... 1196.5.8 拡張データの指定....................................................................................................................................................................120
- vii -
6.5.9 IMAPSプッシュの処理結果受け取り.......................................................................................................................................1216.5.10 GCMプッシュの処理結果受け取り........................................................................................................................................1236.5.11 APNsプッシュの処理結果受け取り....................................................................................................................................... 1246.5.12 WNSプッシュの処理結果受け取り........................................................................................................................................ 1256.5.13 既読通知機能の利用.............................................................................................................................................................126
6.6 サーバ側のアプリケーションの開発............................................................................................................................................... 1346.6.1 共通メッセージ送信アプリケーションの開発...........................................................................................................................134
6.6.1.1 テンプレートファイルを指定.............................................................................................................................................. 1406.6.1.2 messageOptionsを指定......................................................................................................................................................141
6.6.2 メッセージ送信アプリケーションの開発...................................................................................................................................141
第7章 双方向通信サービスを利用したアプリケーション........................................................................................................... 1437.1 概要................................................................................................................................................................................................. 1437.2 API................................................................................................................................................................................................... 1447.3 イベント.............................................................................................................................................................................................1447.4 作成例............................................................................................................................................................................................. 144
第8章 認証............................................................................................................................................................................ 1458.1 ユーザーのパスワードをリポジトリに保管する値に変換するクラスの開発....................................................................................145
8.1.1 必要なメソッドを実装する.........................................................................................................................................................1458.1.2 「認証定義」を作成する............................................................................................................................................................1468.1.3 作成したクラスと「認証定義」を設定し登録する......................................................................................................................146
8.2 パスワードの変更を行うクラスの開発............................................................................................................................................. 1468.2.1 必要なメソッドを実装する.........................................................................................................................................................1478.2.2 「認証定義」を作成する............................................................................................................................................................1478.2.3 作成したクラスと「認証定義」を設定し登録する......................................................................................................................148
8.3 認証したユーザーの情報取得....................................................................................................................................................... 1488.4 認証タイムアウトの検出...................................................................................................................................................................148
8.4.1 任意のコンテンツを返す方法.................................................................................................................................................. 1498.4.2 IMAPSクライアントAPIに通知する方法.................................................................................................................................. 1498.4.3 例.............................................................................................................................................................................................. 149
8.5 Web画面上からイベントとして受信する方法................................................................................................................................. 151
付録A プッシュWeb API.........................................................................................................................................................154A.1 登録ID情報の取得.........................................................................................................................................................................155
A.1.1 リクエスト...................................................................................................................................................................................155A.1.2 レスポンス.................................................................................................................................................................................156A.1.3 使用例......................................................................................................................................................................................156
A.2 登録IDの一覧取得.........................................................................................................................................................................157A.2.1 リクエスト...................................................................................................................................................................................157A.2.2 レスポンス.................................................................................................................................................................................158A.2.3 使用例......................................................................................................................................................................................159
A.3 登録IDの検索.................................................................................................................................................................................159A.3.1 リクエスト...................................................................................................................................................................................159A.3.2 レスポンス.................................................................................................................................................................................160A.3.3 使用例......................................................................................................................................................................................161
A.4 登録IDの削除.................................................................................................................................................................................161A.4.1 リクエスト...................................................................................................................................................................................161A.4.2 レスポンス.................................................................................................................................................................................162A.4.3 使用例......................................................................................................................................................................................162
A.5 IMAPSプッシュIDの更新...............................................................................................................................................................163A.5.1 リクエスト...................................................................................................................................................................................163A.5.2 レスポンス.................................................................................................................................................................................163A.5.3 使用例......................................................................................................................................................................................164
A.6 APNsのデバイストークン登録、更新............................................................................................................................................. 164A.6.1 リクエスト...................................................................................................................................................................................164A.6.2 レスポンス.................................................................................................................................................................................165A.6.3 使用例......................................................................................................................................................................................165
- viii -
A.7 GCMのregistrationID登録、更新...................................................................................................................................................166A.7.1 リクエスト...................................................................................................................................................................................166A.7.2 レスポンス.................................................................................................................................................................................167A.7.3 使用例......................................................................................................................................................................................167
A.8 WNSのチャネルURI登録、更新....................................................................................................................................................167A.8.1 リクエスト...................................................................................................................................................................................167A.8.2 レスポンス.................................................................................................................................................................................168A.8.3 使用例......................................................................................................................................................................................168
A.9 共通メッセージの送信....................................................................................................................................................................169A.9.1 リクエスト...................................................................................................................................................................................169A.9.2 レスポンス.................................................................................................................................................................................171A.9.3 使用例......................................................................................................................................................................................172
A.10 蓄積メッセージ参照......................................................................................................................................................................176A.10.1 リクエスト.................................................................................................................................................................................176A.10.2 レスポンス...............................................................................................................................................................................177A.10.3 使用例....................................................................................................................................................................................178
A.11 メッセージIDからのメッセージ情報の取得.................................................................................................................................. 178A.11.1 リクエスト.................................................................................................................................................................................178A.11.2 レスポンス...............................................................................................................................................................................179A.11.3 使用例....................................................................................................................................................................................180
A.12 登録IDからのメッセージ情報の取得...........................................................................................................................................182A.12.1 リクエスト.................................................................................................................................................................................182A.12.2 レスポンス...............................................................................................................................................................................183A.12.3 使用例....................................................................................................................................................................................184
A.13 既読件数の取得...........................................................................................................................................................................186A.13.1 リクエスト.................................................................................................................................................................................186A.13.2 レスポンス...............................................................................................................................................................................187A.13.3 使用例....................................................................................................................................................................................188
A.14 メッセージの送信(非推奨)........................................................................................................................................................... 189A.14.1 リクエスト.................................................................................................................................................................................189A.14.2 レスポンス...............................................................................................................................................................................190A.14.3 使用例....................................................................................................................................................................................192
付録B プッシュ通知のクライアントアプリケーションのサンプル................................................................................................. 194B.1 サンプルの概要.............................................................................................................................................................................. 194B.2 サンプルアプリの準備.................................................................................................................................................................... 194
B.2.1 IMAPSプッシュ(Android)のサンプルを準備する...................................................................................................................195B.2.2 GCM(Android)のサンプルを準備する................................................................................................................................... 195B.2.3 APNs(iOS)のサンプルを準備する.......................................................................................................................................... 196B.2.4 WNS(Windows)のサンプルを準備する..................................................................................................................................197
B.3 サーバ環境の準備をする...............................................................................................................................................................198B.4 サンプルアプリの操作方法............................................................................................................................................................ 198
B.4.1 IMAPSプッシュ(Android)のサンプルを起動する...................................................................................................................198B.4.2 GCM(Android)のサンプルを起動する................................................................................................................................... 199B.4.3 APNs(iOS)のサンプルを起動する.......................................................................................................................................... 199B.4.4 WNS(Windows)のサンプルを起動する..................................................................................................................................199
B.5 メッセージの送信............................................................................................................................................................................ 199
付録C クライアント設定ファイル..............................................................................................................................................200C.1 ファイル形式................................................................................................................................................................................... 200C.2 サンプルファイルの配置場所.........................................................................................................................................................200C.3 配置場所.........................................................................................................................................................................................201C.4 定義例.............................................................................................................................................................................................201C.5 定義項目.........................................................................................................................................................................................203
C.5.1 auth.loginMode........................................................................................................................................................................ 203C.5.2 idleTimeout.............................................................................................................................................................................. 204C.5.3 imapsServerAddress.................................................................................................................................................................204C.5.4 log.level....................................................................................................................................................................................204
- ix -
C.5.5 log.maxFileSize........................................................................................................................................................................205C.5.6 log.rotateCount.........................................................................................................................................................................205C.5.7 offlineAuthTryMaxCount........................................................................................................................................................ 205C.5.8 server.connectionTimeout........................................................................................................................................................206C.5.9 server.responseTimeout........................................................................................................................................................... 206C.5.10 sls.maxDatabaseSize.............................................................................................................................................................. 206C.5.11 ssl.noVerify............................................................................................................................................................................ 207C.5.12 appmgr.strictPolicyMode....................................................................................................................................................... 207
付録D プッシュクライアント設定ファイル..................................................................................................................................208D.1 ファイル形式................................................................................................................................................................................... 208D.2 配置場所.........................................................................................................................................................................................208D.3 定義例.............................................................................................................................................................................................209D.4 定義項目(IMAPSおよびGCMプッシュ通知)................................................................................................................................210
D.4.1 push.ServerConnectTimeout....................................................................................................................................................211D.4.2 push.ServerDataReadTimeout................................................................................................................................................. 211D.4.3 push.ServerAddress................................................................................................................................................................. 211D.4.4 push.SelfCertificate..................................................................................................................................................................212D.4.5 push.RingtoneUri..................................................................................................................................................................... 212D.4.6 push.LedSet..............................................................................................................................................................................212D.4.7 push.LedColor..........................................................................................................................................................................213D.4.8 push.LedOntime.......................................................................................................................................................................213D.4.9 push.LedOfftime...................................................................................................................................................................... 213D.4.10 push.VibPattern......................................................................................................................................................................214D.4.11 push.NotificationAppName................................................................................................................................................... 214D.4.12 push.NotificationMainClassName......................................................................................................................................... 215D.4.13 push.NotificationIconID........................................................................................................................................................ 215D.4.14 push.gcm.NotificationMode.................................................................................................................................................. 215D.4.15 push.gcm.SenderID................................................................................................................................................................216D.4.16 push.LogClassName.............................................................................................................................................................. 216D.4.17 push.AuthClassName.............................................................................................................................................................216D.4.18 push.ExtensionData............................................................................................................................................................... 217D.4.19 push.ServerConnectRetryCount.............................................................................................................................................217D.4.20 push.ServerConnectRetryWait...............................................................................................................................................218
D.5 定義項目(APNsプッシュ通知).......................................................................................................................................................218D.5.1 push.SandboxFlg......................................................................................................................................................................218D.5.2 push.Address............................................................................................................................................................................219D.5.3 push.SslForceFlg......................................................................................................................................................................219D.5.4 push.RetryWaitTime................................................................................................................................................................220D.5.5 push.LowerUpdateTime...........................................................................................................................................................220D.5.6 push.RetryCount...................................................................................................................................................................... 220
D.6 定義項目(WNSプッシュ通知)........................................................................................................................................................221D.6.1 push.ServerAddress................................................................................................................................................................. 221D.6.2 push.SelfCertificate..................................................................................................................................................................221D.6.3 push.wns.NotificationMode.....................................................................................................................................................222D.6.4 push.LogClassNameSpace.......................................................................................................................................................222D.6.5 push.LogClassName................................................................................................................................................................ 222D.6.6 push.AuthClassNameSpace..................................................................................................................................................... 223D.6.7 push.AuthClassName...............................................................................................................................................................223D.6.8 push.ExtensionData................................................................................................................................................................. 223D.6.9 push.ServerConnectRetryCount...............................................................................................................................................224D.6.10 push.ServerConnectRetryWait...............................................................................................................................................224D.6.11 push.BackGroundTaskErrorLogFileName............................................................................................................................ 224
付録E Cordova CLI...............................................................................................................................................................226E.1 cordova create..................................................................................................................................................................................226E.2 cordova help.................................................................................................................................................................................... 227E.3 cordova info.....................................................................................................................................................................................227
- x -
E.4 cordova requirements...................................................................................................................................................................... 228E.5 cordova platform add.......................................................................................................................................................................229E.6 cordova platform remove................................................................................................................................................................ 230E.7 cordova platform list....................................................................................................................................................................... 230E.8 cordova platform check................................................................................................................................................................... 231E.9 cordova plugin add.......................................................................................................................................................................... 231E.10 cordova plugin remove..................................................................................................................................................................232E.11 cordova plugin list......................................................................................................................................................................... 233E.12 cordova plugin search....................................................................................................................................................................233E.13 cordova prepare............................................................................................................................................................................. 233E.14 cordova compile............................................................................................................................................................................ 234E.15 cordova clean.................................................................................................................................................................................236E.16 cordova run....................................................................................................................................................................................236E.17 cordova build.................................................................................................................................................................................239E.18 cordova emulate............................................................................................................................................................................ 241
付録F 双方向通信アプリケーションのサンプル........................................................................................................................244F.1 サンプルアプリの種類.....................................................................................................................................................................244
付録G jQuery Mobile............................................................................................................................................................ 245G.1 アプリケーション開発方法..............................................................................................................................................................245
G.1.1 提供ファイル............................................................................................................................................................................ 245G.1.2 アプリケーションを組み込む................................................................................................................................................... 245G.1.3 jQuery MobileによるHTMLページの作成方法..................................................................................................................... 245
G.2 APIリファレンス............................................................................................................................................................................... 245G.3 開発を行う上での注意事項........................................................................................................................................................... 246G.4 留意事項.........................................................................................................................................................................................246
付録H トラブルシューティング................................................................................................................................................. 247H.1 形式.................................................................................................................................................................................................247H.2 jQueryMobile使用時に発生するトラブル......................................................................................................................................247H.3 Apache Cordova使用時に発生するトラブル................................................................................................................................. 250H.4 そのほかのトラブル.........................................................................................................................................................................253
- xi -
第1章 Interstage Mobile Application Serverにおけるアプリケーション開発の概要
Interstage Mobile Application Server(以降、IMAPSと記載します)は、スマートデバイスで動作するアプリケーションの開発・運用を支援
するライブラリ(API)/フレームワークと、サーバサイドの機能を持つ製品です。
対応OSは、サーバはWindows、Linux、クライアントはAndroid 、iOS (iPhone 、iPad)、Windowsです。 クライアントのWindowsは、Windows8.1 ストアアプリとWindows 10 UWPアプリ(以降、両者を総称してWindowsアプリと記載します)に対応しています。
スマートデバイス向けアプリケーションには様々な提供形態がありますが、IMAPSでは次の3つの形態をサポートしています。
・ ネイティブアプリケーション
・ ハイブリッドアプリケーション
・ Webアプリケーション
開発者は、IMAPSが提供する認証、セキュアローカルストレージ(以降、SLSと表記します)、ログ収集、双方向通信、プッシュ通知とい
ったライブラリを利用して、スマートデバイス向けのアプリケーションが開発できます。
サーバサイドでは、スマートデバイスを業務で利用するために必要な機能やJavaアプリケーション実行環境など、クライアントと連携し
て動作する業務アプリケーションの実行基盤を提供しています。
1.1 運用イメージ
クライアントとサーバのアプリケーション開発の流れを概略図に示します。
クライアントアプリケーションの開発から配布
クライアントアプリケーションの開発者は、IMAPSが提供するライブラリ/フレームワークを利用してアプリケーションを開発します。
開発できるアプリケーション形態は、1.2 クライアントのアプリケーションを参照してください。
開発したアプリケーションをGoogle Playなど公式の配信サイトや、IMAPSサーバに登録すれば、スマートデバイスへ配布できます。
- 1 -
サーバアプリケーションの開発
サーバアプリケーションの開発者は、クライアントアプリケーションと連携するサーバサイドの業務アプリケケーションを開発します。
開発した業務アプリケーションは、業務サーバ機能に配備して運用します。
IMAPSは業務サーバ機能のJavaアプリケーションの実行環境としてInterstage Application Serverを提供しているため、そのノウハウ
を活かして開発・運用できます。
また、サーバサイドでは双方向通信サービスが提供するライブラリ(Java)により、スマートデバイスの特徴を活かしたアプリケーション
開発も実現できます。
1.2 クライアントのアプリケーション
IMAPSを利用して開発できるアプリケーションの種類と、その概要を説明します。
ネイティブアプリケーション
ネイティブアプリケーションとは、OS固有のAPIで開発したアプリケーションです。そのため、スマートデバイスの特徴を活かしたア
プリケーションが開発できます。
IMAPSでは、ネイティブアプリケーションを作成する開発者向けに、Android、iOS、Windows用、ユーザー認証、データ暗号化、プ
ッシュ通知、ログを収集するAPIを提供しています。
ハイブリッドアプリケーション
ハイブリッドアプリケーションとは、ネイティブアプリケーションをベースにして、HTML5、JavaScript、CSS3などWeb標準技術で開発
するアプリケーションで、クロスプラットフォームに容易に対応できます。
IMAPSでは、クロスプラットフォーム・開発フレームワークであるApache Cordova(以降、Cordovaと記載します)をベースとした開発
ツールと、Cordova向けにユーザー認証やデータ暗号化などのAPIを提供しています。
Cordovaは、デバイス固有の機能(カメラやGPSなど)をJavaScriptでアクセスするプラグイン機能を提供しているため、アプリケーショ
ンからデバイスの機能を利用できます。
ハイブリッドアプリケーションはプラットフォーム展開に効果的ですが、実行速度はネイティブアプリケーションより劣ります。そのた
め、クリティカルな実行速度を求めるアプリケーションには、ネイティブアプリケーションが適しています。
Webアプリケーション
Webアプリケーションとは、HTML5、JavaScript、CSS3などWeb標準の言語やフレームワークで開発するアプリケーションで、スマー
トデバイスに搭載されているWebブラウザで動作します。
IMAPSでは、Webアプリケーションの開発に向けに、jQuery Mobileや双方向通信サービスのライブラリを提供しています。
1.2.1 アプリケーション形態の特徴と留意点
IMAPSがサポートするアプリケーション形態の特徴と留意点を以下に示します。
ネイティブ
アプリケーション
ハイブリッド
アプリケーション
Webアプリケーション
開発言語 ネイティブ
iOS:Objective-CAndroid:JavaWindows:C#
HTML5,JavaScript,CSS3ネイティブ(iOS:Objective-C、
Android:Java、Windows:C#)
HTML,JavaScript,CSS3
開発環境 iOS:Mac+XcodeAndroid:Android StudioWindows 8.1 ストアアプリ:VisualStudio 2013以降
Windows 10 UWPアプリ:VisualStudio 2015以降
iOS:Mac+XcodeAndroid:Android StudioWindows 8.1 ストアアプリ:VisualStudio 2013以降
Windows 10 UWPアプリ:VisualStudio 2015以降
テキストエディタ
事前作業 iOSの場合はApple社との開発
ライセンス契約(注)が必要
iOSの場合はApple社との開発
ライセンス契約が(注)必要
特になし
操作性 スマートデバイスの特徴を活か
した操作性
ブラウザ機能と同等 ブラウザ機能と同等
- 2 -
ネイティブ
アプリケーション
ハイブリッド
アプリケーション
Webアプリケーション
アプリタイプ クラサバ型 クラサバ型 Web型
配布方法 Google Play(注),Appstore,Windowsストア,IMAPSの
アプリ配布機能
Google Play(注),Appstore,Windowsストア ,IMAPSの
アプリ配布機能
なし(サーバに配備)
注) 必要なライセンス、契約については、1.2.2 必要なライセンスを参照
各アプリケーションの形態とIMAPSが提供するAPIの関係は、次のとおりです。図中のWebViewは、IMAPSが提供しているCordovaフレームワークに含まれているブラウザ機能で、アプリケーションに記述されたHTML5, JavaScript CSS3を解釈します。
1.2.2 必要なライセンス
アプリケーションの開発や配布には、スマートデバイスOSの供給元の定めるライセンス契約が必要です。
Androidの場合
Google Playでアプリを配布するには、Google社との契約(Google Play Developer への登録)が必要
iOSの場合
開発ライセンスとして、iDP(iOS Developer Program)または、iDEP(iOS Developer Enterprise Program)が必要
Windowsの場合
Windowsストアでアプリを配布するには、アプリケーション開発者契約が必要
1.3 サーバのアプリケーション
IMAPSは、業務サーバを構築するためのJavaアプリケーション実行環境として、Interstage Application Server を提供します。
IMAPSでは、Interstage Application ServerのJava EE 5、Java EE 6実行環境で開発する業務サーバに認証機能を組み込めます。
1.4 APIの概要
IMAPS が提供するAPI の概要を次に示します。
カテゴリ 概要
jQuery Mobile モバイル・アプリケーションのユーザーインタフェースの開発に適したJavaScriptライブラリです。
IMAPSでは、jQuery Mobile 1.4.2を提供しており、Webアプリケーション、ハイブリッドアプリケーション
の開発で使用できます。
- 3 -
カテゴリ 概要
双方向通信サービス 複数のクライアント間でリアルタイムに情報を共有するためのAPIです。APIはJavaScript、Java、Objective-Cを提供しており、Webアプリケーション、ハイブリッドアプリケーション、ネイティブアプリケーション、サ
ーバ側のアプリケーションの開発で使用できます。
プッシュ通知サービス プッシュ通知を実現するAPIで、サーバ側とクライアント側のAPIがあります。
サーバ側のAPIはWeb API(RESTインタフェース)で提供されます。クライアント側のAPIはJavaScriptとAndroid、iOS、Windowsに対応したネイティブAPIを提供しています。
Cordova API ハイブリッドアプリケーションを開発する際に使用するフレームワークです。IMAPSではApache Cordova3.6.4(AndroidおよびWindows)、Apache Cordova 3.6.3(iOS)を提供しています。従来はカメラやGPSな
どスマートデバイス特有機能を使う場合は、OSに依存したネイティブコードで開発しなければなりませ
んでした。しかし、Cordova APIを使用するとJavaScriptでデバイスを制御できるため、OSに依存せずア
プリケーションが共通化できる特徴があります。
SLS クライアントで扱うデータを暗号化し、デバイス上の領域にセキュアに格納するAPIです。APIはJavaScriptとAndroid、iOS、Windowsに対応したネイティブAPIを提供しています。
認証 クライアントからサーバに対してユーザー認証を行うためのAPIです。APIはJavaScriptとAndroid、iOS、
Windowsに対応したネイティブAPIを提供しています。
ログ収集 クライアントのアプリケーションによるログ出力と、出力したログをサーバへ送信するためのAPIです。ユ
ーザーの操作をログに出力し、サーバ側で分析するなど様々な目的に利用できます。APIはJavaScriptとAndroid、iOS、Windowsに対応したネイティブAPIを提供しています。
利用時間制御 利用時間を制御するAPIです。勤務時間外のモバイルアプリケーションの利用を防止します。APIはJavaScriptとAndroid、iOS、Windowsに対応したネイティブAPIを提供しています。
パーミッション 認証、SLS、プッシュ通知のAPIに必要なパーミッションをチェックするためのAPIです。APIはAndroidに対応したネイティブAPIを提供しています。Android6.0以上向けに開発する場合に使用します。
APIの仕様は、以下に格納されている開発者用マニュアルを参照してください。
<DVD-ROMドライブ>\apiref\index.html
<DVD-ROMマウントディレクトリ>/apiref/index.html
アプリケーション形態ごとに提供されるAPIを以下に示します。
表1.1 APIが対応しているアプリケーション形態(クライアント)
カテゴリ ハイブリッド
アプリケーション
ネイティブ
アプリケーション
Webアプリケーション
Android iOS Windows Android iOS Windows Android iOS Windows
jQuery Mobile ○ ○ - - - - ○ ○ ○
双方向通信
サービス
○ ○ - ○ ○ - ○ ○ ○
プッシュ通知 ○ ○ ○ ○ ○ ○ - - -
Cordova ○ ○ ○ - - - - - -
SLS ○ ○ ○ ○ ○ ○ - - -
認証 ○ ○ ○ ○ ○ ○ - - -
ログ収集 ○ ○ ○ ○ ○ ○ - - -
利用時間制御 ○ ○ ○ ○ ○ ○ - - -
パーミッション - - - ○ - - - - -
- 4 -
表1.2 APIが対応しているアプリケーション形態(サ―バ)
カテゴリ Linux Windows
Java EE Java EE 6 Java EE Java EE 6
双方向通信サービス ○ ○ ○ ○
プッシュ通知 ○ ○ ○ ○
1.5 動作環境
作成したアプリケーションが動作するために必要なスマートデバイスの資源について説明します。
動作確認済スマートデバイス
動作確認済スマートデバイスは随時追加します。 新情報を以下のサイトの"動作環境"を参照してください。
http://interstage.fujitsu.com/jp/mobileapserver/index.html
- 5 -
第2章 ハイブリッドアプリケーション
本章では、IMAPSを使用したハイブリッドアプリケーションの開発について説明します。
2.1 ハイブリッドアプリケーションの概要
ハイブリッドアプリケーションは、ネイティブアプリケーションとWebアプリケーションを組み合わせて開発するアプリケーションです。ネイ
ティブアプリケーションの中にHTMLやJavaScriptを解釈するレンダリングエンジンを組み込み、アプリケーションをHTMLやJavaScriptを中心に組み立てます。
IMAPSではハイブリッドアプリケーションの開発をサポートするために、Apache Cordovaを提供しています。
Apache Cordovaでは、Cordovaプラグインを使用することで、HTMLとJavaScriptだけでは、使用することができないスマートデバイスの
機能をハイブリッドアプリケーションから使用することができます。
本製品では、Apache Cordovaが標準で用意しているプラグインの他、本製品独自のCordovaプラグインを提供しています。
ハイブリッドアプリケーションは、Cordova CLIと呼ぶコマンドラインインターフェースで、作成するCordovaプロジェクトを使用して開発を
行います。 Cordova CLIの詳細については、付録E Cordova CLIを参照してください。
Apache Cordovaを使ったアプリケーション開発の詳細については、Apache Cordova Documentationを参照してください。
2.1.1 Cordovaプロジェクトの構造
Cordovaプロジェクトは以下のように構成されます。
+- hooks
+- merges
+- android
+- ios
+- windows
+- platforms
+- plugins
+- www
config.xml
www
HTMLで記述したアプリケーションのコードなどの保管先です
開発者は、主にこのwwwディレクトリの下にHTMLやCSS、JavaScriptを記述してアプリケーションを開発します。
plugins
アプリケーションで使用するプラグインの保管先です
platforms
プラットフォーム固有のファイルの保管先です
Android、iOSでネイティブ層への実装が必要な場合は、このフォルダ配下内で実装してください。
Windowsは、別途クラスライブラリのサブプロジェクトを作成し、ネイティブ層の実装を行う必要があります。
hooks
Cordova CLIの動作をカスタマイズするためのスクリプトの保管先です
cordova createコマンドでは作成されないので、必要に応じてディレクトリを作成してください
merges
プラットフォーム固有の資産の保管先です
アプリケーションのビルド時にmergesディレクトリのプラットフォームのディレクトの下に保管した資産でwww内の資産が上書きされ
ます
- 6 -
cordova createコマンドでは作成されないので、必要に応じてディレクトリを作成してください
config.xml
Cordovaプロジェクトの設定ファイルです
設定内容については、Apache Cordova Documentationを参照してください
2.2 開発の流れ
ハイブリッドアプリケーションは、Cordova CLIと呼ぶコマンドラインインターフェースを使用して、 アプリケーションを作成します。
作成したアプリケーションは、スマートデバイスまたは、エミュレーターを使用してテストします。
また、作成したアプリケーションは、IMAPSサーバで配布することができます。
ここでは、以下の手順を説明します。
1. 開発環境の準備
2. アプリケーションの開発
3. 動作確認(デバッグ)
4. 配布
2.2.1 開発環境の準備
アプリケーションを開発する前に以下の作業が必要です。
1. 事前準備
2. 開発環境のインストール
3. 環境変数の設定
2.2.1.1 事前準備
ハイブリッドアプリーケーションを開発するには、アプリケーションをビルドするために、各ベンダーが提供するビルドツールが必要で
す。
アプリケーションのビルドに必要なビルドツールは、以下のとおりです。
プラットフォー
ム
開発マシン ビルドツール
Android Windows 7(64 bit)以降、または、Mac OSX 10.10.4以降
JDK 7以降
Android SDK
・ Android SDK Tools
・ Android SDK Platform-tools
・ Android SDK Build-tools 19.1.0以上
・ Android SDK Platform(API level 14-23) 23を推奨
・ Android Support Repository
・ Google Repository
iOS Mac OS X 10.10.4以降 Xcode 7.x
・ iOS SDK 8以降
Windows Windows 8.1(64 bit)以降(Windows RTは
除く)
・ Visual Studio 2013以降(Windows 8.1 ストアアプリを開発する場合)
・ Visual Studio 2015以降(Windows 10 UWPアプリを開発する場合)
開発するWindowsアプリをビルドするために必要なライブラリを選択し
て、Visual Studioをインストールしてください。
- 7 -
2.2.1.2 開発環境のインストール
以下の手順でハイブリッドアプリケーションの開発環境をインストールします。
1. インストーラーを、開発マシンに展開する。
インストーラーは、本製品のDVDから取得します。
・ <DVD-ROMドライブ>\development\cordova
・ <DVD-ROMマウントディレクトリ>/development/cordova
開発マシンに展開するファイルは、以下です。
・ 開発マシンが、Windowsの場合:Windows.zip
・ 開発マシンが、Mac OSの場合:MacOSX.tar.gz
2. インストーラーを実行する。
インストーラーを展開したディレクトリの下のファイルを実行します。
・ 開発マシンが、Windowsの場合:install.bat
・ 開発マシンが、Mac OSの場合:install.sh
参考
アンインストールする場合は以下のファイルを実行します。
・ 開発マシンが、Windowsの場合:uninstall.bat
・ 開発マシンが、Mac OSの場合:uninstall.sh
アンインストール後に残ったファイルは必要に応じて削除してください。
2.2.1.3 環境変数の設定
Cordova CLIを使用するために、環境変数を設定します。
環境変数は、Windowsの場合は、コマンドプロンプト、MacOSの場合は、ターミナル上で設定します。
環境変数は、コマンドプロンプト、ターミナルを開いた時に毎回設定してください。
開発マシンが、Windowsの場合
1. インストーラーの下のimaps.batを実行します。imaps.batは、Cordova CLIの実行に必要な環境変数を設定します。
2. 以下の環境変数を設定します。
環境変数名 値 備考
ANDROID_HOME Android SDKのインストール先 Android用クライアントアプリケーションを開
発をする場合に必要
PATH Android SDKのインストール先\tools
Android SDKのインストール先\platform-tools
Android用クライアントアプリケーションを開
発をする場合に必要
開発マシンが、Mac OSの場合
以下の環境変数を設定します。
環境変数名 値 備考
ANDROID_HOME Android SDKのインストール先 Android用クライアントアプリケーションを開発
をする場合に必要
GRADLE_USER_HOME Cordova CLIインストール先/gradle-2.2.1/.gradle
- 8 -
環境変数名 値 備考
PATH Android SDKのインストール先/tools
Android SDKのインストール先/platform-tools
Android用クライアントアプリケーションを開発
をする場合に必要
Cordova CLIインストール先/nodejs/bin
2.2.1.4 外部ライブラリのインストール
開発に必要なその他のライブラリをインストールします。
IMAPS Coreプラグイン、IMAPS Pushプラグイン、IMAPS Cloud Pushプラグインを使用する場合、以下の手順でSQLiteをインストール
します。
注意
すでにSQLite for Windows Runtime(Windows 8.1)またはSQLite for Universal Windows Platformをインストール済みの場合はアンインストールしてから実行してください。
Windows 8.1 ストアアプリを開発する場合
以下のファイルを実行します。
<DVD-ROMドライブ>:\development\cordova\external\sqlite-winrt81-3130000.vsix
<DVD-ROMマウントディレクトリ>/development/cordova/external/sqlite-winrt81-3130000.vsix
Windows 10 UWPアプリを開発する場合
以下のファイルを実行します。
<DVD-ROMドライブ>:\development\cordova\external\sqlite-uwp-3130000.vsix
<DVD-ROMマウントディレクトリ>/development/cordova/external/sqlite-uwp-3130000.vsix
2.2.2 アプリケーションの開発
ハイブリッドアプリケーションは、Cordova CLIを使用して、アプリケーションの作成・ビルド・テスト・パッケージングをします。 コードは任
意のエディタで編集します。 開発の流れは以下のとおりです。
1. Cordovaプロジェクトの作成
2. プラグインの追加
3. プラットフォームの追加
4. コーディング
5. アプリケーションのビルド
2.2.2.1 Cordovaプロジェクトの作成
cordova createコマンドを使用して、新しいCordovaプロジェクトを作成します。
> cordova create hello com.fujitsu.imaps HelloWorld
作成したCordovaプロジェクトのフォルダーに移動します。
> cd hello
2.2.2.2 プラグインの追加
cordova plugin addコマンドを使用して、作成したCordovaプロジェクトに使用するCordovaプラグインを追加します。
また、不要となったCordovaプラグインは、cordova plugin removeコマンドで削除します。
- 9 -
> cordova plugin add imaps-plugin-core
2.2.2.3 プラットフォームの追加
cordova platform addコマンドを使用して、作成したCordovaプロジェクトに使用するプラットフォームを追加します。
また、不要となったプラットフォームは、cordova platform removeコマンドで削除します。
> cordova platform add android ios
2.2.2.4 コーディング
HTML/JavaScript/CSSでアプリケーションを作成します。
任意のエディタを使用して作成します。
作成したプラットフォーム共通の資産は、wwwの下に保管します。 プラットフォーム固有の資産は、mergesの下に保管します。
2.2.2.5 アプリケーションのビルド
cordova buildコマンドで、追加したプラットフォーム用のアプリケーションをビルドします。
> cordova build
また、特定のプラットフォームのみをビルドすることもできます。
> cordova build ios
2.2.3 動作確認(デバッグ)作成したハイブリッドアプリケーションは、実機または、エミュレーターを使用して動作確認します。
cordova runまたは、cordova emulateコマンドで実行します。
HTML/JavaScriptは、ChromeやsafariのWebインスペクタを使用してデバッグできます。
2.2.4 パッケージング
アプリケーションをスマートデバイスにインストールできる形式にパッケージ化します。cordova compile/build/runでパッケージングを実
施します。
Androidの場合、署名なしのアプリケーションでもデバッグ環境では動作します。しかし、実際の端末で動作させる場合には署名が必
要です。
iOSの場合、パッケージングするために証明書のインストールおよびプロビジョニングファイルが必要です。
Windowsの場合、アプリケーションに署名が必要です。
詳細は各プラットフォームのドキュメントを参照してください。
Android
Android Developers
iOS
Apple Developers
Windows
Windows デベロッパー センター
2.2.4.1 Androidのパッケージング
cordova compile/build/runで以下を指定し、パッケージを作成します。
・ Gradleの設定
・ 署名の設定
- 10 -
2.2.4.1.1 Gradleの設定
--gradleArgオプションにGradleのビルドプロパティを指定します。
--gradleArgオプションのプロパティは環境変数でも設定可能です。
以下の様に、「ORG_GRADLE_PROJECT_」というプレフィックスの付いた環境変数で定義できます。
例:
export ORG_GRADLE_PROJECT_cdvMinSdkVersion=20
ビルドプロパティ
プロパティ 説明
cdvBuildMultipleApks 指定した場合、ネイティブライブラリが対応するCPUアーキテクチャごと(x86, ARMな
ど)にAPKファイルを作成します。 省略すると、すべてのネイティブライブラリを含んだ
APKファイルを作成します。
cdvVersionCode AndroidManifest.xmlに指定したバージョン番号を上書きします。
cdvReleaseSigningPropertiesFile リリースビルド用の署名オプションが記載されたファイルを指定します。 省略した場合
は、build.gradleがあるディレクトリにrelease-signing.propertiesというファイルが存在すれ
ば、その値を読み込みます。
cdvDebugSigningPropertiesFile デバッグビルド用の署名オプションが記載されたファイルを指定します。 省略した場合
は、build.gradleがあるディレクトリにdebug-signing.propertiesというファイルが存在すれ
ば、その値を読み込みます。
cdvMinSdkVersion AndroidManifest.xmlに指定したminSdkVersionを上書きします。
cdvBuildToolsVersion android.buildToolsVersionの設定を上書きします。
cdvCompileSdkVersion android.compileSdkVersionの設定を上書きします。
実行例
cordova run android -- --gradleArg=-cdvMinSdkVersion=20
2.2.4.1.2 署名の設定
アプリケーションの署名の設定をします。
署名の指定方法は、3種類あります。
・ cordovaコマンドのplatformOpts
・ build.json
・ Gradle
cordovaコマンドのplatformOpts
クライアントアプリケーションで必要な値を以下のオプションで指定します。
オプション 説明
--keystore キーストアファイルへのパス
--storePassword キーストアのパスワード。
--alias プライベートキーのID
--password プライベートキーのパスワード
--keystoreType キーストアのタイプ。省略した場合は、自動判定する
リリース用にビルドする時には、storePassword、passwordを省略できます。省略した場合は、パスワードを入力するプロンプトを表示し
ます。
実行例
- 11 -
cordova run android --release -- --keystore=../my-key.keystore --storePassword=pass00 --alias=myAlias --password=keypass00
build.json
build.jsonをCodrovaプロジェクトのルートディレクトリに配置します。
--buildConfigオプションでファイルを指定することもできます。
以下のフォーマットで指定します。
{
"android":{
"debug":{
"keystore":"keystore",
"storePassword":"store password",
"alias":"alias",
"password":"private key passsword",
"keystoreType":"keystore type"
},
"release":{
"keystore":"keystore",
"storePassword":"store password",
"alias":"alias",
"password":"private key passsword",
"keystoreType":"keystore type"
}
}
}
キー名 値
android Android用の定義です
debug デバッグ用の定義です
release リリース用の定義です
keystore キーストアファイルのパス
storePassword キーストアのパスワード
alias プライベートキーのID
password プライベートキーのパスワード
keystoreType キーストアのタイプ
リリース用にビルドする時には、storePassword、passwordを省略できます。省略した場合は、パスワードを入力するプロンプトを表示し
ます。
Gradle
以下の場所に、release-signing.properties(リリース用)、debug-signing.properties(デバッグ用)を配置します。
<Cordovaプロジェクト>/platforms/anrdoid
<Cordovaプロジェクト>\platforms\anrdoid
--gradleArgオプションのcdvReleaseSigningPropertiesFile(リリース用)、cdvDebugSigningPropertiesFile(デバッグ用)でファイルを指定す
ることもできます。
以下のフォーマットで指定します。
storeFile=keystore
storePassword=store password
storeType=pkcs12
- 12 -
keyAlias=alias
keyPassword=private key passsword
キー名 値
storeFile キーストアファイルのパス
storePassword キーストアのパスワード
storeType キーストアのタイプ
keyAlias プライベートキーのID
keyPassword プライベートキーのパスワード
リリース用にビルドする時には、storePassword、passwordを省略できます。省略した場合は、パスワードを入力するプロンプトを表示し
ます。
2.2.4.2 iOSのパッケージング
cordova compile/build/runで以下を指定し、パッケージを作成します。
・ 署名の設定
2.2.4.2.1 署名の設定
アプリケーションの署名の設定をします。
署名の指定方法は、2種類あります。
・ cordovaコマンドのplatformOpts
・ build.json
cordovaコマンドのplatformOpts
クライアントアプリケーションで必要な値を以下のオプションで指定します。
パラメーター
オプション 説明
--codeSignIdentity コード署名ID
--provisioningProfile プロビジョニングプロファイルのGUID
実行例
cordova run ios --release -- --codeSignIdentity=Fujitsu --provisioningProfile=MyApp.mobileprovision
参考
コード署名IDは事前にXcodeで生成し、キーチェーンに追加する必要があります。
プロビジョニングプロファイルのGUIDは、開発マシンの(~/Library/MobileDevice/Provisioning Profiles/)にあります。
build.json
build.jsonをCodrovaプロジェクトのルートディレクトリに配置します。
--buildConfigオプションでファイルを指定することもできます。
以下のフォーマットで指定します。
{
"ios":{
"debug":{
"codeSignIdentity":"Code signing identity",
- 13 -
"provisioningProfile":"provisioning profile"
},
"release":{
"codeSignIdentity":"Code signing identity",
"provisioningProfile":"provisioning profile"
}
}
}
キー名 値
ios iOS用の定義です
debug デバッグ用の定義です
release リリース用の定義です
codeSignIdentity コード署名ID
provisioningProfile プロビジョニングプロファイルのGUID
参考
コード署名IDは事前にXcodeで生成し、キーチェーンに追加する必要があります。
プロビジョニングプロファイルのGUIDは、開発マシンの(~/Library/MobileDevice/Provisioning Profiles/)にあります。
2.2.4.3 Windowsのパッケージング
cordova compile/build/runで以下を指定し、パッケージを作成します。
・ ビルドオプション
・ プロセッサアーキテクチャ
・ 署名の設定
2.2.4.3.1 ビルドオプション
--appxオプションに作成するアプリケーションのターゲットとなるOSを指定します。
以下の値が指定できます。省略した場合は、Windows 8.1 ストアアプリ用にビルドします。
8.1-win
Windows 8.1 ストアアプリ
uap
Windows 10 UWPアプリ
実行例
cordova run windows -- --appx=uap
2.2.4.3.2 プロセッサアーキテクチャ
--archsオプションにビルドターゲットとなるプロセッサアーキテクチャを指定します。
以下の値を指定します。
・ anycpu
・ x86
・ x64
・ arm
複数のプラットフォームを指定する場合は、半角スペースで区切って指定します。
- 14 -
省略した場合、すべてのプロセッサ用(anycpu)にビルドしますが、anycpuをサポートしていないCordovaプラグインがあります。
Cordovaプラグインのサポート状況は、以下のとおりです。
No. プラグイン anycpuのサポート
8.1 10
1 Camera ○ ○
2 Console ○ ○
3 Contacts ○ ○
4 Device ○ ○
5 Device Motion ○ ○
6 Device Orientation ○ ○
7 Notification ○ ○
8 File ○ ○
9 File Transfer ○ ○
10 Geolocation ○ ○
11 Globalization ○ ○
12 InAppBrowser ○ ○
13 Media ○ ○
14 Capture ○ ○
15 Network Information ○ ○
16 Splashscreen ○ ○
17 StatusBar ○ ○
18 Test Framework ○ ○
19 IMAPS Core × ×
20 IMAPS Application Available Time Control × ×
21 IMAPS Cloud Push × ×
22 Keyboard ○ ○
23 Beacon × ○
24 BarcodeScanner ○ ×
25 Screen Orientation ○ ×
2.2.4.3.3 署名の設定
アプリケーションの署名の設定をします。
署名の指定方法は、2種類あります。
・ cordovaコマンドのplatformOpts
・ build.json
cordovaコマンドのplatformOpts
クライアントアプリケーションで必要な値を以下のオプションで指定します。
オプション 説明
--packageCertificateKeyFile パッケージ署名証明書のパス
--packageThumbprint パッケージ署名証明書鍵ファイルを検証するための値
- 15 -
オプション 説明
--publisherId パッケージ署名署名書の発行者情報
実行例
cordova run windows --release -- --packageCertificateKeyFile="platforms\windows\CordovaApp_TemporaryKey.pfx" --
packageThumbprint="ABCABCABCABC123123123123"
参考
パッケージ署名証明書鍵ファイルは、証明書鍵作成時に作成されたものを使用します
build.json
build.jsonをCodrovaプロジェクトのルートディレクトリに配置します。
--buildConfigオプションでファイルを指定することもできます。
以下のフォーマットで指定します。
{
"windows":{
"debug":{
"packageCertificateKeyFile":"certificate file"
},
"release":{
"packageCertificateKeyFile":"certificate file",
"packageThumbprint":"package thumbprint",
"publisherId":"publisher id"
}
}
}
キー名 値
windows Windows用の定義です
debug デバッグ用の定義です
release リリース用の定義です
packageCertificateKeyFile パッケージ署名証明書のパス
packageThumbprint パッケージ署名証明書鍵ファイルを検証するための値
publisherId パッケージ署名署名書の発行者情報
参考
パッケージ署名証明書鍵ファイルは、証明書鍵作成時に作成されたものを使用します
2.2.4.4 パッケージング
IMAPSサーバでアプリケーションを配布する場合
IMAPSサーバでアプリケーションを配布する場合は、パッケージ化したファイルを含めた以下のようなzip形式のアーカイブファイルを
作成します。
- 16 -
それぞれのファイルについて説明します。以下のファイルをzipファイルのルートフォルダーに含めます。
・ アプリケーション本体
パッケージ化したアプリケーション本体です。拡張子はAndroidの場合はapk、iOSの場合はipa、Windowsの場合はappxです。
アプリケーションのバージョンと識別IDは255文字以降は無視されます。
バージョンはアプリケーションのバージョンです。
パッケージは、アプリケーションを特定するための値です。アプリケーションのプラットフォームごとに以下の値を参照します。
Androidアプリケーションの場合
AndroidManifext.xmlのpackage属性の値です。
iOSアプリケーションの場合
Info.plistのCFBundleIdentifierの値です。
Windowsアプリの場合
Package.appxmanifestのIdentity要素のName属性の値です。
・ 説明ファイル
アプリ詳細画面でアプリケーションの説明欄に表示する文章を定義するファイルです。ファイルはUTF-8で記載します。
日本語の説明はdescription_ja.txt、英語の説明はdescription.txtに記載します。
説明文は、0文字以上4000文字以下の範囲で記載できます。
省略時は空文字になります。
・ アイコン
IMAPSサーバによる配布画面上で利用されるアイコンです。アイコンの推奨サイズは96x96ピクセル以上で縦横の幅が同じ画像で
す。ファイルはpng形式でファイル名はicon.pngです。
省略時はデフォルトのアイコンになります。
・ そのほか
アプリケーションをインストールするための依存ファイルなどです。Windowsアプリの場合は、依存関係にあるファイルもアプリケー
ション本体との位置関係を維持したままzipファイルに含めます。
- 17 -
注意
IMAPSサーバによる配布をするには、プラットフォームごとに以下の条件があります。丸括弧内は、主に対応が必要となる人物です。
ここで説明されている内容は、各ベンダーによって変更される可能性があります。 新の情報は、それぞれの公開情報を参照してくだ
さい。
Android
(アプリケーション利用者) 配布されたアプリケーションをインストールするには、スマートデバイスの[提供元不明のアプリのインスト
ール]を許可する設定にします。
(システム管理者) IMAPSサーバを自己発行証明書を使用してSSLで運用している場合、ブラウザ(IMAPSサーバによる配布画面
など)でアプリケーションをダウンロードできないことがあります。その場合はHTTPで運用するか、または、認証局が発行した正式な
証明書を利用してください。
(システム管理者) Androidの標準ブラウザを使用しており、ネットワーク接続にプロキシを使用している場合、アプリケーションを正
常にダウンロードできないことがあります。その場合は、プロキシを不使用でIMAPSサーバに接続するように端末のネットワーク設
定を変更してください。
(システム管理者) Android版Chromeブラウザでアプリケーションをダウンロードする場合、セキュリティ上の理由で確認メッセージ
が表示されます。ファイル名を確認し、問題なければ[OK]ボタンをタップすれば、アプリケーションをダウンロードできます。
iOS
(アプリケーション開発者) Apple社とのiOS Developer Enterprise Program契約が必要です。アプリケーション作成時に、この契約
によって入手できる適切なプロビジョニングプロファイルを使用してください。
(システム管理者) iOS7.1から、SSL(HTTPS)が前提となります。IMAPSサーバをSSLで運用してください。
Windows
(システム管理者) Microsoft社とのサイドローディング契約が必要です。
(アプリケーション開発者) アプリケーションを信頼できるルート証明書にチェーンされた証明書を使って署名する。
(アプリケーション利用者) インストール先のスマートデバイスをActive Directoryドメインに追加するか、インストール時に開発者ライ
センス認証を行う。
(アプリケーション利用者) インストール先のスマートデバイスのグループポリシー[信頼できるすべてのアプリのインストールを許可
する]を有効にする。
アプリケーション利用者の操作は、アプリケーション作成時に生成されるAdd-AppDevPackage.ps1ファイルを利用することでも実行
できます。
以下のように実行します。
・ (システム管理者) あらかじめこのファイルと、そのほかのアプリケーションのインストールに必要なファイルをzip形式のアーカイ
ブに含めてIMAPSサーバに登録します。
・ (アプリケーション利用者) zipファイルをダウンロード・展開し、Add-AppDevPackage.ps1ファイルを右クリックして、[PowerShellで実行]を選択します。
・ (アプリケーション利用者) 画面に表示される質問に答えることでインストールできます。
※正式なインストール手順はマイクロソフト社のドキュメントを参照してください。
http://technet.microsoft.com/ja-jp/windows/jj874388.aspx
2.2.5 配布
開発したアプリケーションを配布する方法は、"運用ガイド"の"IMAPSクライアントアプリケーションの配布"を参照してください。
2.3 Cordovaプラグイン
本製品が提供するCordovaプラグインの一覧です。
各CordovaプラグインのIDとバージョンは、cordova plugin searchコマンドで確認できます。
- 18 -
No. 名前 サポートOS
Android iOS Windows
1 Battery ○ ○ ×
2 Camera ○ ○ ○
3 Compat ○ ○ ○
4 Console × ○ ○
5 Contacts ○ ○ ○
6 Crosswalk WebView Engine ○ × ×
7 Device ○ ○ ○
8 Device Motion ○ ○ ○
9 Device Orientation ○ ○ ○
10 Notification ○ ○ ○
11 File ○ ○ ○
12 File Transfer ○ ○ ○
13 Geolocation ○ ○ ○
14 Globalization ○ ○ ○
15 InAppBrowser ○ ○ ○
16 Media ○ ○ ○
17 Capture ○ ○ ○
18 Network Information ○ ○ ○
19 Screen Orientation ○ ○ △(Windows 8.1のみ)
20 Splashscreen ○ ○ ○
21 StatusBar ○ ○ ○
22 Test Framework ○ ○ ○
23 Vibration ○ ○ ×
24 Whitelist ○ × ×
25 Cordova WKWebView Engine × ○ ×
26 IMAPS Application Available Time Control ○ ○ ○
27 Beacon ○ ○ △(Windows 10のみ)
28 IMAPS Core ○ ○ ○
29 IMAPS Push ○ × ×
30 IMAPS Cloud Push ○ ○ ○
31 IMAPS Push Properties ○ ○ ○
32 IMAPS Zip File ○ ○ ×
33 Keyboard ○ ○ ○
34 BarcodeScanner ○ ○ ○
2.3.1 BatteryBatteryプラグインとは、スマートデバイスのバッテリーの状態を確認することができるプラグインです。
- 19 -
アプリケーションは、以下の3つのイベントを受け取ることができます。
batterystatus
バッテリーの残量が変更になった場合、または、電源に接続/切断した場合に通知します。
batterycritical
バッテリーの残量が閾値よりも少なくなった場合に通知します。閾値はスマートデバイスに依存します。
batterylow
バッテリーの残量が充電が必要な閾値よりも少なくなった場合に通知します。閾値はスマートデバイスに依存します。
詳細は、Apache Cordova Documentationを参照してください。
2.3.2 CameraCameraプラグインとは、スマートデバイスのカメラを使用して写真の撮影やイメージを選択することができるプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.3 CompatCompatプラグインは、下位バージョンのCordovaとの互換性を必要とするプラグインを使用する場合に必要なプラグインです。
本プラグインは、単体で使用しません。本製品が提供するプラグインでは、BarcodeScannerプラグインを追加すると自動的に追加され
ます。
2.3.4 ConsoleConsoleプラグインとは、ログ出力関数を追加するプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.5 ContactsContactsプラグインとは、スマートデバイスの連絡先にアクセスするためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.6 Crosswalk WebView EngineCrosswalk WebView Engineプラグインとは、HTML5のレンダリング/JavaScriptの実行をOSが提供するWebViewの代わりに実行する
プラグインです。
スマートデバイス間の動作差異がないことと、OSが提供するWebViewよりもパフォーマンスが良いといった特徴があります。
詳細は、https://github.com/crosswalk-project/cordova-plugin-crosswalk-webviewを参照してください。
2.3.7 DeviceDeviceプラグインとは、スマートデバイスの各種情報を取得するためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.8 Device MotionDevice Motionプラグインとは、スマートデバイスの加速度センサーを使用するためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.9 Device OrientationDevice Orientationプラグインとは、スマートデバイスの地磁気センサーにアクセスするためのプラグインです。
- 20 -
詳細は、Apache Cordova Documentationを参照してください。
2.3.10 NotificationDialogsプラグインとは、スマートデバイスのネイティブダイアログにアクセスするためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.11 FileFileプラグインとは、スマートデバイスのファイルを読み書きするためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.12 File TransferFile Transferプラグインとは、ファイルをアップロード/ダウンロードするためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.13 GeolocationGeolocationプラグインとは、スマートデバイスの位置情報を取得するためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.14 GlobalizationGlobalizationプラグインとは、スマートデバイスの利用者が設定したロケールや言語、タイムゾーンに固有の処理をするためのプラグイ
ンです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.15 InappbrowserInappbrowserプラグインとは、ブラウザの画面を開くためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.16 MediaMediaプラグインとは、スマートデバイスのオーディオファイルを録音/再生するためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.17 CaptureMedia Captureプラグインとは、スマートデバイスのオーディオ/イメージ/ビデオ機能にアクセスするためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.18 Network InformationNetwork Informationプラグインとは、ネットワークの状態を取得するためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.19 Screen OrientationScreen Orientationプラグインとは、スマートデバイスの画面の向きを固定するためのプラグインです。
本プラグインの使用方法は、https://github.com/apache/cordova-plugin-screen-orientationを参照してください。
- 21 -
2.3.20 SplashscreenSplashscreenプラグインとは、アプリケーションの起動中に表示するスプラッシュスクリーンを制御するためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.21 StatusbarStatusbarプラグインとは、ステータスバーをカスタマイズするためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.22 Test FrameworkTest Frameworkプラグインとは、Cordovaプラグインをテストするためのフレームワークを提供するためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.23 VibrationVibrationプラグインとは、スマートデバイスを振動させるためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.24 WhitelistWhitelistプラグインとは、ホワイトリストによるアクセス制御をするためのプラグインです。
詳細は、Apache Cordova Documentationを参照してください。
2.3.25 Cordova WKWebView EngineCordova WKWebView Engineとは、iOSでUIWebViewのかわりに、WKWebViewを使用するためのプラグインです。
本プラグインは、iOS 9.0 SDK以降で利用できます。
詳細は、https://github.com/apache/cordova-plugin-wkwebview-engineを参照してください。
2.3.26 IMAPS Application Available Time ControlIMAPS Application Available Time Controlプラグインとは、利用可能な時間を制御するためのプラグインです。
利用時間の制御を開始するにはimaps.appmanager.initWithDefUrlメソッドを使用します。 利用時間外であることはコールバック関数で
通知されます。
注意
Windowsアプリの場合、cordova compile/build/runを--archsオプションを指定して実行してください。 詳細は、2.2.4.3.2 プロセッサアーキテクチャを参照してください。
使用例
以下の場合に、それぞれ別の処理をする使用例を示しています。
・ 利用時間の制御の開始処理で利用時間外であった場合
・ 利用時間の制御の開始処理後に利用時間外となった場合
・ 利用時間の制御の開始処理で利用不可能な日であった場合
・ 利用時間の制御の開始処理後に利用不可能な日となった場合
- 22 -
function checkTime() {
imaps.appmanager.initWithDefUrl(resultHandler, errorHandler, execAtInValidTime);
}
function execAtInValidTime(result) {
var startTime = result.startTime;
var endTime = result.endTime;
var isStarted = result.isStarted;
var status = result.status;
if(isStarted == true) {
if(status == 1) {
// 開始処理後に利用時間外となった場合の処理
} else {
// 開始処理後に利用不可能な日となった場合の処理
}
} else {
if(status == 1) {
// 開始処理で利用時間外であった場合の処理
} else {
// 開始処理で利用不可能な日であった場合の処理
}
}
}
function resultHandler(result){
// 開始処理が成功した場合の処理
}
function errorHandler(error) {
// 開始処理で例外が発生した場合の処理
}
利用時間の情報を取得します。利用時間の制御の開始処理後に使用します。
function getStartTime() {
imaps.appmanager.getStartTime(resultHandler, errorHandler); // 利用時間の開始時間を取得する場合
}
function resultHandler(result){
alert("result: \r\n"+result );
}
function errorHandler(error) {
alert("Error: \r\n"+error );
}
利用時間の制御を終了します。利用時間制御の開始処理後に利用時間外になる前に、終了する場合に使用します。
function destroy() {
imaps.appmanager.destroy(resultHandler, errorHandler);
}
function resultHandler(result){
alert("result: \r\n"+result );
}
function errorHandler(error) {
alert("Error: \r\n"+error );
}
- 23 -
注意
・ クライアント設定ファイルのappmgr.strictPolicyModeの値がfalseの場合は、端末がオフラインでポリシー設定ファイルが更新されな
い場合や、 クライアントの時計が間違っている場合は、設定した時間外にアプリケーションが利用可能になる場合があります。詳細
は、付録C クライアント設定ファイルを参照してください。
2.3.27 BeaconBeaconプラグインとは、Beacon発信機からの信号を受信して、その場所にあったコンテンツの表示やお知らせメッセージの表示などを
制御するためのプラグインです。 Beaconプラグインが提供する機能は以下のとおりです。
・ Beacon受信機能
・ お知らせメッセージ表示機能
詳細は、APIリファレンスを参照してください。
2.3.27.1 Beacon受信機能
Beacon発信機からの信号を受信し、受信したイベントをコールバックAPIで受け取ります。
受信するイベントは、以下のとおりです。
イベント名 説明
IMLocationManager.DIDRANGEBEACONS Beacon受信中
IMLocationManager.ENTERREGION Beacon領域に入った
IMLocationManager.STARTMONITORINGREGION Beaconモニタリングスタート
IMLocationManager.EXITREGION Beacon領域から出た
IMLocationManager.MONITORINGDIDFAILFORREGION エラーが発生した
イベントはIMLocationManager.onで設定したコールバック関数で受け取ります。
コールバック関数の引数には、受信したイベントの情報がJSONで渡されます。 イベントの情報のフォーマットは以下のとおりです。
コールバック関数の引数の内容
キー名 値
event イベント名
検出したBeaconの番号(0からの連番) 検出したBeaconの情報。イベントがIMLocationManager.DIDRANGEBEACONSの時
に設定する。
検出したBeaconの情報
キー名 値
uuid 検出したBeaconのUUID
major 検出したBeaconのMajorID
minor 検出したBeaconのMinorID
proximity 近接レベル。1(近い)-3(遠い)
accuracy 検出したBeaconまでの距離(m)
rssi 精度
2.3.27.2 お知らせメッセージ表示機能
Beacon領域に入った時と出たときにスマートデバイスの通知領域にメッセージを出力することができます。
出力するメッセージは、APIを初期化する際に指定します。
- 24 -
2.3.27.3 Beaconサンプル
以下にBeaconプラグインを使用する場合の実施例を示します。
使用例
document.addEventListener('deviceready', function(){
IMLocationManager.init("00000000-4e34-1001-b000-001c4dd35806",
"fuji.com",
"ようこそ○○",
"さよならXX",
function(success){alert(success)},
function(error){alert(success)}
);
});
IMLocationManager.on(function(list){
var view = document.getElementById("view");
view.innerHTML = "[event] " + list.event + "<br>";
if(list.event == IMLocationManager.DIDRANGEBEACONS){
view.innerHTML += "[length] " + list.infos.length + "<br>";
for(var i=0; i < list.infos.length ;i++){
view.innerHTML +="[uuid]"+ list.infos[i].uuid + "<br>";
view.innerHTML +="[major]" + list.infos[i].major + "<br>";
view.innerHTML +="[minor]" + list.infos[i].minor + "<br>";
view.innerHTML +="[proximity]"+ list.infos[i].proximity + "<br>";
view.innerHTML +="[accuracy]"+ list.infos[i].accuracy + "<br>";
view.innerHTML +="[rssi]" + list.infos[i].rssi + "<br>";
}
}
});
2.3.28 IMAPS CoreIMAPS Coreプラグインとは、以下の機能を利用するためのプラグインです。
・ 認証
・ SLS
・ ログ収集
注意
Windowsアプリの場合、cordova compile/build/runを--archsオプションを指定して実行してください。 詳細は、2.2.4.3.2 プロセッサアーキテクチャを参照してください。
2.3.28.1 各機能の設定
各機能の設定は、以下のクライアント設定ファイルを編集してください。
保管先
<Cordovaプロジェクトのルート>/plugins/imaps-plugin-core/properties
ファイル
・ Android用:imaps.properties
・ iOS用:imaps.plist
・ Windows用:imaps.xml
- 25 -
2.3.28.2 認証プラグインとは
認証プラグインとは、IMAPSが提供している認証機能を使ったハイブリッドアプリケーションが容易に呼び出しができるように、Cordovaプラグインの形でAPIを提供しているものです。認証プラグインが提供している機能には、以下のようなものがあります。
・ ログイン
・ ログアウト
・ ユーザー情報の登録、取得、削除
・ SLS内のデータの引き継ぎ
・ 管理情報の設定
・ パスワード変更
・ タイムアウト検知
注意
Android6.0以上の場合、API(ログイン、ユーザー情報の登録、取得、削除、SLS内のデータの引き継ぎ、パスワード変更)の実行時に「通話の発信と管理」の許可を要求されますので、許可してください。これはAPIの実行に「android.permission.READ_PHONE_STATE」のパーミッションが必要であることと、Android6.0からアプリケーションのインストール時ではなく、起動した後にパーミッションをチェックするようになったためです。1回許可すれば、以後は要求されません。詳細はAndroidの公式サイトをご覧ください。
2.3.28.2.1 ログイン
アプリケーションは、IMAPSが提供している認証機構を呼び出して、利用しているユーザーの正当性を検証できます。ログインには以
下の種類があります。
オンライン認証
IMAPSサーバが提供している認証機能をネットワーク経由で呼び出し、サーバ側で認証
オフライン認証
クライアント内部で保持しているクレデンシャルを用いて認証
使用例
利用ユーザーの正当性を検証するため、ログインメソッドを呼び出します。オンライン認証を行うためには、imaps.auth.loginOnlineメソ
ッド、オフライン認証を行うためにはimaps.auth.loginOfflineメソッドを呼び出します。
var _userId, _passwd;
function login(loginUrl, userId, passwd) {
_userId = userId;
_passwd = passwd;
var networkState = navigator.connection.type;
if (networkState == Connection.UNKNOWN || networkState == Connection.NONE){
imaps.auth.loginOffline(resultHandler, errorHandler, _userId, _passwd);
}
else{
imaps.auth.loginOnline(
resultHandler,
function(result){
if (result == "IMAPSAuthConnectError")
imaps.auth.loginOffline(resultHandler, errorHandler, _userId, _passwd);
else
console.log("Login failure:" + result);
},
loginUrl,
_userId,
_passwd);
}
}
- 26 -
function resultHandler(result) {
console.log("Login success:" + result );
}
function errorHandler(error) {
console.log("Login failure:" + error );
}
オフライン認証とは、クライアントが保持しているクレデンシャルを用いて利用ユーザーの正当性を検証する認証です。IMAPSサーバ
の認証機構を利用しないため、ネットワークが利用できない状態でも認証を行うことができます。オフライン認証を行うためには、オンラ
イン認証で一度、認証を完了しておく必要があります。
ネットワーク状態を気にせずにログインを実行したい場合には、imaps.auth.loginAutoメソッドを呼びます。loginAutoメソッドは、 適な
ログイン方法をネットワーク状態に応じて選択します。
ポイント
・ オンライン認証では、接続先のサーバをクライアント設定ファイルのimapsServerAddressで設定することも可能です。詳細は、開発
者用マニュアル、付録C クライアント設定ファイルを参照してください。
・ 認証プラグインでログインすることで、認証情報を付与することができます。
注意
・ Androidの場合、ログアウトを呼び出さずにアプリケーションを終了すると、再度アプリケーションを起動した時、ユーザー情報や認
証情報が残ったままになっている場合があります。アプリケーションの終了時、または起動時にログアウトを呼び出し、ユーザー情
報を初期化してください。
2.3.28.2.2 ログアウト
アプリケーションは、ログアウトを呼び出す事でユーザー情報を初期化できます。ログアウトメソッドは内部的にはIMAPSサーバの認証
機構を呼び出さないため、ネットワークが利用不可能な状態でも呼び出す事ができます。
使用例
function logout() {
imaps.auth.logout(resultHandler, errorHandler);
}
function resultHandler(result) {
console.log("Logout success: "+result );
}
function errorHandler(error) {
console.log("Logout error: "+error );
}
2.3.28.2.3 ユーザー情報の登録、取得、削除
クライアントアプリケーションがIMAPS以外の既存の業務システムを利用して認証を行っている場合、そのままではオフライン認証や認
証モードでのSLSを利用できません。
このような独自認証を行った場合、ユーザーの情報を登録する事で、これらの機能を利用する事ができます。
使用例
function login(userId, passwd) {
// 独自認証をおこなうメソッドを呼び出します。
user.own.method.login(userId, passwd);
imaps.auth.setLoginUserInfo(resultHandler, errorHandler, userId, passwd, "Fujitsu Tarou", ["Manager", "Developer"]);
}
function resultHandler(result) {
console.log("Success: "+result );
}
function errorHandler(error) {
- 27 -
console.log("Error: "+error );
}
以下のAPIを利用すると、設定したユーザー情報が取得できます。
・ imaps.auth.getUserID
・ imaps.auth.getUserName
・ imaps.auth.getUserRole
使用例
function getUserId(userId) {
imaps.auth.getUserID(resultHandler, errorHandler, userId); // ユーザーIDを取得する場合
}
function resultHandler(result) {
console.log("Get user ID success: "+result );
}
function errorHandler(error) {
console.log("Get user ID Error: "+error );
}
登録したユーザー情報とSLSのデータは、以下のAPIを利用して削除することができます。
・ imaps.auth.deleteUserInfo
使用例
function deleteUser(userId) {
imaps.auth.deleteUserInfo(resultHandler, errorHandler, userId);
}
function resultHandler(result) {
console.log("Delete user success: "+result );
}
function errorHandler(error) {
console.log("Delete user error: "+error );
}
2.3.28.2.4 SLS内のデータの引き継ぎ
IMAPSでは、クライアント内にデータをセキュアに保存するための仕組みとして、SLSを提供しています(SLSについてはSLSを参照)。SLSを認証モードで利用している場合、格納データはパスワードをキーにして保護されています。
そのためパスワードが変更された場合、格納された暗号化データを引き継ぐ(暗号化データを新しいパスワードで再暗号化する)必要
があります。以下のAPIを呼び出した場合に、SLS内のデータ引き継ぎが必要である旨のエラーが返却されます。
・ imaps.auth.loginAuto
・ imaps.auth.loginOnline
・ imaps.auth.setLoginUserInfo
データ引き継ぎが必要な場合、上記メソッドはIMAPSSlsPasswordErrorを返却します。
使用例
function login(loginUrl, userId, passwd) {
imaps.auth.loginAuto(loginResult, loginError, loginUrl, userId, passwd);
}
function loginResult(result) {
console.log("Login success: "+result );
}
function loginError(error) {
if (error == "IMAPSSlsPasswordError") {
// パスワードが異なるため、データの引き継ぎができなかった場合にエラーが発生します。
// データの引き継ぎを行うかをユーザーに問い合わせ、
// データを引き継ぐ場合は、旧パスワードをユーザーに問い合わせます。
- 28 -
// データを削除する場合は、deleteDataを呼び出します。
// 処理をキャンセルする場合は、logoutを呼び出します。
}
}
// データの引き継ぎを行う場合の処理
function transData(oldpasswd) {
imaps.auth.transData(resultHandler, errorHandler, oldpasswd);
}
function resultHandler(result) {
console.log("暗号化データの引き継ぎが完了しました。");
}
function errorHandler(error) {
if (error == "IMAPSSlsPasswordError") {
// 旧パスワードが異なるため、データの引き継ぎができなかった場合に
// エラーが発生します。
// 再度、データの引き継ぎを行うかをユーザーに問い合わせます。
}
}
2.3.28.2.5 管理情報による認証
管理情報とは、IMAPSサーバがクライアントからアクセスされた場合に、APIからのアクセスである事を確認するための情報の事です。
管理情報は、システム管理者によってIMAPSサーバに設定され、ユーザーの認証情報とは別に管理されます。
IMAPSサーバにアクセスするアプリケーションは、必ずアプリケーション内で管理情報を設定します。具体的にどのような管理情報を
設定するかは、システム管理者に問い合わせてください。管理情報は、1つのアプリケーション内で一度設定します。IMAPSサーバに
アクセスするAPIを呼び出すたびに実行する必要はありません。IMAPSサーバにアクセスするAPIを呼び出す際は、認証情報を付与
してアクセスします。
使用例
// 管理情報の設定
function setManageInfo(mgrId, passwd) {
imaps.auth.setManageInfo(resultHandler, errorHandler, mgrId, passwd);
}
function resultHandler(result) {
console.log("set manage infomation success: "+result );
}
function errorHandler(error) {
console.log("Error: "+error );
}
// IMAPSサーバにアクセス
function getContent(url) {
var xmlHttp;
xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET",url, false);
imaps.auth.setRequestHeader(resultHandler2, errorHandler, xmlHttp);
}
function resultHandler2(result) {
xmlHttp.send(null);
if(imaps.auth.checkResponseHeader(xmlHttp)) {
console.log("SERVER TIME OUT");
} else{
console.log(xmlHttp.responseText);
}
}
- 29 -
注意
異なるプロセスから管理情報を設定した場合は、IMAPSサーバにアクセスできません。
2.3.28.2.6 パスワード変更
パスワードの変更ができます。SLSを使ったデータが存在する場合には、新しいパスワードで引き継がれます。
使用例
function changePasswd() {
url = "http://xxxx ";
oldPasswd = "tarou00";
newPasswd = "tarou0000";
imaps.auth.changePasswd(resultHandler, errorHandler, url, oldPasswd, newPasswd);
}
function resultHandler(result) {
console.log("changed password success: "+result );
}
function errorHandler(error) {
// エラーの通知内容に応じて、エラー処理を実装します。
}
ポイント
クライアント設定ファイルのimapsServerAddressで接続先のサーバを設定できます。詳細は、開発者用マニュアル、付録C クライアント設定ファイルを参照してください。
2.3.28.2.7 タイムアウト検知
クライアントアプリケーションが一定時間IMAPSサーバにアクセスしない場合、IMAPSサーバでタイムアウトを発生させる事ができます。
クライアントアプリケーションはそのアプリケーションの性質によって、必要な処理を実装できます。タイムアウトは、以下の機能が提供
されています。
・ タイムアウト監視開始 (imaps.auth.chkTimeoutStart)
・ タイムアウト検知 (imaps.auth.isTimeout)
実装例
function onDeviceReady() {
document.addEventListener("pause", onPause, false);
document.addEventListener("resume", onResume, false);
}
function onPause() {
// 呼び元で以下のタイミングを検知し、タイムアウト開始時間を更新します。
// ・画面オフ
// ・画面がバックグラウンド
imaps.auth.chkTimeoutStart(resultTimeout, errorTimeout);
}
function onResume() {
imaps.auth.isTimeout(resultTimeout, failTimeout);
}
2.3.28.3 Secure Local Storage(SLS)プラグインとは
Secure Local Storage(SLS)プラグインとは、キーバリューペアのデータを暗号化してストレージに格納、復号化して取得できるAPIを提
供するCordovaプラグインです。
ハイブリッドアプリケーションからSLSを利用する場合、認証モードと認証レスモードがあります。
- 30 -
認証モードで利用する場合、SLS のAPIを利用する前に、認証プラグインを利用して認証します。認証モードおよび認証レスモードで
SLSのAPIに違いはありません。認証モードではユーザー毎に異なる暗号化キーを利用してデータを暗号化するため、よりセキュリティ
強度を高められます。
SLSのプラグインが提供している機能には、以下があります。
・ データの格納、取得、削除
・ データの全削除
・ 格納されているデータ数取得
・ キーの取得
注意
Android6.0以上の場合、APIの実行時に「通話の発信と管理」の許可を要求されますので、許可してください。これはAPIの実行に「android.permission.READ_PHONE_STATE」のパーミッションが必要であることと、Android6.0からアプリケーションのインストール時ではなく、起動した後にパーミッションをチェックするようになったためです。1回許可すれば、以後は要求されません。詳細はAndroidの公式サイトをご覧ください。
2.3.28.3.1 データの格納および取得
SLSにデータを格納、および取得できます。格納されたデータはキーおよび値ともに暗号化されて格納され、取得時にはデータは復
号化されます。格納されるデータサイズは2GBを上限に、カスタマイズできます。詳細は、C.5.10 sls.maxDatabaseSizeを参照してくださ
い。
実施例
var _key;
function setItem(value) {
_key = "test";
imaps.sls.setItem(resultHandler, errorHandler, _key, value);
}
function getItem() {
imaps.sls.getItem(resultHandler, errorHandler, _key);
}
function resultHandler(result) {
if (result == null)
console.log("not found");
else
console.log("result: "+result );
}
function errorHandler(error) {
console.log("Error: "+error );
if (error == "IMAPSSlsError") {
// エラー処理
}
// 通知されたエラーコードの内容に応じて、エラー処理を実装します。
}
キー、値ともに空白を利用できます。格納時に同じキーに関連付いた値が既に存在する場合、値は上書きされます。データの取得を
指定した場合、成功時のコールバック関数に取得した値が渡されます。また、指定したキーに対応する値が存在しない場合、成功時
のコールバック関数に値がnullとして呼び出されます。
写真などのバイナリデータを格納する場合、データを変換してテキスト化する必要があります。
実施例
var _key;
function saveData(){
_key = "ImageTest";
var data = document.getElementById(Image_png).src;
setItem(_key, JSON.stringify(data));
}
- 31 -
function setItem(_key, value) {
imaps.sls.setItem(resultHandler, errorHandler, _key, value);
}
function getItem(_key) {
imaps.sls.getItem(
function(value) {
if(value != ""){
var img = new Image(500, 500);
img.src = value;
document.getElementById(Image_png).src = value;
}
},
errorHandler,
_key
);
}
2.3.28.3.2 データの削除、データ数およびキーの取得
SLSのプラグインでは、格納されたデータの削除やキーを取得できます。
使用例
function length() {
imaps.sls.length(resultHandler, errorHandler);
}
function removeItem(key) {
imaps.sls.removeItem(resultHandler, errorHandler, key);
}
function key(index) {
imaps.sls.key(resultHandler, errorHandler, index);
}
function resultHandler(result) {
console.log("Success: "+result );
}
function errorHandler(error) {
console.log("Error: "+error );
if (error == "IMAPSSlsError") {
// エラー処理
}
// 通知されたエラーコードの内容に応じて、エラー処理を実装します。
}
2.3.28.3.3 サンプル
ボタンを押下するとAPIの実行結果をアラート表示するHTMLコンテンツサンプルを以下に示します。
<html>
<head>
<script type="text/javascript" src="imaps.js "></script>
<script type="text/javascript">
// length()
function length() {
imaps.sls.length(resultHandler, errorHandler);
}
// key(index)
function key(index) {
imaps.sls.key(resultHandler, errorHandler, index);
}
// setItem(key, value)
function setItem(key, value) {
imaps.sls.setItem(resultHandler, errorHandler, key, value);
- 32 -
}
// getItem(key)
function getItem(key) {
imaps.sls.getItem(resultHandler, errorHandler, key);
}
// removeItem(key)
function removeItem(key) {
imaps.sls.removeItem(resultHandler, errorHandler, key);
}
// clearItem()
function clearItem() {
imaps.sls.clear(resultHandler, errorHandler);
}
//正常時のCallBack
function resultHandler(result) {
// length(), key(index), getItem(key)含め、結果はresultに設定される.
console.log("SUCCESS: "+result);
}
//異常時のCallBack.
function errorHandler(error) {
console.log("ERROR: "+error);
}
</script>
</head>
<body>
<button onclick="length();">Click to length</button><br>
<button onclick="key(0);">Click to key</button><br>
<button onclick="setItem('key', 'value');">Click to setItem</button><br>
<button onclick="getItem('key');">Click to getItem</button><br>
<button onclick="removeItem('key');">Click to removeItem</button><br>
<button onclick="clearItem();">Click to clear</button><br>
</body>
</html>
2.3.28.4 ログ収集プラグインとは
モバイルアプリケーションの開発・運用で一番困ることは、クライアント側で問題が発生した場合の調査が難しい事があげられます。ロ
グ収集プラグインは、クライアント側にログを蓄積しておき、IMAPSサーバに送信する機能を持つCordovaプラグインです。ログ収集プ
ラグインが提供している機能には、以下のようなものがあります。
・ ログ出力とサーバへの送信
・ ログ設定の変更
2.3.28.4.1 ログ出力とサーバへの送信
以下にログ出力と送信を行う実施例を示します。
実施例
<html>
<head>
<script type="text/javascript" src="imaps.js "></script>
<script type="text/javascript">
var success = function(result) {console.log("SUCCESS: "+result);};
var fail = function(error) {console.log("ERROR: "+error);};
function logDebug(msg) {
imaps.log.d(success, fail, msg);
}
function logError(msg) {
imaps.log.e(success, fail, msg);
}
function logInfo(msg) {
imaps.log.i(successr, fail, msg);
- 33 -
}
function logWarning(msg) {
imaps.log.w(success, fail, msg);
}
function logSend(id) {
imaps.log.send(success, fail, id);
}
</script>
</head>
<body>
<button onclick="logDebug('debug log');">Write as debug level</button><br>
<button onclick="logError('error log');">Write as error level</button><br>
<button onclick="logInfo('info log' );">Write as info level</button><br>
<button onclick="logWarning('warning log' );">Write as warning level</button><br>
<button onclick="logSend('test');">Send a log to IMAPS server</button><br>
</body>
</html>
注意
・ ログ送信先は、クライアント設定ファイルのimapsServerAddressで設定します。詳細は、付録C クライアント設定ファイルを参照して
ください。
・ ログAPIのsend関数を使用するには、以下のどちらかの認証情報の設定が必要です。
1. loginOnlineによる認証設定
認証機能のloginOnline関数やloginAuto関数などで認証情報を設定してからsend関数を実行してください。
2. setManageInfoによる認証設定
ユーザー情報を持たないアプリケーションでsend関数を実行する場合の認証方法です。あらかじめIMAPSサーバの管理コ
マンドでアプリケーション管理者を作成し、認証機能のsetManageInfo関数で管理者情報を設定してからsend関数を実行して
ください。アプリケーション管理者の作成方法は、"運用ガイド"の"コマンドリファレンス"を参照してください。
2.3.28.4.2 ログ設定の変更
以下にログ設定の変更を行う実施例を示します。
実施例
ログ設定の例
function changeLogSettings() {
imaps.log.setLevel(successCallback, errorCallback, 'DEBUG');
imaps.log.setMaxFileSize(successCallback, errorCallback, 20);
imaps.log.setRotateCount(successCallback, errorCallback, 5);
imaps.log.getLevel(
function(level) {
console.log(level); // 'DEBUG'
},
errorCallback
);
imaps.log.getMaxFileSize(
function(size) {
console.log(size); // 20
},
errorCallback
);
imaps.log.getRotateCount(
function(count) {
console.log(count); // 5
},
- 34 -
errorCallback
);
}
参考
ログAPIの設定はクライアント設定ファイルよりも優先されます。変更した内容は、アプリの再起動や更新によって失われません。
2.3.29 IMAPS PushIMAPS Pushプラグインとは、スマートデバイス上のアプリケーションの起動状態や利用者による更新操作などに依存せずに、 サーバ
からのメッセージをリアルタイムにスマートデバイスの利用者に通知する機能です。
本プラグインでは、IMAPSプッシュが利用できます。
プッシュ通知の詳細は、6.5.1 ハイブリッドアプリケーション向けのAPIの開発を参照してください。
2.3.30 IMAPS Cloud PushIMAPS Cloud Pushプラグインとは、スマートデバイス上のアプリケーションの起動状態や利用者による更新操作などに依存せずに、 サーバからのメッセージをリアルタイムにスマートデバイスの利用者に通知する機能です。
本プラグインでは、GCM、APNs、WNSが利用できます。
プッシュ通知の詳細は、6.5.1 ハイブリッドアプリケーション向けのAPIの開発を参照してください。
注意
Windowsアプリの場合、cordova compile/build/runを--archsオプションを指定して実行してください。 詳細は、2.2.4.3.2 プロセッサアーキテクチャを参照してください。
注意
WNSの設定後にアプリケーションを修正する場合の注意事項
WNSを使用するハイブリッドアプリケーションは、Visual Studioを使用してWNSの設定をする必要があります。
Visual StudioでWNSの設定をした後に、cordova build/run/emulate/prepareコマンドを実行すると、WNSが使用できなくなります。
Visual StudioでWNSの設定を行った後に、プラグインの変更やHTML/JavaScript等、アプリケーションを修正する場合は、 アプリ
ケーションを修正した後に以下の対処をしてください。
cordova build/run/emulateを実行した場合
1. cordova platform remove windowsを実行
2. cordova platform add windowsを実行
3. cordova prepareを実行
4. Visual StudioでWNSの設定をする
cordova prepareを実行した場合
以下のファイルのパッケージ名、パッケージ表示名、発行者表示名を、Visual Studioで修正する
Windows 8.1 ストアアプリの場合
package.windows.appxmanifest
Windows 10 UWPアプリの場合
package.windows10.appxmanifest
- 35 -
Windows 10 UWPアプリでWNSを使用する場合の注意事項
package.windows10.appxmanifestのスタートページの値を以下のように修正します。
変更前
ms-appx-web://.../www/index.html
変更後
www/index.html
2.3.31 IMAPS Push PropertiesIMAPS Push Propertiesプラグインは、IMAPS Push/IMAPS Cloud Pushプロパティが共通で使用する機能を持ったプラグインです。
本プラグインは、単体で使用しません。IMAPS Push/IMAPS Cloud Pushを追加すると自動的に追加されます。
2.3.32 IMAPS Zip FileIMAPS Zip Fileプラグインとは、スマートデバイス上のファイルをZIP形式で圧縮/解凍するためのプラグインです。
詳細は、APIリファレンスを参照してください。
2.3.32.1 IMAPS Zip Fileサンプル
以下にIMAPS Zip Fileプラグインを使用する場合の実施例を示します。
使用例(圧縮)
IMZipFile.zip(source, destination,
function(result) {
// 成功時の処理
}, function(error) {
// 失敗時の処理
});
使用例(解凍)
IMZipFile.unzip(source, destination,
function(result) {
// 成功時の処理
}, function(error) {
// 失敗時の処理
});
2.3.33 KeyboardKeyboardプラグインとは、スマートデバイスのキーボードの表示・非表示の制御をするためのプラグインです。
詳細は、https://github.com/driftyco/ionic-plugin-keyboardを参照してください。
2.3.34 BarcodeScannerBarcodeScannerプラグインとは、スマートデバイスのカメラでバーコードを読み取るためのプラグインです。 他のバーコードを読み取る
プラグインと比較して、読み取りスピードが速いことと認識率が高いことが特徴です。
BarcodeScannerプラグインは、一次元バーコードと二次元バーコードの両方を読み取ることができます。 詳細は、APIリファレンスを参
照してください。
- 36 -
注意
Windows10 UWPアプリの場合、cordova compile/build/runを--archsオプションを指定して実行してください。 詳細は、2.2.4.3.2 プロセッサアーキテクチャを参照してください。
2.4 プラグインの開発
IMAPSが提供しているプラグインの他にも、独自のCordovaプラグイン(カスタムプラグイン)を開発して、自由にアプリケーションに取り
込めます。 開発したプラグインは、cordova pluginコマンドでCordovaプロジェクトに追加します。
プラグイン開発の詳細は、Apache Cordova Documentationを参照してください。
2.5 注意事項
ハイブリッドアプリケーション開発時の注意事項を説明します。
2.5.1 CordovaプラグインのAPI使用時の注意事項
Cordovaプラグインが提供するAPIはdevicereadyイベントが発生した後で利用できます。
Cordovaプラグインが提供するAPIを使用した初期化処理などは、devicereadyイベントのリスナーから呼び出される関数内で行ってくだ
さい。
実施例
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
// 初期化処理
}
2.5.2 WNSを使用する場合の注意事項
WNSの設定後にアプリケーションを修正する場合の注意事項
WNSを使用するハイブリッドアプリケーションは、Visual Studioを使用してWNSの設定をする必要があります。
Visual StudioでWNSの設定をした後に、cordova build/run/emulate/prepareコマンドを実行すると、WNSが使用できなくなります。
Visual StudioでWNSの設定を行った後に、プラグインの変更やHTML/JavaScript等、アプリケーションを修正する場合は、 アプリ
ケーションを修正した後に以下の対処をしてください。
cordova build/run/emulateを実行した場合
1. cordova platform remove windowsを実行
2. cordova platform add windowsを実行
3. cordova prepareを実行
4. Visual StudioでWNSの設定をする
cordova prepareを実行した場合
以下のファイルのパッケージ名、パッケージ表示名、発行者表示名を、Visual Studioで修正する
Windows 8.1 ストアアプリの場合
package.windows.appxmanifest
Windows 10 UWPアプリの場合
package.windows10.appxmanifest
- 37 -
Windows 10 UWPアプリでWNSを使用する場合の注意事項
package.windows10.appxmanifestのスタートページの値を以下のように修正します。
変更前
ms-appx-web://.../www/index.html
変更後
www/index.html
2.5.3 Windowsアプリのビルド対象プロセッサについて
Windowsアプリアプリケーションをビルドする場合、デフォルトではすべてのプロセッサ用にビルドしますが、 すべてのプロセッサ用の
ビルドをサポートしていないCordovaプラグインがあります。
Windowsアプリをパッケージングする際に--archsオプションを指定してください。
Cordovaプラグインのサポート状況は、以下のとおりです。
No. プラグイン anycpuのサポート
8.1 10
1 Camera ○ ○
2 Console ○ ○
3 Contacts ○ ○
4 Device ○ ○
5 Device Motion ○ ○
6 Device Orientation ○ ○
7 Notification ○ ○
8 File ○ ○
9 File Transfer ○ ○
10 Geolocation ○ ○
11 Globalization ○ ○
12 InAppBrowser ○ ○
13 Media ○ ○
14 Capture ○ ○
15 Network Information ○ ○
16 Splashscreen ○ ○
17 StatusBar ○ ○
18 Test Framework ○ ○
19 IMAPS Core × ×
20 IMAPS Application Available Time Control × ×
21 IMAPS Cloud Push × ×
22 Keyboard ○ ○
23 Beacon × ○
24 BarcodeScanner ○ ×
25 Screen Orientation ○ ×
- 38 -
2.5.4 Visual Studioを使用した場合の注意事項
Visual Studioを使用した場合の注意事項
Visual Studioでビルドした後に、プラグインの変更やHTML/JavaScript等、アプリケーションを修正する場合は、 アプリケーションを修
正した後に以下の対処をしてください。
1. cordova platform remove windowsを実行
2. cordova platform add windowsを実行
3. cordova prepareを実行
4. Visual Studioでビルドする
2.5.5 iOSでHTTP通信する場合の注意事項
iOS 9から、httpでの通信が、デフォルトでは利用できなくなりました。
以下のどちらかの対処をしてください。
・ IMAPSサーバをHTTPSでセットアップして、HTTPSで接続してください。
・ IMAPSサーバをHTTPで運用する場合は、info.plistにNSAppTransportSecurityの設定をしてください。
設定例1(すべてのドメインでhttpアクセスを有効にする)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</dict>
</plist>
設定例2(特定のドメインでhttpアクセスを有効にする)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>ドメイン</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
</dict>
</plist>
- 39 -
第3章 ネイティブアプリケーション
本章では、IMAPSを使用したネイティブアプリケーションの開発について説明します。
3.1 ネイティブアプリケーションの概要
ネイティブアプリケーションは、OS固有のAPIで開発したアプリケーションでスマートデバイスの特長を生かしたアプリケーション開発が
できます。IMAPSでは、Android、iOS、およびクライアントのWindowsのネイティブアプリケーション向けにAPIを提供しています。
3.2 開発の流れ
ネイティブアプリケーションの開発の流れは、次のとおりです。
1. 開発環境の準備
2. 開発/パッケージング
3. 動作確認(デバッグ)
4. 配布
3.3 Androidアプリケーションの開発
IMAPSはネイティブアプリケーション向けに、認証、SLS、ログ送信、利用時間制御、プッシュ、双方向通信サービス、パーミッションの
APIを提供しています。認証のAPIを使用する場合は、SLSのAPIについての準備も行う必要があります。また、認証、SLS、プッシュの
APIを使用する場合で、インストール先の端末がAndroid6.0以上、かつ開発ツールでAPI Levelに23以上を設定して開発するときは、
パーミッションのAPIによる処理が必要になります。
プッシュのAPIを使用する場合は第6章 プッシュ通知機能を参照してください
クライアント設定ファイルの値を調整することで、アプリケーションの動作をカスタマイズできます。詳細は、付録C クライアント設定ファ
イルを参照してください。
詳細は各プラットフォームのドキュメントを参照してください。
3.3.1 開発環境の準備
開発に必要な開発マシンと開発ツールを用意します。
開発に必要な開発マシンのOSと開発ツールは以下のとおりです。
開発マシン
以下のどちらか
・ Windows 7以降
・ Mac OS X 10.9以降
開発ツール
・ Android Studio
API Levelは19以上が必要です。
3.3.2 ネイティブアプリケーションの開発をする(Android Studio)
参考
アプリケーション開発者用のAPIリファレンスは以下に格納されています。必要に応じて参照してください。
<DVD-ROMドライブ>\apiref\index.html
- 40 -
<DVD-ROMマウントディレクトリ>/apiref/index.html
1. ネイティブアプリケーションの開発環境を準備後、Android StudioでAndroid用のプロジェクトを新規作成します。
2. 以下のjarファイルをアプリケーションプロジェクトで設定している配置先に追加します。
<DVD-ROMドライブ>\development\android\libs\imaps.jar
<DVD-ROMドライブ>\development\android\libs\imrtc.jar
<DVD-ROMドライブ>\development\android\libs\imappmanager.jar
<DVD-ROMマウントディレクトリ>/development/android/libs/imaps.jar
<DVD-ROMマウントディレクトリ>/development/android/libs/imrtc.jar
<DVD-ROMマウントディレクトリ>/development/android/libs/imappmanager.jar
jarファイルの配置先は、Android Studioのデフォルトでは以下です。
<プロジェクト>/app/libs
3. soファイルを含む各フォルダーをアプリケーションプロジェクトで設定している配置先に追加します。
<DVD-ROMドライブ>\development\android\libs\armeabi
<DVD-ROMドライブ>\development\android\libs\armeabi-v7a
<DVD-ROMドライブ>\development\android\libs\mips
<DVD-ROMドライブ>\development\android\libs\x86
<DVD-ROMマウントディレクトリ>/development/android/libs/armeabi
<DVD-ROMマウントディレクトリ>/development/android/libs/armeabi-v7a
<DVD-ROMマウントディレクトリ>/development/android/libs/mips
<DVD-ROMマウントディレクトリ>/development/android/libs/x86
soファイルを含む各フォルダーは、Android Studioのデフォルトでは以下のフォルダーを作成して配置します。
<プロジェクト>/app/src/main/jniLibs
4. 開発に必要なその他のライブラリ、ファイルの準備をおこないます。双方向通信サービスの APIのみ使用する場合は不要です。
・ log4j-1.2.17.jarダウンロードし、追加してください。
・ httpmime-4.2.5.jarダウンロードし、追加してください。
・ クライアント設定ファイル(imaps.properties)をプロジェクトの/app/src/main/assets/imaps/propertiesに入れます。
クライアント設定ファイルは以下に配置されています。
<DVD-ROMドライブ>\development\conf\imaps\imaps.properties
<DVD-ROMマウントディレクトリ>/development/conf/imaps/imaps.properties
詳細は、付録C クライアント設定ファイルを参照してください。
・ android-support-v4パーミッションのAPIを使用するときは、build.gradleのdependenciesにcom.android.support:support-v4(23以上)を追加してくだ
さい。以下は設定例です。
・・・
dependencies {
・・・
compile 'com.android.support:support-v4:23.4.0'
}
5. 利用するAPIによって、必要なパーミッションをAndroidManifest.xmlに定義します。
- 41 -
認証
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
SLS
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
ログ収集
<uses-permission android:name="android.permission.INTERNET"/>
利用時間制御
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
プッシュ通知
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
端末ブート時にプッシュサービスを起動する際には以下も必要です。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
バイブレーションを鳴動させるためには以下も必要です。
<uses-permission android:name="android.permission.VIBRATE"/>
GCMを利用するためには以下も必要ですが、Android4.0.4以上の場合は"android.permission.GET_ACCOUNTS"は不要で
す。
<permission android:name="[アプリpackage名].permission.C2D_MESSAGE" android:protectionLevel="signature"/>
<uses-permission android:name="[アプリpackage名].permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
双方向通信サービス
<uses-permission android:name="android.permission.INTERNET"/>
注意
作成したプロジェクトのマニフェストファイル(AndroidManifest.xml)のpackageには、[com.fujitsu.imaps]を指定しないでください。
注意
build.gradleのcompileSdkVersionに23を指定して、認証APIの以下のメソッドを使用する場合、
・ com.fujitsu.imaps.plugin.auth.javaapi.LoginManager
- checkServerTimeout メソッド
- saveResponseAuth メソッド
- setRequestAuth メソッド
- 42 -
build.gradleに以下を追加してください。
android {
.....
useLibrary 'org.apache.http.legacy' //この行を追加
.....
}
useLibraryの追加をしないと、認証APIでコンパイルエラーが発生します。
3.3.3 認証
本節では、認証APIの利用方法について説明します。
認証のAPIでは、オフライン認証を行うため、オンライン認証が成功すると認証情報をSLSに保存します。そのため、認証APIを使用す
る場合は、SLSのAPIについての準備も行う必要があります。
インストール先の端末がAndroid6.0以上、かつ開発ツールでAPI Levelに23以上を設定して開発するときは、パーミッションのAPIにつ
いての準備も行う必要があります。
3.3.3.1 認証APIIMAPSの認証APIは以下の機能を提供しています。
・ ログイン
・ ログアウト
・ 認証情報の付与
・ 管理情報の設定
・ パスワード変更
・ ユーザー情報の登録、取得、削除
・ SLS内のデータの引き継ぎ
・ タイムアウト検知
3.3.3.2 ログイン
アプリケーションは、IMAPSが提供している認証機構を呼び出して、利用しているユーザーの正当性を検証できます。ログインには以
下の種類があります。
・ IMAPSサーバが提供している認証機能をネットワーク経由で呼び出し、サーバ側で認証するオンライン認証
・ クライアント内部で保持しているクレデンシャルを用いて認証する、オフライン認証
注意
Androidの場合、ログアウトを呼び出さずにアプリケーションを終了すると、再度アプリケーションを起動したときに、ユーザー情報や認
証情報が残ったままになっている場合があります。
アプリケーション終了時、または起動時にログアウトを呼び出して、ユーザー情報を初期化してください。
使用例
オンライン認証を行うためには、com.fujitsu.imaps.plugin.auth.javaapi.LoginManager#loginOnlineメソッド、オフライン認証を行うた
めには、com.fujitsu.imaps.plugin.auth.javaapi.LoginManager#loginOfflineメソッドを呼び出します。
private void loginFunc(Context context) {
String url = "https://サーバアドレス:ポート";
String userId = "user1";
String passwd = "pass11";
new AsyncLoginTask(context, url, userId, passwd).execute();
- 43 -
}
class AsyncLoginTask extends AsyncTask<String, Integer, String> {
LoginManager mLoginManager = null;
String mLoginURL = null;
String mUserId = null;
String mPasswd = null;
・・・・
public AsyncLoginTask(Context context, String loginURL, String userId, String passwd) {
mLoginManager = new LoginManager(context);
mLoginURL = loginURL;
mUserId = userId;
mPasswd = passwd;
・・・・
}
protected String doInBackground(String... params) {
try {
mLoginManager.loginOnline(mLoginURL, mUserId, mPasswd);
} catch (例外キャッチ) {
// キャッチした例外の内容に応じて、例外処理を実装します。
}
return null;
}
}
private void loginFunc(Context context) {
String userId = "user1";
String passwd = "pass11";
try {
mLoginManager = new LoginManager(context);
mLoginManager.loginOffline(userId, passwd);
} catch (例外キャッチ) {
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
オフライン認証とは、クライアントが保持しているクレデンシャルを用いて利用ユーザーの正当性を検証する認証です。IMAPSサー
バの認証機構を利用しないので、ネットワークが利用できない状態でも認証できます。オフライン認証をするには、オンライン認証
で一度は認証しておく必要があります。
ネットワーク状態を気にせずログインを実行したい場合は、com.fujitsu.imaps.plugin.auth.javaapi.LoginManager#loginAutoメソッド
を呼び出します。loginAutoメソッドは、ネットワーク状態に応じて 適なログイン方法を選択します。
ポイント
・ オンライン認証では、クライアント設定ファイルのimapsServerAddressで接続先のサーバを設定することも可能です。詳細は、開発
者用マニュアル、付録C クライアント設定ファイルを参照してください。
3.3.3.3 ログアウト
アプリケーションは、ログアウトを呼び出す事でユーザー情報を初期化できます。ログアウトメソッドは内部的にはIMAPSサーバの認証
機構を呼び出さないため、ネットワークが利用できない状態でも呼び出せます。
使用例
private void logoutFunc(Context context) {
try {
LoginManager mLoginManager = new LoginManager(context);
mLoginManager.logout();
} catch (例外キャッチ) {
- 44 -
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
3.3.3.4 認証情報の付与
ログイン後、クライアントアプリケーションがIMAPSサーバ以外のサーバにアクセスする場合、認証情報を受け渡せます。この機能は
IMAPSサーバの認証機構と業務サーバとの間でSSOのような振る舞いをおこないたい場合に便利です。SSOのような振る舞いとは以
下のような動作を指します。
・ IMAPSサーバで認証していない場合、クライアントからのアクセスはエラーとなる。
・ IMAPSサーバで認証済の場合、クライアントからのアクセスは成功する
このような振る舞いを実現するためには、以下のようにします。
・ クライアントからアクセスする業務サーバ上のサーバアプリケーションに、認証モジュールを組み込む
・ クライアントアプリケーションはIMAPSで認証し、業務サーバにアクセスする際には認証情報を付与してアクセスする
使用例
import java.net.Proxy;
・
・
private void connection(Context context, String url) {
new AsyncConnectTask(context, url).execute();
}
class AsyncConnectTask extends AsyncTask <String, Integer, String> {
LoginManager mLoginManager = null;
String mURL = null;
・・・・
public AsyncConnectTask(Context context, String url) {
mLoginManager = new LoginManager(context);
mURL = url;
・・・・
}
protected String doInBackground(String... params) {
try {
URL url = new URL(mURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
・・・
mLoginManager.setRequestAuth(con);
con.connect();
mLoginManager.checkServerTimeout(con);
・・・
mLoginManager.saveResponseAuth(con);
・・・
} catch (IMAPSAuthTimeOutException e) {
// ログアウト処理の実装を行うことを推奨します。
} catch (例外キャッチ) {
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
3.3.3.5 管理情報の設定
管理情報とは、IMAPSサーバがクライアントからアクセスされた場合に、APIからのアクセスである事を確認するための情報です。管理
情報はシステム管理者によってIMAPSサーバに設定され、ユーザーの認証情報とは別に管理されます。
- 45 -
IMAPSサーバにアクセスするアプリケーションは、必ずアプリケーション内で管理情報を設定してください。具体的にどのような管理情
報を設定するかは、システム管理者に問い合わせてください。
管理情報は、アプリケーション起動時に一度設定します。IMAPSサーバにアクセスするAPIを呼び出すたびに実行する必要はありま
せん。
使用例
LoginManager mLoginManager = new LoginManager(getApplicationContext());
mLoginManager.setManageInfo(管理ID, 管理パスワード);
注意
異なるプロセスから管理情報を設定した場合は、IMAPSサーバにアクセスできません。
3.3.3.6 パスワード変更
パスワードの変更ができます。
使用例
private void changeFunc(Context context) {
String oldPass = "oldpass";
String newPass = "newpass";
new ChangePasswordTask(context, "https://サーバアドレス:ポート",
oldPass, newPass).execute();
}
class ChangePasswordTask extends AsyncTask<String, Integer, String> {
PasswdManager mPasswdManager = null;
String mChangeURL = null;
String mOldPass = null;
String mNewPass = null;
・・・・
public ChangePasswordTask(Context context, String changeURL, String oldPass, String newPass) {
mPasswdManager = new PasswdManager(context);
mChangeURL = changeURL;
mOldPass = oldPass;
mNewPass = newPass;
・・・・
}
protected String doInBackground(String... params) {
try {
mPasswdManager. changePasswd(mChangeURL, mOldPass, mNewPass);
} catch (例外キャッチ) {
// キャッチした例外の内容に応じて、例外処理を実装します。
}
return null;
}
ポイント
クライアント設定ファイルのimapsServerAddressでも接続先のサーバを設定できます。詳細は、開発者用マニュアル、付録C クライアント設定ファイルを参照してください。
- 46 -
3.3.3.7 ユーザー情報の登録、取得、削除
クライアントアプリケーションがIMAPS以外の既存の業務システムを利用して認証している場合、そのままではオフライン認証や認証モ
ードでのSLSを利用できません。
このような独自認証を行った場合、ユーザーの情報を登録すれば、これらの機能を利用できます。
使用例
try {
・・独自のログイン処理・・
URL url = new URL(ログインURL);
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
・・・・
LoginManager mLoginManager = new LoginManager(getApplicationContext());
mLoginManager.setLoginUserInfo(userId, passwd, userName, userRole);
} catch (例外キャッチ) {
// キャッチした例外の内容に応じて、例外処理を実装します。
}
設定したユーザー情報は、com.fujitsu.imaps.plugin.auth.javaapi.UserManagerを利用する事で取得できます。
final UserManager um = UserManager.getInstance();
String userId = um.getUserID(); // ユーザーIDを取得する場合
登録したユーザー情報とSLSのデータは、com.fujitsu.imaps.plugin.auth.javaapi.LoginManagerのdeleteUserInfoを利用して削除す
ることができます。
try {
LoginManager mLoginManager = new LoginManager(getApplicationContext());
mLoginManager.deleteUserInfo(userId);
} catch (例外キャッチ) {
// キャッチした例外の内容に応じて、例外処理を実装します。
}
3.3.3.8 SLS内のデータの引き継ぎ
IMAPSでは、クライアント内にデータをセキュアに保存するための仕組みとして、SLSを提供しています。SLSを認証モードで利用して
いる場合、格納データはパスワードをキーにして保護されています。
そのためパスワードが変更された場合、格納された暗号化データを引き継ぐ(暗号化データを新しいパスワードで再暗号化する)必要
があります。
使用例
AsyncLoginTaskをオーバーライドしたクラスの処理です。
@Override
protected Boolean doInBackground(String... params) {
boolean result = true;
try {
// オンラインでのログイン
mLoginManager.loginOnline(mLoginURL, mUserId, mPasswd);
} catch (Exception e) {
exception = e;
result = false;
}
return result;
}
@Override
protected void onPostExecute(Boolean result) {
if (!result) {
if (exception instanceof IMAPSSlsPasswordException) {
// パスワードが異なるため、データの引き継ぎができなかった場合に例外が発生します。
// データの引き継ぎをおこなうかをユーザーに問い合わせます。
- 47 -
} else if (exception instanceof xxxxException) {
// そのほかの例外については開発者用マニュアルを参照してください。
}
}
}
// ダイアログで、データの引き継ぎをおこなうかをユーザーに問い合わせる場合
// データを引き継ぎます
alertDialog.setPositiveButton("引き継ぎ",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// データを引き継ぐ場合は、旧パスワードをユーザーに問い合わせます。
}
});
// データを削除します
alertDialog.setNeutralButton("削除",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
LoginManager loginManager = new LoginManager(getApplicationContext());
try {
// データを削除する場合は、deleteDataを呼び出します。
loginManager.deleteData();
} catch (例外キャッチ) {
// 例外については開発者用マニュアルを参照してください。
}
}
});
// ダイアログで、旧パスワードをユーザーに問い合わせてデータを引き継ぐ場合
alertDialog.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EditText editText = (EditText) inputView.findViewById(R.id.old_password_inputtext);
String oldPassword = editText.getText().toString();
try {
// 入力された旧パスワードを引数に、transDataを呼び出します。
LoginManager loginManager = new LoginManager(getApplicationContext());
loginManager.transData(oldPassword);
} catch (IMAPSSlsPasswordException e) {
// 旧パスワードが異なるため、データの引き継ぎができなかった場合に例外が発生します。
} catch (例外キャッチ) {
// そのほかの例外については開発者用マニュアルを参照してください。
}
}
});
3.3.3.9 タイムアウト検知
クライアントアプリケーションのアイドルタイムアウト時間を検知します。以下の機能があります。
・ タイムアウト監視開始
・ タイムアウト検知
使用例
public void onPause() {
TimeoutManager.getInstance(this).chkTimeoutStart();
}
public void onResume() {
if(TimeoutManager.getInstance(this).isTimeout()) {
- 48 -
//タイムアウト発生時の実装
}
}
3.3.4 SLS本節では、SLSのAPIの利用方法について説明します。
インストール先の端末がAndroid6.0以上、かつ開発ツールでAPI Levelに23以上を設定して開発するときは、パーミッションのAPIにつ
いての準備も行う必要があります。
3.3.4.1 SLSのAPIネイティブアプリケーションからSLSを利用する場合、認証モードと認証レスモードがあります。認証モードで利用する場合、SLSのAPIを利用する前に、認証APIを利用して認証します。認証モードと認証レスモードでは使用するSLSのAPIが異なります。認証モードでは
ユーザー毎に異なる暗号化キーを利用してデータを暗号化するため、よりセキュリティ強度が高まります。
SLSのAPIが提供している機能には、以下のようなものがあります。
・ データの格納および取得
・ データの削除、データ数およびキーの取得
3.3.4.2 データの格納および取得
SLSにデータを格納、および取得できます。格納されたデータは、キーおよび値ともに暗号化されて格納され、取得時にはデータは復
号化されます。格納されるデータサイズは2GBを上限に、カスタマイズできます。詳細は、C.5.10 sls.maxDatabaseSizeを参照してくださ
い。以下は、認証モードの例です。
使用例
LoginInfo loginInfo = LoginData.getInstance().mLoginInfo;
if (loginInfo != null) {
if (loginInfo.getUser() != "") {
try {
DataManagerDirect dm = new DataManagerDirect(getApplicationContext(),
loginInfo.getUser(),
loginInfo.getPwd().getBytes());
dm.put("キー名", "値");
} catch (IMAPSSlsException e) {
// 例外処理.
} catch (IllegalArgumentException e) {
// 例外処理
} catch (SQLiteFullException e) {
// 例外処理
}
try {
DataManagerDirect dm = new DataManagerDirect(getApplicationContext(),
loginInfo.getUser(),
loginInfo.getPwd().getBytes());
String value = dm.get("キー名");
} catch (IMAPSSlsException e) {
// 例外処理.
} catch (IllegalArgumentException e) {
// 例外処理
}
}
}
3.3.4.3 データの削除、データ数およびキーの取得
SLSのAPIでは、格納されたデータの削除やキーを取得できます。以下は認証レスモードの例です。
- 49 -
使用例
try {
DataManagerModeLessDirect dm = new DataManagerModeLessDirect(getApplicationContext());
int count = dm.getListLength();
for (int i=count-1; i >= 0; i--){
String key = dm.getKeyFromIndex(i);
dm.remove(key);
}
} catch (IMAPSSlsException e) {
// 例外処理.
}
3.3.5 ログ収集
本節では、ログ収集APIの利用方法について説明します。
3.3.5.1 ログ収集APIログ収集APIが提供している機能には、以下があります。
・ ログ出力とサーバへの送信
・ ログ設定の変更
3.3.5.2 ログ出力とサーバへの送信
以下にログ出力、ログ送信する実施例を示します。
実施例
ログ出力の例
IMAPSLogger m_logger = new IMAPSLogger(getApplicationContext());
m_logger.i("abcde");
m_logger.w("あいうえお");
m_logger.e("abcde");
m_logger.d("あいうえお");
ログ送信の例
private void sendFunc(Context context) {
String url = "https://サーバアドレス:ポート";
String userId = "user1";
String passwd = "pass11";
new SendLogTask(context, url, userId, passwd).execute();
}
class SendLogTask extends AsyncTask<String, Integer, String> {
LoginManager mLoginManager = null;
String mLoginURL = null;
String mUserId = null;
String mPasswd = null;
IMAPSLogger mLogger = null;
public SendLogTask(Context context, String loginURL, String userId, String passwd) {
mLoginManager = new LoginManager(context);
mLoginURL = loginURL;
mUserId = userId;
mPasswd = passwd;
mLogger = new IMAPSLogger(context);
:
}
- 50 -
protected void doInBackground(String... params) {
try{
// 認証処理
mLoginManager.loginOnline(mLoginURL, mUserId, mPasswd);
// ログ送信処理
mLogger.send(mUserId);
}catch(Exception e){
// 例外処理
}
}
}
注意
・ ログ送信先は、クライアント設定ファイルのimapsServerAddressで設定します。詳細は、付録C クライアント設定ファイルを参照して
ください。
・ ログAPIのsendメソッドを使用するには、以下のどちらかの認証情報の設定が必要です。
1. loginOnlineによる認証設定
認証機能のloginOnlineメソッドやloginAutoメソッドなどで認証情報を設定してからsendメソッドを実行してください。
2. setManageInfoによる認証設定
ユーザー情報を持たないアプリケーションでsendメソッドを実行する場合の認証方法です。あらかじめIMAPSサーバの管理
コマンドでアプリケーション管理者を作成し、認証機能のsetManageInfoメソッドで管理者情報を設定してからsendメソッドを実
行してください。アプリケーション管理者の作成方法は、"運用ガイド"の"コマンドリファレンス"を参照してください。
3.3.5.3 ログ設定の変更
以下にログ設定の変更を行う実施例を示します。
実施例
ログ設定の例
try {
IMAPSLogger log = new IMAPSLogger(getApplicationContext());
log.setLevel(IMAPSLogLevel.DEBUG);
log.setMaxFileSize(20);
log.setRotateCount(5);
log.getLevel(); // IMAPSLogLevel.DEBUG
log.getMaxFileSize(); // 20
log.getRotateCount(); // 5
} catch (IMAPSClientCommonException e) {
// 設定ファイルの読み込みに失敗した場合
} catch (IllegalArgumentException e) {
// 指定した引数が間違っている場合
}
参考
ログAPIの設定はクライアント設定ファイルよりも優先されます。変更した内容は、アプリの再起動や更新によって失われません。
3.3.6 利用時間制御
本節では、利用時間制御APIの利用方法について説明します。
- 51 -
3.3.6.1 利用時間制御API利用時間制御APIが提供している機能には、以下があります。
・ 利用時間の制御
3.3.6.2 利用時間の制御
アプリケーションの利用可能な時間を制御します。
利用時間の制御を開始するにはAppTimeManager#initメソッドを使用します。 利用時間外であることはAppTimeDelegateインターフェ
ースのexecuteAtInvalidTimeメソッドで通知されます。
使用例
以下の場合に、それぞれ別の処理をする使用例を示しています。
・ 利用時間の制御の開始処理で利用時間外であった場合
・ 利用時間の制御の開始処理後に利用時間外となった場合
・ 利用時間の制御の開始処理で利用不可能な日であった場合
・ 利用時間の制御の開始処理後に利用不可能な日となった場合
import com.fujitsu.imaps.plugin.appmanager.AppTimeManager;
import com.fujitsu.imaps.plugin.appmanager.AppTimeDelegate;
・
・
AppTimeManager appTimeManager = null;
private void checkTime() {
appTimeManager = AppTimeManager.getInstance(this
.getApplicationContext());
new CheckTimeTask(new MyAppTimeDelegate()).execute();
}
class CheckTimeTask extends AsyncTask<String, String, String> {
AppTimeDelegate appTimeDelegate = null;
CheckTimeTask(AppTimeDelegate appTimeDelegate) {
this.appTimeDelegate = appTimeDelegate;
}
protected String doInBackground(String... params) {
try {
// 利用時間の制御の開始処理
if (appTimeManager.init(appTimeDelegate)) {
return "OK";
} else {
return "OUT_OF_TIME";
}
} catch (Exception e) {
return "EXCEPTION";
}
}
protected void onPostExecute(String result) {
if (result.equals("OK")) {
// 開始処理が成功した場合の処理
} else if (result.equals("EXCEPTION")) {
// 開始処理で例外が発生した場合の処理
} else if (result.equals("OUT_OF_TIME")) {
// 開始処理で利用時間外であった処理はMyAppTimeDelegateでしているためここでは何もしない
}
- 52 -
}
}
class MyAppTimeDelegate implements AppTimeDelegate {
public void executeAtInvalidTime(int result) {
try {
if (appTimeManager.isStarted()) {
if (result == AppTimeManager.OUT_OF_TIME) {
// 開始処理後に利用時間外となった場合の処理
} else {
// 開始処理後に利用不可能な日となった場合の処理
}
} else {
if (result == AppTimeManager.OUT_OF_TIME) {
// 開始処理で利用時間外であった場合の処理
} else {
// 開始処理で利用不可能な日であった場合の処理
}
}
} catch (Exception e) {
// 例外処理
}
}
}
利用時間の情報を取得します。利用時間の制御の開始処理後に使用します。
AppTimeManager appTimeManager = AppTimeManager.getInstance(this
.getApplicationContext());
try {
String startTime = appTimeManager.getStartTime(); // 利用時間の開始時間を取得する場合
} catch (Exception e) {
// 例外処理
}
利用時間の制御を終了します。利用時間制御の開始処理後に利用時間外になる前に、終了する場合に使用します。
AppTimeManager appTimeManager = AppTimeManager.getInstance(this
.getApplicationContext());
appTimeManager.destroy();
注意
・ クライアント設定ファイルのappmgr.strictPolicyModeの値がfalseの場合は、端末がオフラインでポリシー設定ファイルが更新されな
い場合や、 クライアントの時計が間違っている場合は、設定した時間外にアプリケーションが利用可能になる場合があります。 これ
を防止するためには、appmgr.strictPolicyModeの値をtrueにします。 詳細は、付録C クライアント設定ファイルを参照してください。
3.3.7 パーミッション
本節では、パーミッションAPIの利用方法について説明します。
認証、SLS、プッシュのAPIを利用する場合で、インストール先の端末がAndroid6.0以上、かつ開発ツールでAPI Levelに23以上を設
定して開発するときは、パーミッションのAPIを利用して「通話の発信と管理」を許可する必要があります。これは認証、SLS、プッシュの
APIの実行に「android.permission.READ_PHONE_STATE」のパーミッションが必要であることと、Android6.0からアプリケーションのイ
ンストール時ではなく、起動した後にパーミッションをチェックするようになったためです。詳細はAndroidの公式サイトをご覧ください。
3.3.7.1 パーミッションAPIパーミッションAPIが提供している機能には、以下があります。
・ APIに必要なパーミッションの取得とチェック
- 53 -
3.3.7.2 APIに必要なパーミッションの取得とチェック
認証、SLS、プッシュのAPIに必要なパーミッションを取得し、許可されているかチェックします。
具体的には取得したパーミッションをAndroidが用意しているメソッドを使って、チェックし、必要に応じて、パーミッションの要求処理を
行います。
以下のような流れになります。
1. PermissionManager#getPermissionsメソッド(IMAPSのAPI)で認証等のAPIに必要なパーミッションを取得する。
2. ContextCompat#checkSelfPermissionメソッド(AndroidのAPI)でパーミッションの許可があるかをチェックする。
3. 許可がない場合、ActivityCompat#requestPermissionsメソッド(AndroidのAPI)でパーミッションの許可を要求する。
4. 許可要求のダイアログでの選択結果をonRequestPermissionsResultメソッドで受け取ります。
使用例
認証のAPIに必要なパーミッションをチェックするときの使用例を示しています。
public class MainActivity extends Activity {
・・・
private static final int MY_PERMISSIONS_REQUEST_CODE = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
・・・
// Android6.0以上の環境かチェック
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PermissionManager pm = new PermissionManager(getApplicationContext());
// パーミッションを取得するAPI
int[] apis = {PermissionManager.AUTH_API};
String[] permissions = pm.getPermissions(apis);
boolean requestPermissionFlag = false;
List<String> requestPermissionsList = new ArrayList<String>();
for(String permission : permissions) {
// PermissionManager#getPermissionsで取得したパーミッションをチェック
if(ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_DENIED) {
requestPermissionFlag = true;
requestPermissionsList.add(permission);
}
}
if(requestPermissionFlag) {
// 拒否されているパーミッションの許可を要求するダイアログを表示
ActivityCompat.requestPermissions(this, requestPermissionsList.toArray(new String[0]),
MY_PERMISSIONS_REQUEST_CODE);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
if(requestCode == MY_PERMISSIONS_REQUEST_CODE) {
PermissionManager pm = new PermissionManager(getApplicationContext());
// 許可要求のダイアログで許可されたかを確認します
if(pm.checkApi(PermissionManager.AUTH_API, permissions, grantResults) ==
PermissionManager.API_PERMISSION_GRANTED) {
// 許可された場合の処理
} else {
// 拒否された場合の処理
// 許可要求のダイアログでの「今後は確認しない」のチェックを確認するには、
// ActivityCompat#shouldShowRequestPermissionRationaleを利用する
- 54 -
}
}
}
}
注意
・ 許可要求のダイアログで拒否されたときに「今後は確認しない」がチェックされたかどうかを確認したいときは、
onRequestPermissionsResultメソッドの中で、ActivityCompat#shouldShowRequestPermissionRationaleメソッド(AndroidのAPI)を利
用します。
3.3.8 パッケージング
プログラムとして作成したクラスファイルをパッケージ化します。各プラットフォームのIDEでパッケージングを実施します。
署名なしのアプリケーションでもデバッグ環境では動作します。しかし、実際の端末で動作させる場合には署名が必要です。 詳細
は、"Android Developers"のドキュメントを参照してください。
IMAPSサーバでアプリケーションを配布する場合
IMAPSサーバでアプリケーションを配布する場合は、パッケージ化したファイルを含めた以下のようなzip形式のアーカイブファイルを
作成します。
それぞれのファイルについて説明します。以下のファイルをzipファイルのルートフォルダーに含めます。
・ アプリケーション本体
パッケージ化したアプリケーション本体です。拡張子は、apkです。
アプリケーションのバージョンと識別IDは255文字以降は無視されます。
バージョンはアプリケーションのバージョンです。
パッケージは、アプリケーションを特定するための値です。以下の値を参照します。
AndroidManifext.xmlのpackage属性
・ 説明ファイル
アプリ詳細画面でアプリケーションの説明欄に表示する文章を定義するファイルです。ファイルはUTF-8で記載します。
日本語の説明はdescription_ja.txt、英語の説明はdescription.txtに記載します。
説明文は、0文字以上4000文字以下の範囲で記載できます。
省略時は空文字になります。
- 55 -
・ アイコン
IMAPSサーバによる配布画面上で利用されるアイコンです。アイコンの推奨サイズは96x96ピクセル以上で縦横の幅が同じ画像で
す。ファイルはpng形式でファイル名はicon.pngです。
省略時はデフォルトのアイコンになります。
・ そのほか
アプリケーションをインストールするための依存ファイルなどです。
注意
IMAPSサーバによる配布をするには、プラットフォームごとに以下の条件があります。丸括弧内は、主に対応が必要となる人物です。
ここで説明されている内容は、各ベンダーによって変更される可能性があります。 新の情報は、それぞれの公開情報を参照してくだ
さい。
・ (アプリケーション利用者) 配布されたアプリケーションをインストールするには、スマートデバイスの[提供元不明のアプリのインスト
ール]を許可する設定にします。
・ (システム管理者) IMAPSサーバを自己発行証明書を使用してSSLで運用している場合、ブラウザ(IMAPSサーバによる配布画面
など)でアプリケーションをダウンロードできないことがあります。その場合はHTTPで運用するか、または、認証局が発行した正式な
証明書を利用してください。
・ (システム管理者) Androidの標準ブラウザを使用しており、ネットワーク接続にプロキシを使用している場合、アプリケーションを正
常にダウンロードできないことがあります。その場合は、プロキシを不使用でIMAPSサーバに接続するように端末のネットワーク設
定を変更してください。
・ (システム管理者) Android版Chromeブラウザでアプリケーションをダウンロードする場合、セキュリティ上の理由で確認メッセージ
が表示されます。ファイル名を確認し、問題なければ[OK]ボタンをタップすれば、アプリケーションをダウンロードできます。
3.3.9 デバッグ
詳細は、"Android Developers"のドキュメントを参照してください。
3.3.10 配布
開発したアプリケーションを配布する方法は、"運用ガイド"の"IMAPSクライアントアプリケーションの配布"を参照してください。
3.4 iOSアプリケーションの開発
IMAPSはネイティブアプリケーション向けに、認証、SLS、ログ送信、プッシュ、 双方向通信サービスのAPIを提供しています。認証の
APIを使用する場合は、SLSのAPIについての準備も行う必要があります。
プッシュのAPIを使用する場合は第6章 プッシュ通知機能を参照してください。
Cordovaフレームワークは、以下に配置されています。Cordova.frameworkを開発マシンにコピーし、プロジェクトに追加します。
<DVD-ROMドライブ>\development\ios\frameworks\Cordova.framework
<DVD-ROMマウントディレクトリ>/development/ios/frameworks/Cordova.framework
クライアント設定ファイルの値を調整することで、アプリケーションの動作をカスタマイズできます。詳細は、付録C クライアント設定ファ
イルを参照してください。
詳細は、プラットフォームのドキュメントを参照してください。
3.4.1 開発環境の準備
開発に必要な開発マシンと開発ツールを用意します。
開発に必要な開発マシンのOSと開発ツールは以下のとおりです。
- 56 -
開発マシン
Mac OS X 10.10.4以降
開発ツール
Xcode 7.x
3.4.2 ネイティブアプリケーションの開発をする(Objective-C)
参考
アプリケーション開発者用のAPIリファレンスは以下に格納されています。必要に応じて参照してください。
<DVD-ROMドライブ>\apiref\index.html
<DVD-ROMマウントディレクトリ>/apiref/index.html
1. 以下に格納されているネイティブアプリケーションの部品のフレームワークを、開発端末上に取得します。
<DVD-ROMドライブ>\development\ios\frameworks\IMAPSCore.framework
<DVD-ROMドライブ>\development\ios\frameworks\IMAPSAppManager.framework
<DVD-ROMドライブ>\development\ios\frameworks\ZipArchive.framework
<DVD-ROMマウントディレクトリ>/development/ios/frameworks/IMAPSCore.framework
<DVD-ROMマウントディレクトリ>/development/ios/frameworks/IMAPSAppManager.framework
<DVD-ROMマウントディレクトリ>/development/ios/frameworks/ZipArchive.framework
2. Mac OS XのXcodeでプロジェクトを作成します。
3. 作成したプロジェクトに、取得したフレームワーク(IMAPSCore.framework、IMAPSAppManager.framework、
ZipArchive.framework)をインポートします。
4. クライアント設定ファイル(imaps.plist)を作成したプロジェクトに追加します。
クライアント設定ファイルは以下に配置されています。
<DVD-ROMドライブ>\development\conf\imaps\imaps.plist
<DVD-ROMマウントディレクトリ>/development/conf/imaps/imaps.plist
詳細は、付録C クライアント設定ファイルを参照してください。
5. 次のフレームワークおよびライブラリを、プロジェクトに追加します。
No. 名称 分類
1 AddressBook.framework システム提供フレームワーク
2 AddressBookUI.framework システム提供フレームワーク
3 AssetsLibrary.framework システム提供フレームワーク
4 AudioToolbox.framework システム提供フレームワーク
5 AVFoundation.framework システム提供フレームワーク
6 Cordova.framework IMAPS提供フレームワーク
7 CoreData.framework システム提供フレームワーク
8 CoreLocation.framework システム提供フレームワーク
9 CoreMedia.framework システム提供フレームワーク
10 CoreMotion.framework システム提供フレームワーク
11 ImageIO.framework システム提供フレームワーク
- 57 -
No. 名称 分類
12 IMAPSAppManager.framework IMAPS提供フレームワーク
13 IMAPSCore.framework IMAPS提供フレームワーク
14 MobileCoreServices.framework システム提供フレームワーク
15 Security.framework システム提供フレームワーク
16 SystemConfiguration.framework システム提供フレームワーク
17 JavaScriptCore.framework システム提供フレームワーク
18 libc++.tbd システムライブラリ
19 libxml2.tbd システムライブラリ
20 libz.tbd システムライブラリ
21 libsqlite3.tbd システムライブラリ
22 ZipArchive.framework IMAPS提供フレームワーク
6. 以下に格納されているデータベース定義を、開発端末上に取得し、プロジェクトに取り込みます。
<DVD-ROMドライブ>\development\ios\frameworks\Model.xcdatamodel
<DVD-ROMマウントディレクトリ>/development/ios/frameworks/Model.xcdatamodel
注意
XcodeでApplication Files内に資産を入れる場合、ファイル追加のダイアログで[Create groups]を選択してください。
IMAPSCore.frameworkを利用する場合、Xcodeの「Build Settings」内にある「Other Linker Flags」に「-ObjC」を指定してください。
3.4.3 ネイティブアプリケーションの開発をする(Swift)
参考
アプリケーション開発者用のAPIリファレンスは以下に格納されています。必要に応じて参照してください。
<DVD-ROMドライブ>\apiref\index.html
<DVD-ROMマウントディレクトリ>/apiref/index.html
Xcodeでプロジェクトを作成し、IMAPSが提供するIMAPSCore.frameworkフレームワークをインポート後、Swiftで呼び出す手順を説
明します。
1. 以下に格納されているネイティブアプリケーションの部品のフレームワークを、開発端末上に取得します。
<DVD-ROMドライブ>\development\ios\frameworks\IMAPSCore.framework
<DVD-ROMドライブ>\development\ios\frameworks\IMAPSAppManager.framework
<DVD-ROMドライブ>\development\ios\frameworks\ZipArchive.framework
<DVD-ROMマウントディレクトリ>/development/ios/frameworks/IMAPSCore.framework
<DVD-ROMマウントディレクトリ>/development/ios/frameworks/IMAPSAppManager.framework
<DVD-ROMマウントディレクトリ>/development/ios/frameworks/ZipArchive.framework
2. Mac OS XのXcodeでプロジェクトを作成します。
3. 作成したプロジェクトに、取得したフレームワーク(IMAPSCore.framework、IMAPSAppManager.framework、
ZipArchive.framework)をインポートします。
- 58 -
4. クライアント設定ファイル(imaps.plist)を作成したプロジェクトに追加します。
クライアント設定ファイルは以下に配置されています。
<DVD-ROMドライブ>\development\conf\imaps\imaps.plist
<DVD-ROMマウントディレクトリ>/development/conf/imaps/imaps.plist
詳細は、付録C クライアント設定ファイルを参照してください。
5. 次のフレームワークおよびライブラリを、プロジェクトに追加します。
No. 名称 分類
1 AddressBook.framework システム提供フレームワーク
2 AddressBookUI.framework システム提供フレームワーク
3 AssetsLibrary.framework システム提供フレームワーク
4 AudioToolbox.framework システム提供フレームワーク
5 AVFoundation.framework システム提供フレームワーク
6 Cordova.framework IMAPS提供フレームワーク
7 CoreData.framework システム提供フレームワーク
8 CoreLocation.framework システム提供フレームワーク
9 CoreMedia.framework システム提供フレームワーク
10 CoreMotion.framework システム提供フレームワーク
11 ImageIO.framework システム提供フレームワーク
12 IMAPSAppManager.framework IMAPS提供フレームワーク
13 IMAPSCore.framework IMAPS提供フレームワーク
14 MobileCoreServices.framework システム提供フレームワーク
15 Security.framework システム提供フレームワーク
16 SystemConfiguration.framework システム提供フレームワーク
17 JavaScriptCore.framework システム提供フレームワーク
18 libc++.tbd システムライブラリ
19 libxml2.tbd システムライブラリ
20 libz.tbd システムライブラリ
21 libsqlite3.tbd システムライブラリ
22 ZipArchive.framework IMAPS提供フレームワーク
6. 以下に格納されているデータベース定義を、開発端末上に取得し、プロジェクトに取り込みます。
<DVD-ROMドライブ>\development\ios\frameworks\Model.xcdatamodel
<DVD-ROMマウントディレクトリ>/development/ios/frameworks/Model.xcdatamodel
注意
XcodeでApplication Files内に資産を入れる場合、ファイル追加のダイアログで[Create groups]を選択してください。
IMAPSCore.frameworkを利用する場合、Xcodeの「Build Settings」内にある「Other Linker Flags」に「-ObjC」を指定してください。
7. IMAPSが提供しているAPIをインポートするため、Bridging-Header.hを作成します。
ファイル名は、[プロジェクト名-Bridging-Header.h]とします。
[プロジェクト名]部分は、任意で変更できます。
- 59 -
8. [プロジェクト名-Bridging-Header.h]に必要なライブラリを記載します。
例
#import <IMAPSCore/IMAUserManager.h>
9. Bridging-Header.hを読み込みます。
[Build Settings] > [Swift compiler - Code Generation] > [Objective-C Gridging Header]に、作成した Bridging-Header.hを指定
します。
例
$(SRCROOT)/プロジェクト名/プロジェクト名-Bridging-Header.h
3.4.4 認証
本節では、認証APIの利用方法について説明します。
認証のAPIでは、オフライン認証を行うため、オンライン認証が成功すると認証情報をSLSに保存します。そのため、認証APIを使用す
る場合は、SLSのAPIについての準備も行う必要があります。
3.4.4.1 認証APIIMAPSの認証APIは以下の機能を提供しています。
・ ログイン
・ ログアウト
・ 認証情報の付与
・ 管理情報の設定
・ パスワード変更
・ ユーザー情報の登録、取得、削除
・ SLS内のデータの引き継ぎ
・ タイムアウト検知
3.4.4.2 ログイン
アプリケーションは、IMAPSが提供している認証機構を呼び出して、利用しているユーザーの正当性を検証できます。ログインには以
下の種類があります。
・ IMAPSサーバが提供している認証機能をネットワーク経由で呼び出し、サーバ側で認証するオンライン認証
・ クライアント内部で保持しているクレデンシャルを用いて認証する、オフライン認証
使用例
オンライン認証は、IMALoginManagerのloginOnlineメソッド、オフライン認証はloginOfflineメソッドを呼び出します。実行結果は
IMALoginDelegateで通知されます。
- (void)func {
IMALoginManager *loginManager = [[IMALoginManager alloc] init:self];
[loginManager loginOnline:@"https:// サーバアドレス:ポート/"userId:@"userid" passwd:@"password"];
}
- (void)func {
IMALoginManager *loginManager = [[IMALoginManager alloc] init:self];
[loginManager loginOffline:@"userid" passwd:@"password"];
}
- 60 -
ポイント
・ オンライン認証では、クライアント設定ファイルのimapsServerAddressで接続先のサーバを設定することも可能です。詳細は、開発
者用マニュアル、付録C クライアント設定ファイルを参照してください。
3.4.4.3 ログアウト
アプリケーションは、ログアウトを呼び出す事でユーザー情報を初期化できます。ログアウトメソッドは内部的にはIMAPSサーバの認証
機構を呼び出さないため、ネットワークが利用できない状態でも呼び出せます。
使用例
- (void)func {
IMALoginManager *loginManager = [[IMALoginManager alloc] init];
NSError *anError = nil;
BOOL result = [loginManager logout:&anError];
if(result == NO) {
// それぞれのエラーの実装.
}
}
3.4.4.4 認証情報の付与
ログイン後、クライアントアプリケーションがIMAPSサーバ以外のサーバにアクセスする場合、認証情報を受け渡せます。この機能は
IMAPSサーバの認証機構と業務サーバとの間でSSOのような振る舞いをおこないたい場合に便利です。SSOのような振る舞いとは以
下のような動作を指します。
・ IMAPSサーバで認証していない場合、クライアントからのアクセスはエラーとなる。
・ IMAPSサーバで認証済の場合、クライアントからのアクセスは成功する
このような振る舞いを実現するためには、以下のようにします。
・ クライアントからアクセスする業務サーバ上のサーバアプリケーションに、認証モジュールを組み込む
・ クライアントアプリケーションはIMAPSで認証し、業務サーバにアクセスする際には認証情報を付与してアクセスする
使用例
- (void)func {
NSURL *url = [NSURL URLWithString:接続先URL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
IMALoginManager *loginManager = [[IMALoginManager alloc] init];
NSError *anError = nil;
BOOL result = [loginManager setRequestAuth:request error:&anError];
if(result == NO) {
// それぞれのエラーの実装.
}
[NSURLConnection connectionWithRequest:request delegate:self];
[loginManager setRequestAuth:request error:&anError];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
IMALoginManager *loginManager = [[IMALoginManager alloc] init];
NSError *anError = nil;
BOOL result = [loginManager checkServerTimeout:response error:&error];
if(result == NO) {
// それぞれのエラーの実装.
} else {
result = [loginManager saveResponseAuth:response error:&error];
if(result == NO) {
// それぞれのエラーの実装.
- 61 -
}
}
}
3.4.4.5 管理情報の設定
管理情報とは、IMAPSサーバがクライアントからアクセスされた場合に、APIからのアクセスである事を確認するための情報です。管理
情報はシステム管理者によってIMAPSサーバに設定され、ユーザーの認証情報とは別に管理されます。
IMAPSサーバにアクセスするアプリケーションは、必ずアプリケーション内で管理情報を設定してください。具体的にどのような管理情
報を設定するかは、システム管理者に問い合わせてください。
管理情報は、アプリケーション起動時に一度設定します。IMAPSサーバにアクセスするAPIを呼び出すたびに実行する必要はありま
せん。
使用例
- (void)func {
IMALoginManager *loginManager = [[IMALoginManager alloc] init];
NSError *anError = nil;
BOOL result = [loginManager setManageInfo:@"adminid" passwd:@"adminpass" error:&anError];
if(result == NO) {
// それぞれのエラーの実装.
}
}
注意
異なるプロセスから管理情報を設定した場合は、IMAPSサーバにアクセスできません。
3.4.4.6 パスワード変更
パスワードの変更ができます。
使用例
- (void)func {
IMAPasswdManager *passwdManager = [[IMAPasswdManager alloc] init:self];
[passwdManager changePasswd:@"https:// サーバアドレス:ポート/"oldPassword:@"oldpwd" newPassword:@"newpwd"];
}
ポイント
クライアント設定ファイルのimapsServerAddressでも接続先のサーバを設定できます。詳細は、開発者用マニュアル、付録C クライアント設定ファイルを参照してください。
3.4.4.7 ユーザー情報の登録、取得、削除
クライアントアプリケーションがIMAPS以外の既存の業務システムを利用して認証している場合、そのままではオフライン認証や認証モ
ードでのSLSを利用できません。
このような独自認証を行った場合、ユーザーの情報を登録すれば、これらの機能を利用できます。
使用例
- (void)func {
IMALoginManager *loginManager = [[IMALoginManager alloc] init];
NSError *anError = nil;
BOOL result = [loginManager setLoginUserInfo:@"userid" passwd:@"password" userName:@"fujitsu tarou" roleNames:
[NSArray arrayWithObjects:@"administrator", @"guest", nil] error:&anError];
if(result == NO) {
// それぞれのエラーの実装.
- 62 -
}
}
設定したユーザー情報は、IMAUserManagerを利用する事で取得する事ができます。
IMAUserManager *userManager = [IMAUserManager sharedInstance];
NSString *userId = [userManager getUserId]; // ユーザーIDを取得する場合s
登録したユーザー情報とSLSのデータはIMALoginManagerのdeleteUserInfoを利用して削除できます。
- (void)func {
IMALoginManager *loginManager = [[IMALoginManager alloc] init];
NSError *anError = nil;
BOOL result = [loginManager deleteUserInfo:userId error:&anError];
if(result == NO) {
// それぞれのエラーの実装.
}
}
3.4.4.8 SLS内のデータの引き継ぎ
IMAPSでは、クライアント内にデータをセキュアに保存するための仕組みとして、SLSを提供しています。SLSを認証モードで利用して
いる場合、格納データはパスワードをキーにして保護されています。
そのためパスワードが変更された場合、格納された暗号化データを引き継ぐ(暗号化データを新しいパスワードで再暗号化する)必要
があります。
使用例
IMALoginManager *loginManager;
- (void)func1
{
loginManager = [[IMALoginManager alloc] init:self];
[loginManager loginOnline:@"https:// サーバアドレス:ポート/"userId:@"userid"
passwd:@"password"];
// この後、ログイン結果は、IMALoginDelegateプロトコルのdidLoginFinishedメソッドで通知されます。
// IMALoginManagerのinitで自分自身をdelegateとして指定しています。
// 詳細はIMALoginManagerクラスを参照してください。
}
- (void) didLoginFinished:(NSError *)anError
{
NSString *message = nil;
if(anError == nil) {
message = @"LOGIN DONE";
} else {
if([anError.domain isEqualToString:IMAAuthErrorDomain]) {
switch (anError.code) {
case AuthLoginFailed:
message = @"LOGIN FAILED";
break;
case AuthAlreadyLogin:
message = @"ALREADY LOGIN";
break;
// それぞれのエラーの実装.
default:
message = @"SYSTEM ERROR";
break;
}
} else if([anError.domain isEqualToString:IMASlsErrorDomain]) {
switch (anError.code) {
case SlsOfflinePasswordError:
message = @"OFFLINE LOGIN FAILED";
- 63 -
break;
case SlsPasswordError:
{
message = @"NEED TAKES OVER";
// SLSデータの引き継ぎが必要.
// データを引き継ぐ場合は、旧パスワードを使用してtransDataを呼び出します.
// データを削除する場合は、deleteDataを呼び出します.
break;
}
// それぞれのエラーの実装.
default:
message = @"SYSTEM ERROR";
break;
}
} else {
message = @"SYSTEM ERROR";
}
NSLog(message);
}
}
// ダイアログで、データ引き継ぎをおこなうかをユーザーに問い合わせる場合
- (void)func2
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title"
message:@"データ引き継ぎか削除かの問い合わせ"
delegate:self
cancelButtonTitle:nil
otherButtonTitles: @"削除", @"引き継ぎ", nil];
[alert show];
}
// ダイアログでデータ引き継ぎか削除が選択された時の処理の切り分けを行う
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
NSError *anError = nil;
BOOL result = NO;
if (buttonIndex == 0) {
// 削除が選択された場合は、deleteDataを呼び出します。
result = [loginManager deleteData:&anError];
if (!result) {
// それぞれのエラーの実装.
}
} else if (buttonIndex == 1) {
// データ引き継ぎが選択された場合は、入力された旧パスワードを引数に、transDataを呼び出します。
// UITextFieldから旧パスワードを取得
NSString *oldPassword = _oldPassword.text;
result = [loginManager transData:oldPassword error:&anError];
if(!result) {
// それぞれのエラーの実装.
}
}
}
3.4.4.9 タイムアウト検知
クライアントアプリケーションのアイドルタイムアウト時間を検知します。以下の機能があります。
・ タイムアウト監視開始
・ タイムアウト検知
- 64 -
使用例
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[IMATimeoutManager sharedInstance] chkTimeoutStart];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
if ([[IMATimeoutManager sharedInstance] isTimeout] == true) {
// タイムアウト発生時の実装.
}
}
3.4.5 SLS本節では、SLSのAPIの利用方法について説明します。
インストール先の端末がAndroid6.0以上、かつ開発ツールでAPI Levelに23以上を設定して開発するときは、パーミッションのAPIにつ
いての準備も行う必要があります。
3.4.5.1 SLSのAPIネイティブアプリケーションからSLSを利用する場合、認証モードと認証レスモードがあります。認証モードで利用する場合、SLSのAPIを利用する前に、認証APIを利用して認証します。認証モードと認証レスモードでは使用するSLSのAPIが異なります。認証モードでは
ユーザー毎に異なる暗号化キーを利用してデータを暗号化するため、よりセキュリティ強度が高まります。
SLSのAPIが提供している機能には、以下のようなものがあります。
・ データの格納および取得
・ データの削除、データ数およびキーの取得
3.4.5.2 データの格納および取得
SLSにデータを格納、および取得できます。格納されたデータは、キーおよび値ともに暗号化されて格納され、取得時にはデータは復
号化されます。格納されるデータサイズは2GBを上限に、カスタマイズできます。詳細は、C.5.10 sls.maxDatabaseSizeを参照してくださ
い。以下は、認証モードの例です。
使用例
- (void)func
{
NSError *anError = nil;
IMALoginInfo *loginInfo = [[IMALoginData sharedInstance] loginInfo];
if (loginInfo != nil) {
if (![[loginInfo userId] isEqualToString:@""]) {
NSData *pwdByte = [[loginInfo pwd] dataUsingEncoding:NSUTF8StringEncoding];
IMADataManagerDirect *manager = [[IMADataManagerDirect alloc] init:[loginInfo userId]
pwdByte:pwdByte
error:&anError];
BOOL ret = [manager put:@"key" value:@"value" error:&anError];
if (ret == YES) {
// 成功
} else {
// 失敗
}
NSString *value = [manager get:@"key" error:&anError];
if (value != nil) {
// 成功
} else {
// 失敗
}
}
- 65 -
}
}
3.4.5.3 データの削除、データ数およびキーの取得
SLSのAPIでは、格納されたデータの削除やキーを取得できます。以下は認証レスモードの例です。
使用例
- (void)func
{
NSError *anError = nil;
IMADataManagerModeLessDirect *manager = [[IMADataManagerModeLessDirect alloc] init];
NSNumber *count = [manager getListLength:&anError];
if (count == nil) {
// それぞれのエラーの実装.
}
int intCount = [count intValue];
for(int i = intCount-1; i >= 0; i--) {
NSString *key = [manager getKeyFromIndex:i error:&anError];
if (key == nil) {
// それぞれのエラーの実装.
}
BOOL ret = [manager remove:key error:&anError];
if (ret == NO) {
// それぞれのエラーの実装
}
}
}
3.4.6 ログ収集
本節では、ログ収集APIの利用方法について説明します。
3.4.6.1 ログ収集APIログ収集APIが提供している機能には、以下があります。
・ ログ出力とサーバへの送信
・ ログ設定の変更
3.4.6.2 ログ出力とサーバへの送信
以下にログ出力、ログ送信する実施例を示します。
実施例
ログ出力の例
[IMALogger i:@"abcde"];
[IMALogger w:@"あいうえお"];
[IMALogger e:@"abcde"];
[IMALogger d:@"あいうえお"];
ログ送信の例
#import <IMAPSCore/IMALoginManager.h>
#import <IMAPSCore/IMALogger.h>
- (void) sendFunc
{
- 66 -
NSString *url = @"https://サーバアドレス:ポート";
NSString *userId = @"user1";
NSString *passwd = @"pass11";
// 認証処理
IMALoginManager *loginManager = [[IMALoginManager alloc] init:self];
[loginManager loginOnline:url userId:userId passwd:passwd];
}
- (void) didLoginFinished:(NSError *)anError
{
if (anError == nil) {
// ログ送信処理
[IMALogger send:@"user1"];
}
}
注意
・ ログ送信先は、クライアント設定ファイルのimapsServerAddressで設定します。詳細は、付録C クライアント設定ファイルを参照して
ください。
・ ログAPIのsendメソッドを使用するには、以下のどちらかの認証情報の設定が必要です。
1. loginOnlineによる認証設定
認証機能のloginOnlineメソッドやloginAutoメソッドなどで認証情報を設定してからsendメソッドを実行してください。
2. setManageInfoによる認証設定
ユーザー情報を持たないアプリケーションでsendメソッドを実行する場合の認証方法です。あらかじめIMAPSサーバの管理
コマンドでアプリケーション管理者を作成し、認証機能のsetManageInfoメソッドで管理者情報を設定してからsendメソッドを実
行してください。アプリケーション管理者の作成方法は、"運用ガイド"の"コマンドリファレンス"を参照してください。
3.4.6.3 ログ設定の変更
以下にログ設定の変更を行う実施例を示します。
実施例
ログ設定の例
NSError *anError = nil;
BOOL ret = NO;
ret = [IMALogger setLevel:LEVEL_DEBUG error:&anError];
if(ret){
[IMALogger getLevel]; // LEVEL_DEBUG
} else {
if (anError.code == IllegalArgumentError) {
// 指定した引数が間違っている場合
}
}
ret = [IMALogger setMaxFileSize:20 error:&anError];
if(ret){
[IMALogger getMaxFileSize]; // 20
} else {
if (anError.code == IllegalArgumentError) {
// 指定した引数が間違っている場合
}
}
ret = [IMALogger setRotateCount:5 error:&anError];
if(ret){
[IMALogger getRotateCount]; // 5
- 67 -
} else {
if (anError.code == IllegalArgumentError) {
// 指定した引数が間違っている場合
}
}
参考
ログAPIの設定はクライアント設定ファイルよりも優先されます。変更した内容は、アプリの再起動や更新によって失われません。
3.4.7 利用時間制御
本節では、利用時間制御APIの利用方法について説明します。
3.4.7.1 利用時間制御API利用時間制御APIが提供している機能には、以下があります。
・ 利用時間の制御
3.4.7.2 利用時間の制御
アプリケーションの利用可能な時間を制御します。
利用時間の制御を開始するにはAppTimeManagerのinitメソッドを使用します。 利用時間外であることはIMAAppTimeDelegateに通知
されます。
使用例
以下の場合に、それぞれ別の処理をする使用例を示しています。
・ 利用時間の制御の開始処理で利用時間外であった場合
・ 利用時間の制御の開始処理後に利用時間外となった場合
・ 利用時間の制御の開始処理で利用不可能な日であった場合
・ 利用時間の制御の開始処理後に利用不可能な日となった場合
- (void)func {
self.manager = [IMAAppTimeManager sharedInstance];
[manager init:self];
}
-(void)executeAtInvalidTime:(NSInteger)result
{
BOOL isStart = [_manager isStarted];
if (isStart) {
switch (result) {
case OutOfTime:
// 開始処理後に利用時間外となった場合の処理
break;
case OutOfDay:
// 開始処理後に利用不可能な日となった場合の処理
break;
}
}else{
switch (result) {
case OutOfTime:
// 開始処理で利用時間外であった場合の処理
break;
case OutOfDay:
// 開始処理で利用不可能な日であった場合の処理
- 68 -
break;
}
}
}
-(void)resultCallback:(NSInteger)result error:(NSError *)error
{
switch (result) {
case InitTimerError:
// 開始処理で例外が発生した場合の処理
break;
case InitTimerSuccess:
// 開始処理が成功した場合の処理
break;
}
}
利用時間の情報を取得します。利用時間の制御の開始処理後に使用します。
IMAAppTimeManager *manager = [IMAAppTimeManager sharedInstance];
NSError *error = nil;
NSString *startTime = [manager getStartTime:&error]; // 利用時間の開始時間を取得する場合
if (error) {
// 例外処理
}
利用時間の制御を終了します。利用時間制御の開始処理後に利用時間外になる前に、終了する場合に使用します。
IMAAppTimeManager *manager = [IMAAppTimeManager sharedInstance];
[manager destory];
注意
・ クライアント設定ファイルのappmgr.strictPolicyModeの値がfalseの場合は、端末がオフラインでポリシー設定ファイルが更新されな
い場合や、 クライアントの時計が間違っている場合は、設定した時間外にアプリケーションが利用可能になる場合があります。 これ
を防止するためには、appmgr.strictPolicyModeの値をtrueにします。詳細は、付録C クライアント設定ファイルを参照してください。
3.4.8 パッケージング
プログラムとして作成したクラスファイルをパッケージ化します。各プラットフォームのIDEでパッケージングを実施します。
iOSの場合、パッケージングするために証明書のインストールおよびプロビジョニングファイルが必要です。
詳細は、"Apple Developer"のドキュメントを参照してください。
IMAPSサーバでアプリケーションを配布する場合
IMAPSサーバでアプリケーションを配布する場合は、パッケージ化したファイルを含めた以下のようなzip形式のアーカイブファイルを
作成します。
- 69 -
それぞれのファイルについて説明します。以下のファイルをzipファイルのルートフォルダーに含めます。
・ アプリケーション本体
パッケージ化したアプリケーション本体です。拡張子は、ipaです。
アプリケーションのバージョンと識別IDは255文字以降は無視されます。
バージョンはアプリケーションのバージョンです。
パッケージは、アプリケーションを特定するための値です。以下の値を参照します。
Info.plistのCFBundleIdentifier
・ 説明ファイル
アプリ詳細画面でアプリケーションの説明欄に表示する文章を定義するファイルです。ファイルはUTF-8で記載します。
日本語の説明はdescription_ja.txt、英語の説明はdescription.txtに記載します。
説明文は、0文字以上4000文字以下の範囲で記載できます。
省略時は空文字になります。
・ アイコン
IMAPSサーバによる配布画面上で利用されるアイコンです。アイコンの推奨サイズは96x96ピクセル以上で縦横の幅が同じ画像で
す。ファイルはpng形式でファイル名はicon.pngです。
省略時はデフォルトのアイコンになります。
・ そのほか
アプリケーションをインストールするための依存ファイルなどです
注意
IMAPSサーバによる配布をするには、プラットフォームごとに以下の条件があります。丸括弧内は、主に対応が必要となる人物です。
ここで説明されている内容は、各ベンダーによって変更される可能性があります。 新の情報は、それぞれの公開情報を参照してくだ
さい。
・ (アプリケーション開発者) Apple社とのiOS Developer Enterprise Program契約が必要です。アプリケーション作成時に、この契約
によって入手できる適切なプロビジョニングプロファイルを使用してください。
・ (システム管理者) iOS7.1から、SSL(HTTPS)が前提となります。IMAPSサーバをSSLで運用してください。
- 70 -
3.4.9 デバッグ
詳細は、"Apple Developer"のドキュメントを参照してください。
3.4.10 配布
開発したアプリケーションを配布する方法は、"運用ガイド"の"IMAPSクライアントアプリケーションの配布"を参照してください。
3.5 Windowsアプリケーションの開発
IMAPSはネイティブアプリケーション向けに、認証、SLS、ログ送信、双方向通信サービスのAPIを提供しています。認証のAPIを使用
する場合は、SLSのAPIについての準備も行う必要があります。
プッシュのAPIを使用する場合は第6章 プッシュ通知機能を参照してください
クライアント設定ファイルの値を調整することで、アプリケーションの動作をカスタマイズできます。詳細は、付録C クライアント設定ファ
イルを参照してください。
詳細はドキュメントを参照してください。
3.5.1 開発環境の準備
開発に必要な開発マシンと開発ツールを用意します。
開発に必要な開発マシンのOSと開発ツールは以下のとおりです。
開発マシン
Windows 8.1(64 bit)以降(Windows RTは除く)
開発ツール
・ Visual Studio 2013以降(Windows 8.1 ストアアプリを開発する場合)
・ Visual Studio 2015以降(Windows 10 UWPアプリを開発する場合)
開発するWindowsアプリをビルドするために必要なライブラリを選択して、Visual Studioをインストールしてください。
3.5.2 ネイティブアプリケーションの開発をする(Visual Studio)
参考
アプリケーション開発者用のAPIリファレンスは以下に格納されています。必要に応じて参照してください。
<DVD-ROMドライブ>\apiref\index.html
<DVD-ROMマウントディレクトリ>/apiref/index.html
1. ネイティブアプリケーションの開発環境を準備後、Visual StudioでWindows用のプロジェクトを作成し、次のライブラリをアプリケー
ションプロジェクトの参照設定に追加します。
<DVD-ROMドライブ>\development\windows\components\ImapsNativeLibrary.dll
<DVD-ROMドライブ>\development\windows\components\ImapsAppManagerNativeLibrary.dll
<DVD-ROMマウントディレクトリ>/development/windows/components/ImapsNativeLibrary.dll
<DVD-ROMマウントディレクトリ>/development/windows/components/ImapsAppManagerNativeLibrary.dll
2. 開発に必要なその他のライブラリ、ファイルを準備します。
・ SQLite
Visual StudioにSQLiteがインストールされていない場合は、以下の手順でインストールしてください。
- Windows 8.1 ストアアプリを開発する場合
- 71 -
SQLite for Windows Runtime(Windows 8.1)をインストールします。
[ツール] > [拡張機能と更新プログラム]から[SQLite]を検索してインストールしてください。SQLiteのインストール後、参照
設定の[Windwos 8.1] > [拡張]から[SQLite for Windows Runtime(Windows 8.1)]を選択し、追加してください。
- Windows 10 UWPアプリを開発する場合
SQLite for Universal Windows Platformをインストールします。
[ツール] > [拡張機能と更新プログラム]から[SQLite]を検索してインストールしてください。SQLiteのインストール後、参照
設定の[Universal Windows] > [拡張]から[SQLite for Universal Windows Platform]を選択し、追加してください。
SQLiteのインストール/参照の設定手順詳細は、Windows デベロッパーセンターのドキュメントを参照してください。
・ クライアント設定ファイル(imaps.xml)付録C クライアント設定ファイルを参照してください。
3. サーバとSSL通信を行う場合は、アプリケーションと一緒に証明書をインストールできます。
1. 接続先サーバのサーバ証明書を入手します。
2. 取得したサーバ証明書をプロジェクト内に格納し、Visual Studioでファイルを選択して、[プロジェクト]メニューから[プロジェク
トに含める]を選択します。
3. 証明書の拡張機能を使って選択条件を設定します。package.appxmanifestを編集するか、Visual Studioのマニフェスト デザ
イナーを利用して、証明書の宣言を行います。
証明書の設定手順の詳細は、Windows デベロッパーセンターのドキュメントを参照してください。
4. 利用するAPIによって、必要な機能の設定をpackage.appxmanifestに設定します。ネットワーク機能を利用するために、以下に示
す機能を適切な組み合わせで設定します。
■ Visual Studioのマニフェスト デザイナーを使用して設定する場合
認証
インターネット(クライアント)
インターネット(クライアントとサーバー)
プライベートネットワーク(クライアントとサーバー)
ログ収集
インターネット(クライアント)
インターネット(クライアントとサーバー)
プライベートネットワーク(クライアントとサーバー)
利用時間制御
インターネット(クライアント)
インターネット(クライアントとサーバー)
プライベートネットワーク(クライアントとサーバー)
■ package.appxmanifestを直接編集する場合
認証
<Capability Name="internetClient" />
<Capability Name="internetClientServer" />
<Capability Name="privateNetworkClientServer" />
ログ収集
<Capability Name="internetClient" />
<Capability Name="internetClientServer" />
- 72 -
<Capability Name="privateNetworkClientServer" />
利用時間制御
<Capability Name="internetClient" />
<Capability Name="internetClientServer" />
<Capability Name="privateNetworkClientServer" />
注意
・ 作成したプロジェクトは「Any CPU」でのビルドはできません。対象のプラットフォーム(x86/x64/ARM)を指定してビルドしてく
ださい。
3.5.3 認証
本節では、認証APIの利用方法について説明します。
認証のAPIでは、オフライン認証を行うため、オンライン認証が成功すると認証情報をSLSに保存します。そのため、認証APIを使用す
る場合は、SLSのAPIについての準備も行う必要があります。
3.5.3.1 認証APIIMAPSの認証APIは以下の機能を提供しています。
・ ログイン
・ ログアウト
・ 認証情報の付与
・ 管理情報の設定
・ パスワード変更
・ ユーザー情報の登録、取得、削除
・ SLS内のデータの引き継ぎ
・ タイムアウト検知
3.5.3.2 ログイン
アプリケーションは、IMAPSが提供している認証機構を呼び出して、利用しているユーザーの正当性を検証できます。ログインには以
下の種類があります。
・ IMAPSサーバが提供している認証機能をネットワーク経由で呼び出し、サーバ側で認証するオンライン認証
・ クライアント内部で保持しているクレデンシャルを用いて認証する、オフライン認証
使用例
オンライン認証を行うためには、Com.Fujitsu.Imaps.Plugin.Auth.LoginManager#loginOnlineメソッド、オフライン認証を行うために
は、Com.Fujitsu.Imaps.Plugin.Auth.LoginManager#loginOfflineメソッドを呼び出します。
private async void loginFunc() {
string url = "https://サーバアドレス:ポート";
string userId = "user1";
string passwd = "pass11";
try
{
LoginManager lm = new LoginManager();
await lm.loginOnline(url, userId, passwd);
}
catch (例外キャッチ)
- 73 -
{
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
private void loginFunc() {
string userId = "user1";
string passwd = "pass11";
try
{
LoginManager lm = new LoginManager();
lm.loginOffline(userId, passwd);
}
catch (例外キャッチ)
{
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
ポイント
・ オンライン認証では、クライアント設定ファイルのimapsServerAddressで接続先のサーバを設定することも可能です。詳細は、開発
者用マニュアル、付録C クライアント設定ファイルを参照してください。
3.5.3.3 ログアウト
アプリケーションは、ログアウトを呼び出す事でユーザー情報を初期化できます。ログアウトメソッドは内部的にはIMAPSサーバの認証
機構を呼び出さないため、ネットワークが利用できない状態でも呼び出せます。
使用例
private void logoutFunc() {
try
{
LoginManager lm = new LoginManager();
lm.logout();
}
catch (例外キャッチ)
{
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
3.5.3.4 認証情報の付与
ログイン後、クライアントアプリケーションがIMAPSサーバ以外のサーバにアクセスする場合、認証情報を受け渡せます。この機能は
IMAPSサーバの認証機構と業務サーバとの間でSSOのような振る舞いをおこないたい場合に便利です。SSOのような振る舞いとは以
下のような動作を指します。
・ IMAPSサーバで認証していない場合、クライアントからのアクセスはエラーとなる。
・ IMAPSサーバで認証済の場合、クライアントからのアクセスは成功する
このような振る舞いを実現するためには、以下のようにします。
・ クライアントからアクセスする業務サーバ上のサーバアプリケーションに、認証モジュールを組み込む
・ クライアントアプリケーションはIMAPSで認証し、業務サーバにアクセスする際には認証情報を付与してアクセスする
使用例
using Windows.Web.Http;
using Windows.Web.Http.Filters;
- 74 -
・
・
private async void connectionFunc() {
string url = "https://サーバアドレス:ポート";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri(url));
try
{
LoginManager lm = new LoginManager();
lm.setRequestAuth(request);
HttpBaseProtocolFilter hbpf = new HttpBaseProtocolFilter();
hbpf.AllowUI = false; // ユーザー資格情報の入力を求めるプロンプトを表示しない.
HttpClient httpClient = new HttpClient(hbpf);
HttpResponseMessage response = await httpClient.SendRequestAsync(request);
lm.checkServerTimeout(response);
}
catch (IMAPSAuthTimeOutException e)
{
// ログアウト処理の実装を行うことを推奨します。
}
catch (例外キャッチ)
{
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
3.5.3.5 管理情報の設定
管理情報とは、IMAPSサーバがクライアントからアクセスされた場合に、APIからのアクセスである事を確認するための情報です。管理
情報はシステム管理者によってIMAPSサーバに設定され、ユーザーの認証情報とは別に管理されます。
IMAPSサーバにアクセスするアプリケーションは、必ずアプリケーション内で管理情報を設定してください。具体的にどのような管理情
報を設定するかは、システム管理者に問い合わせてください。
管理情報は、アプリケーション起動時に一度設定します。IMAPSサーバにアクセスするAPIを呼び出すたびに実行する必要はありま
せん。
使用例
LoginManager lm = new LoginManager();
lm.setManageInfo(管理ID, 管理パスワード);
注意
異なるプロセスから管理情報を設定した場合は、IMAPSサーバにアクセスできません。
3.5.3.6 パスワード変更
パスワードの変更ができます。
使用例
private async void changePwdFunc() {
string url = "https://サーバアドレス:ポート";
string oldPasswd = "oldpass";
string newPasswd = "newpass";
try
{
PasswdManager pm = new PasswdManager();
await pm.changePasswd(url, oldPasswd, newPasswd);
}
catch (例外キャッチ)
- 75 -
{
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
ポイント
クライアント設定ファイルのimapsServerAddressでも接続先のサーバを設定できます。詳細は、開発者用マニュアル、付録C クライアント設定ファイルを参照してください。
3.5.3.7 ユーザー情報の登録、取得、削除
クライアントアプリケーションがIMAPS以外の既存の業務システムを利用して認証している場合、そのままではオフライン認証や認証モ
ードでのSLSを利用できません。
このような独自認証を行った場合、ユーザーの情報を登録すれば、これらの機能を利用できます。
使用例
string userId = "user1";
string passwd = "pass11";
string userName = "name1";
string[] userRole = null;
try
{
LoginManager lm = new LoginManager();
lm.setLoginUserInfo(userId, passwd, userName, userRole);
}
catch (例外キャッチ)
{
// キャッチした例外の内容に応じて、例外処理を実装します。
}
設定したユーザー情報は、Com.Fujitsu.Imaps.Pulgin.Auth.UserManagerを利用する事で取得できます。
UserManager um = UserManager.getInstance();
string userId = um.userId; // ユーザーIDを取得する場合
登録したユーザー情報とSLSのデータは、Com.Fujitsu.Imaps.Pulgin.Auth.LoginManagerのdeleteUserInfoを利用して削除できま
す。
try
{
LoginManager lm = new LoginManager();
lm.deleteUserInfo(userId);
}
catch (例外キャッチ)
{
// キャッチした例外の内容に応じて、例外処理を実装します。
}
3.5.3.8 SLS内のデータの引き継ぎ
IMAPSでは、クライアント内にデータをセキュアに保存するための仕組みとして、SLSを提供しています。SLSを認証モードで利用して
いる場合、格納データはパスワードをキーにして保護されています。
そのためパスワードが変更された場合、格納された暗号化データを引き継ぐ(暗号化データを新しいパスワードで再暗号化する)必要
があります。
使用例
private async void loginFunc() {
string url = "https://サーバアドレス:ポート";
- 76 -
string userId = "user1";
string passwd = "pass11";
try
{
LoginManager lm = new LoginManager();
await lm.loginOnline(url, userId, passwd);
}
catch (IMAPSSlsPasswordException spe)
{
// パスワードが異なるため、データの引き継ぎができなかった場合に例外が発生します。
// データの引き継ぎをおこなうかをユーザーに問い合わせます。
}
catch (例外キャッチ)
{
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
// データを引き継ぎます
private void transFunc(string oldPasswd) {
try
{
LoginManager lm = new LoginManager();
lm.transData(oldPasswd);
}
catch (IMAPSSlsPasswordException spe)
{
// パスワードが異なるため、データの引き継ぎができなかった場合に例外が発生します。
// データの引き継ぎをおこなうかをユーザーに問い合わせます。
}
catch (例外キャッチ)
{
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
// データを削除します
private void deleteFunc() {
try
{
LoginManager lm = new LoginManager();
lm.deleteData();
}
catch (例外キャッチ)
{
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
3.5.3.9 タイムアウト検知
クライアントアプリケーションのアイドルタイムアウト時間を検知します。以下の機能があります。
・ タイムアウト監視開始
・ タイムアウト検知
使用例
private void onPause()
{
TimeoutManager.getInstance().chkTimeoutStart();
}
private void onResume()
- 77 -
{
if(TimeoutManager.getInstance().isTimeout())
{
//タイムアウト発生時の実装
}
}
3.5.4 SLS本節では、SLSのAPIの利用方法について説明します。
インストール先の端末がAndroid6.0以上、かつ開発ツールでAPI Levelに23以上を設定して開発するときは、パーミッションのAPIにつ
いての準備も行う必要があります。
3.5.4.1 SLSのAPIネイティブアプリケーションからSLSを利用する場合、認証モードと認証レスモードがあります。認証モードで利用する場合、SLSのAPIを利用する前に、認証APIを利用して認証します。認証モードと認証レスモードでは使用するSLSのAPIが異なります。認証モードでは
ユーザー毎に異なる暗号化キーを利用してデータを暗号化するため、よりセキュリティ強度が高まります。
SLSのAPIが提供している機能には、以下のようなものがあります。
・ データの格納および取得
・ データの削除、データ数およびキーの取得
3.5.4.2 データの格納および取得
SLSにデータを格納、および取得できます。格納されたデータは、キーおよび値ともに暗号化されて格納され、取得時にはデータは復
号化されます。格納されるデータサイズは2GBを上限に、カスタマイズできます。詳細は、C.5.10 sls.maxDatabaseSizeを参照してくださ
い。以下は、認証モードの例です。
使用例
LoginInfo loginInfo = LoginData.getInstance().mLoginInfo;
if (loginInfo.UserId != null) {
try
{
DataManagerDirect dm = new DataManagerDirect(loginInfo.UserId,
Encoding.UTF8.GetBytes(loginInfo.Pwd));
dm.put("キー名", "値");
}
catch (IMAPSSlsException e)
{
// 例外処理
}
catch (IMAPSSlsKeySizeOverException e)
{
// 例外処理
}
catch (IMAPSSlsDbSizeOverException e)
{
// 例外処理
}
try
{
DataManagerDirect dm = new DataManagerDirect(loginInfo.UserId,
Encoding.UTF8.GetBytes(loginInfo.Pwd));
string value = dm.get("キー名");
}
catch (IMAPSSlsException e)
{
// 例外処理
- 78 -
}
catch (IMAPSSlsKeySizeOverException e)
{
// 例外処理
}
}
3.5.4.3 データの削除、データ数およびキーの取得
SLSのAPIでは、格納されたデータの削除やキーを取得できます。以下は認証レスモードの例です。
使用例
try
{
DataManagerModeLessDirect dm = new DataManagerModeLessDirect();
int count = dm.getListLength(true);
for (int i=count-1; i >= 0; i--)
{
string key = dm.getKeyFromIndex(i);
dm.remove(key);
}
}
catch (IMAPSSlsException e)
{
// 例外処理
}
3.5.5 ログ収集
本節では、ログ収集APIの利用方法について説明します。
3.5.5.1 ログ収集APIログ収集APIが提供している機能には、以下があります。
・ ログ出力とサーバへの送信
・ ログ設定の変更
3.5.5.2 ログ出力とサーバへの送信
以下にログ出力、ログ送信する実施例を示します。
実施例
ログ出力の例
IMAPSLogger m_logger = new IMAPSLogger();
m_logger.info("abcde");
m_logger.warn("あいうえお");
m_logger.error("abcde");
m_logger.debug("あいうえお");
ログ送信の例
public async Task sendFunc()
{
string url = "https://サーバアドレス:ポート";
string userId = "user1";
string passwd = "pass11";
- 79 -
try
{
// 認証処理
LoginManager loginManager = new LoginManager();
await loginManager.loginOnline(url, userId, passwd);
// ログ送信処理
IMAPSLogger m_logger = new IMAPSLogger();
await m_logger.send(userId);
}
catch(Exception e)
{
// 例外処理
}
}
注意
・ ログ送信先は、クライアント設定ファイルのimapsServerAddressで設定します。詳細は、付録C クライアント設定ファイルを参照して
ください。
・ ログAPIのsendメソッドを使用するには、以下のどちらかの認証情報の設定が必要です。
1. loginOnlineによる認証設定
認証機能のloginOnlineメソッドやloginAutoメソッドなどで認証情報を設定してからsendメソッドを実行してください。
2. setManageInfoによる認証設定
ユーザー情報を持たないアプリケーションでsendメソッドを実行する場合の認証方法です。あらかじめIMAPSサーバの管理
コマンドでアプリケーション管理者を作成し、認証機能のsetManageInfoメソッドで管理者情報を設定してからsendメソッドを実
行してください。アプリケーション管理者の作成方法は、"運用ガイド"の"コマンドリファレンス"を参照してください。
3.5.5.3 ログ設定の変更
以下にログ設定の変更を行う実施例を示します。
実施例
ログ設定の例
IMAPSLogger log = new IMAPSLogger();
try {
log.setLevel(IMAPSLogLevel.DEBUG);
log.setMaxFileSize(20);
log.setRotateCount(5);
log.getLevel(); // IMAPSLogLevel.DEBUG
log.getMaxFileSize(); // 20
log.getRotateCount(); // 5
} catch (IMAPSClientCommonException e) {
// 設定ファイルの読み込みに失敗した場合
} catch (ArgumentException e) {
// 指定した引数が間違っている場合
}
参考
ログAPIの設定はクライアント設定ファイルよりも優先されます。変更した内容は、アプリの再起動や更新によって失われません。
3.5.6 利用時間制御
本節では、利用時間制御APIの利用方法について説明します。
- 80 -
3.5.6.1 利用時間制御API利用時間制御APIが提供している機能には、以下があります。
・ 利用時間の制御
3.5.6.2 利用時間の制御
アプリケーションの利用可能な時間を制御します。
利用時間の制御を開始するにはAppTimeManagerのInitメソッドを使用します。 利用時間外であることはAppTimeDelegateに通知され
ます。
使用例
以下の場合に、それぞれ別の処理をする使用例を示しています。
・ 利用時間の制御の開始処理で利用時間外であった場合
・ 利用時間の制御の開始処理後に利用時間外となった場合
・ 利用時間の制御の開始処理で利用不可能な日であった場合
・ 利用時間の制御の開始処理後に利用不可能な日となった場合
using Com.Fujitsu.Imaps.Plugin.AppManager;
using Com.Fujitsu.Imaps.Plugin.AppManager.Exceptions;
・
・
private void Func()
{
AppTimeManager appTimeManager = AppTimeManager.Instance;
appTimeManager.Init(this);
}
void AppTimeDelegate.ExecuteAtInvalidTime(int result)
{
AppTimeManager appTimeManager = AppTimeManager.Instance;
Boolean isStart = appTimeManager.IsStarted();
if (isStart)
{
if (AppTimeManager.OUT_OF_TIME == result)
{
// 開始処理後に利用時間外となった場合の処理
}
else
{
// 開始処理後に利用不可能な日となった場合の処理
}
}
else
{
if (AppTimeManager.OUT_OF_TIME == result)
{
// 開始処理で利用時間外であった場合の処理
}
else
{
// 開始処理で利用不可能な日であった場合の処理
}
}
}
void AppTimeDelegate.ResultCallback(string result)
- 81 -
{
if (result == AppTimeManager.RESULT_NETWORK_ERROR || result == AppTimeManager.RESULT_SYSTEM_ERROR || result ==
AppTimeManager.RESULT_ILLEGAL_USAGE_ERROR)
{
// 開始処理で例外が発生した場合の処理
}
else if (result == AppTimeManager.RESULT_OK)
{
// 開始処理が成功した場合の処理
}
}
利用時間の情報を取得します。利用時間の制御の開始処理後に使用します。
AppTimeManager appTimeManager = AppTimeManager.Instance;
try
{
string startTime = appTimeManager.GetStartTime(); // 利用時間の開始時間を取得する場合
}
catch(Exception)
{
//例外処理
}
利用時間の制御を終了します。利用時間制御の開始処理後に利用時間外になる前に、終了する場合に使用します。
AppTimeManager appTimeManager = AppTimeManager.Instance;
appTimeManager.Destroy();
注意
・ クライアント設定ファイルのappmgr.strictPolicyModeの値がfalseの場合は、端末がオフラインでポリシー設定ファイルが更新されな
い場合や、 クライアントの時計が間違っている場合は、設定した時間外にアプリケーションが利用可能になる場合があります。 これ
を防止するためには、appmgr.strictPolicyModeの値をtrueにします。詳細は、付録C クライアント設定ファイルを参照してください。
3.5.7 パッケージング
プログラムとして作成したクラスファイルをパッケージ化します。各プラットフォームのIDEでパッケージングを実施します。
Windowsの場合、アプリケーションに署名が必要です。
詳細は、"Windows デベロッパー センター"のドキュメントを参照してください。
注意
パッケージング作成のウィザードにて、「Any CPU」でのパッケージングはできません。対象のプラットフォーム(x86/x64/ARM)を指定してパッケージングしてください。
IMAPSサーバでアプリケーションを配布する場合
IMAPSサーバでアプリケーションを配布する場合は、パッケージ化したファイルを含めた以下のようなzip形式のアーカイブファイルを
作成します。
- 82 -
それぞれのファイルについて説明します。以下のファイルをzipファイルのルートフォルダーに含めます。
・ アプリケーション本体
パッケージ化したアプリケーション本体です。拡張子は、appxです。
アプリケーションのバージョンと識別IDは255文字以降は無視されます。
バージョンはアプリケーションのバージョンです。
パッケージは、アプリケーションを特定するための値です。以下の値を参照します。
Package.appxmanifestのIdentity要素のName属性
・ 説明ファイル
アプリ詳細画面でアプリケーションの説明欄に表示する文章を定義するファイルです。ファイルはUTF-8で記載します。
日本語の説明はdescription_ja.txt、英語の説明はdescription.txtに記載します。
説明文は、0文字以上4000文字以下の範囲で記載できます。
略時は空文字になります。
・ アイコン
IMAPSサーバによる配布画面上で利用されるアイコンです。アイコンの推奨サイズは96x96ピクセル以上で縦横の幅が同じ画像で
す。ファイルはpng形式でファイル名はicon.pngです。
省略時はデフォルトのアイコンになります。
・ そのほか
アプリケーションをインストールするための依存ファイルなどです。Windowsアプリの場合は、依存関係にあるファイルもアプリケー
ション本体との位置関係を維持したままzipファイルに含めます。
注意
IMAPSサーバによる配布をするには、プラットフォームごとに以下の条件があります。丸括弧内は、主に対応が必要となる人物です。
ここで説明されている内容は、各ベンダーによって変更される可能性があります。 新の情報は、それぞれの公開情報を参照してくだ
さい。
(システム管理者) Microsoft社とのサイドローディング契約が必要です。
また、以下のインストール条件があります。
・ (アプリケーション開発者) アプリケーションを信頼できるルート証明書にチェーンされた証明書を使って署名する。
・ (アプリケーション利用者) インストール先のスマートデバイスをActive Directoryドメインに追加するか、インストール時に開発者ライ
センス認証を行う。
- 83 -
・ (アプリケーション利用者) インストール先のスマートデバイスのグループポリシー[信頼できるすべてのアプリのインストールを許可
する]を有効にする。
アプリケーション利用者の操作は、アプリケーション作成時に生成されるAdd-AppDevPackage.ps1ファイルを利用することでも実行でき
ます。
以下のように実行します。
・ (システム管理者) あらかじめこのファイルと、そのほかのアプリケーションのインストールに必要なファイルをzip形式のアーカイブ
に含めてIMAPSサーバに登録します。
・ (アプリケーション利用者) zipファイルをダウンロード・展開し、Add-AppDevPackage.ps1ファイルを右クリックして、[PowerShellで実
行]を選択します。
・ (アプリケーション利用者) 画面に表示される質問に答えることでインストールできます。
※正式なインストール手順はマイクロソフト社のドキュメントを参照してください。
http://technet.microsoft.com/ja-jp/windows/jj874388.aspx
3.5.8 デバッグ
詳細は、"Windows デベロッパー センター"のドキュメントを参照してください。
3.5.9 配布
開発したアプリケーションを配布する方法は、"運用ガイド"の"IMAPSクライアントアプリケーションの配布"を参照してください。
3.6 注意事項
ネイティブアプリケーション開発時の注意事項を説明します。
3.6.1 iOSでHTTP通信する場合の注意事項
iOS 9から、httpでの通信が、デフォルトでは利用できなくなりました。
以下のどちらかの対処をしてください。
・ IMAPSサーバをHTTPSでセットアップして、HTTPSで接続してください。
・ IMAPSサーバをHTTPで運用する場合は、info.plistにNSAppTransportSecurityの設定をしてください。
設定例1(すべてのドメインでhttpアクセスを有効にする)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</dict>
</plist>
設定例2(特定のドメインでhttpアクセスを有効にする)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>NSAppTransportSecurity</key>
- 84 -
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>ドメイン</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
</dict>
</plist>
- 85 -
第4章 Webアプリケーション
本章では、Interstage Application ServerのJava EE、Java EE 6によるWebアプリケーションの開発について説明します。
4.1 Webアプリケーションの概要
Webアプリケーションは、PCと同様にWebブラウザ上で動作します。
PCの場合と同様、HTML5やJavaScriptといったWeb技術を用いて開発します。
4.2 開発の流れ
Webアプリケーションの開発の流れは、次のとおりです。
1. 開発環境の準備
2. 開発/パッケージング
3. 動作確認(デバッグ)
4. 配布
4.3 開発環境の準備
Interstage Studioなどの開発ツールを準備します。
4.4 開発
Webアプリケーション開発の詳細は以下のマニュアルを参照してください。
・ Interstage Application Server Java EE運用ガイドの「Java EEアプリケーションの開発」
・ Interstage Application Server Java EE運用ガイド(Java EE 6編)の「Java EEアプリケーションの開発」
4.4.1 認証
認証機能を組み込む場合は"運用ガイド"、および第8章 認証を参照してください。
4.4.2 双方向通信サービス
双方向通信サービスが利用できます。詳細は、第7章 双方向通信サービスを利用したアプリケーションを参照してください。
4.4.3 jQuery MobilejQuery Mobileを利用することができます。詳細は、付録G jQuery Mobileを参照してください。
4.5 パッケージング
プログラムとして作成したクラスファイルをパッケージ化します。Java EE規約に準じた方法でパッケージ化してください。
4.6 デバッグ
Webアプリケーションは、アプリケーションのデバッグ情報・デバッガ・スレッドダンプ・Javaメソッドトレースを利用してデバッグします。デ
バッグの詳細は以下のマニュアルを参照してください。
・ Interstage Application Server Java EE運用ガイドの"Java EEアプリケーションの開発"
・ Interstage Application Server Java EE運用ガイド(Java EE 6編)の"Java EEアプリケーションの開発"
- 86 -
4.7 配備・配備解除
開発したJavaアプリケーションは、管理コンソールやコマンドを利用してJavaアプリケーション実行環境へ配備・配備解除します。配備・
配備解除の詳細は以下のマニュアルを参照してください。
・ Interstage Application Server Java EE運用ガイドの「Java EEアプリケーションの運用」
・ Interstage Application Server Java EE運用ガイド(Java EE 6編)の「Java EEアプリケーションの運用」
- 87 -
第5章 サーバアプリケーション
サーバアプリケーションとは、業務サーバで動作するアプリケーション(業務アプリケーション)のことです。
本章では、IMAPSにおけるサーバアプリケーションについて説明します。
5.1 サーバアプリケーションの概要
クライアントから送信されるデータを収集、蓄積、分析、活用したり、永続的に管理するためにサーバ上のアプリケーションが必要で
す。いろいろなデータが集まってくることから、高信頼でセキュアな環境が必要です。
また、クライアント上で実現するのが難しい業務ロジックを実行する基盤として、高性能な環境が必要です。
そのため、IMAPSでは、サーバアプリケーションの実行基盤としてInterstage Application Server を提供します。サーバアプリケーション
開発の詳細は以下のマニュアルを参照してください。
・ Interstage Application Server Java EE運用ガイド
・ Interstage Application Server Java EE運用ガイド(Java EE 6編)
5.2 認証の組み込み
サーバアプリケーションに認証機能を組み込む方法を説明します。
以下の作業を行います。
・ 第8章 認証で開発したクラスをコマンドで設定(imadmin auth set)、インポート(imadmin auth import)する
コマンドの詳細は"運用ガイド"の"コマンドリファレンス"を参照してください。
- 88 -
第6章 プッシュ通知機能
本章では、Interstage Mobile Application Serverが提供するプッシュ通知機能を利用したアプリケーションの開発を説明します。
注意
プッシュ通知機能は、Android、iOS、Windowsに対応しています。
6.1 動作概要
プッシュ通知機能の動作概要は次のとおりです。
・ IMAPSサーバ
メッセージ送信、登録IDを管理します。
・ プッシュ基盤サーバ
IMAPSプッシュIDに対して、メッセージを送信します。
・ 業務アプリ
プッシュ通知機能を利用してメッセージを送信します。
・ クライアントアプリケーション
プッシュ通知を受け取ります。プッシュメッセージが受信可能な単位は、「ネイティブアプリケーション」、「ハイブリッドアプリケーショ
ン」です。
・ GCM, APNs, WNS, IMAPSプッシュ
GCMはGoogle, APNsはApple, WNSはMicrosoftが提供するプッシュサービスです。IMAPSプッシュはIMAPSが提供するプッシュ
サービスです。
GCM, APNs, WNSからスマートデバイスが受信するまでの間にプロキシが存在する場合、メッセージを受信できません。(未サポー
ト)
IMAPSサーバからGCM, APNs, WNSへ送信するまでの間にプロキシが存在する場合、プッシュプロパティファイル(impush.properties)の設定が必要です。詳細は"運用ガイド"の"プッシュプロパティファイル(impush.properties)"を参照してください。
- 89 -
IMAPSプッシュはイントラネットのみサポートします。
・ 蓄積メッセージ
IMAPSプッシュを使用時に、端末が未接続のため届かなかったメッセージを管理します。
・ 登録ID
プッシュ通知先を示すIDです。GCMのregistrationID、APNsのデバイストークン、WNSのチャネルURI、IMAPSプッシュのIMAPSプッシュIDを指します。
・ 拡張データ
登録IDを識別するために指定する任意のデータです。従業員ID、会員IDなどを想定しています。
サーバ側のアプリケーションは、以下の機能を利用できます。
・ メッセージの送信
送信先として登録ID、または拡張データを指定し、メッセージを送信できます。
・ 送信状態の確認
蓄積メッセージ参照機能による未達メッセージの確認ができます。(IMAPSプッシュだけ)
・ 登録IDの管理
登録IDの一覧取得、情報取得、削除、検索、登録、更新ができます。
スマート端末側のアプリケーションは初期化を行うことで、メッセージを受信できます。
・ 初期化
プッシュ通信サービスへのバインド、初期設定を行います。これにより受信を開始します。コールバック関数を実装し登録すること
で、メッセージ受信時に追加で処理を行うことができます。
・ メッセージ受信
メッセージを受信すると、プッシュ通知機能がメッセージを表示します。さらに、初期化時にコールバック関数を登録した場合は、コ
ールバック関数が呼び出されます。
6.2 受信したメッセージの表示
受信したプッシュメッセージは通知領域(Android:通知バー/iOS:通知センター/Windows:通知領域)に表示されます。
ネイティブアプリケーションのプッシュメッセージ受信の方式と受信(表示)の切り替え方法を以下に示します。
方式 受信ON/OFF 表示ON/OFF 備考
IMAPSプッシュ 可能 未サポート 受信ON/OFFは、PushManagerクラスの関数を呼び出すことで切り替えられます。
接続OFF時に発行されたプッシュメッセージは、サーバ側に一定期間保管され、
再度接続ON時に受信できます。
表示ON/OFFの切り替えはできません。
GCM 一部動作
(Android4.1以降は端末の
通知設定が優
先)
可能 Android4.1以降は、端末の通知設定により受信ON/OFFの切り替えができます。
それ以前のOSでは、受信ONだけです。
表示ON/OFFの切り替えは、プッシュクライアント設定ファイル(push.properties)で指定します。
APNs 不可 可能 システム(OS)側で制御するため、受信ON/OFFの切り替えはできません。
表示ON/OFFの切り替えは、端末の設定(通知センター)で指定します。
表示OFFの間のプッシュメッセージは破棄されます。
WNS 不可 可能 システム(OS)側で制御するため、受信ON/OFFの切り替えはできません。
表示ON/OFFの切り替えは、プッシュクライアント設定ファイル(push.xml) で指
定します。
- 90 -
6.2.1 IMAPSプッシュ
IMAPSプッシュでは、IMAPSサーバ側で指定したPayloadのフォーマットに従い、プッシュ部品がその内容を表示します。Payloadはプ
ッシュクライアント設定ファイルでも設定できます。
Payloadのフォーマット
受信されるPayloadはJSON形式です。
Payload仕様
Payloadでサポートするタグ情報は以下のとおりです。
タグ 意味 設
定
概要
title
通知領域に表示する
タイトル部
任
意
指定しない場合、push.NotificationAppNameで示されたリソースの定義値を表示す
る。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
指定された定義値がアプリ内にみつからない場合は、指定内容をそのまま表示する。
空文字の場合は空文字が表示される。
ticker
通知バーに表示する
メッセージ部
任
意
指定しない場合、プッシュクライアントが保持しているティッカー定義文(※)を表示す
る。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
指定された定義値がアプリ内にみつからない場合は、指定内容をそのまま表示する。
空文字の場合は空文字が表示される。
message通知領域に表示する
メッセージ部
必
須
指定しない場合や空文字を指定した場合は、通知バーに表示されない。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
指定された定義値がアプリ内にみつからない場合は、指定内容をそのまま表示する。
message_arg
メッセージに渡す引数 任
意
messageに%sを指定した場合に、書式指定子の代わりに表示する変数文字列値を指
定する。messageに書式指定子があり、message_argを省略した場合は、書式指定子
がそのままメッセージ部に表示される。空文字を指定した場合は、空文字に置き換わ
る。
action通知領域のタップ時の
アクション
任
意
指定しない場合、通知領域のタップ時に、通知を消去する。指定した場合、かつ、
push.NotificationMainClassNameに有効値が指定されている場合は、通知を消去し、
指定されたアクションを行う。
sound
通知音 任
意
指定しない場合、かつ、push.RingtoneUriに有効値が指定されていない場合は、音
を再生しない。
指定する場合は、TYPE_ALARM/TYPE_NOTIFICATION/TYPE_RINGTONEのいずれかを指定するが、3種以外が指定されていた場合は、端末の通知音
(TYPE_NOTIFICATION)を再生する
いずれの場合も、繰り返しは行わず1度だけ再生する。また、マナーモード時は再生
しない。
led_color
イルミネーション色 任
意
指定しない場合、または定義値がない場合は、イルミネーションは発光しない。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
リソースでARGB(ffff0000など)を定義する。
ただし、実際の発光については、端末に依存する。
それぞれの設定値は以下の通り。
・ LED_COLOR_BLUE : #ff0000ff
・ LED_COLOR_GREEN : #ff00ff00
・ LED_COLOR_RED : #ffff0000
led_pattern
イルミネーションパター
ン
任
意
指定しない場合、または定義値がない場合は、イルミネーションは発光しない。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
リソースでパターンを定義する。(OnTime,OffTimeの順)ただし、実際の発光につい
ては、端末に依存する。
- 91 -
タグ 意味 設
定
概要
それぞれの設定値は以下の通り。
・ LED_PATTERN01 : 500, 2000
・ LED_PATTERN02 : 500, 500
vib
バイブレーション 任
意
指定しない、または定義値がない場合は、振動しない。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
それぞれの設定値は以下の通り。
・ VIB_PATTERN_01 : 0,500
・ VIB_PATTERN_02 : 0,200,300,700
※ティッカー定義文:(日本語)「メッセージを受信しました。」 (英語)「Received the Message.」
Payloadの指定例
{
"title":"TITLE",
"ticker":"TICKER",
"message":"MES_01",
"action":"http://jp.fujitsu.com/",
"sound":"TYPE_ALARM",
"led_color":"RED",
"led_pattern":"LP_01",
"vib":"VP_01"
}
アプリケーションにバンドルしたリソース
Value_ja/String.xml
<string name="TITLE">タイトル</string>
<string name="TICKER">メッセージがあります</string>
<string name="MES_01">次のサイトを確認してください。</string>
<string name="RED">#ffff0000</string>
<string name="LP_01">500,2000</string><!-— on:500ms, off:2000ms -->
<string name="VP_01">3000,1000,2000,5000,3000,1000</string>
<!-- 3秒後に1秒間の振動、2秒後に5秒間の振動、3秒後に1秒間の振動 -->
プッシュクライアント設定ファイルで指定する場合は以下のとおりです。
・ 音
push.RingtoneUri = souduri
・ LED
push.LedSet = true
push.LedOntime = 500
push.LedOfftime = 500
・ バイブレーション
push.VibPattern = 1000,1000,1000,1000,1000,1000
鳴動する場合は、次の優先度となります。
プッシュクライアント設定ファイルでの指定(push.RingtoneUri) > payloadで指定
6.2.2 GCMプッシュ部品で受信したメッセージを通知バーに表示します。(android.app.Notification) IMAPSプッシュのメッセージ表示と同様の表
示になります。
- 92 -
Payloadのフォーマット
受信されるPayloadはJSON形式です。
Payload仕様
Payloadでサポートするタグ情報は以下のとおりです。
タグ 意味 設
定
概要
data GCMの固定Payloadのタグ
title
通知領域に表示
するタイトル部
任
意
指定しない場合、push.NotificationAppNameで示されたリソースの定義値を
表示する。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
指定された定義値がアプリ内にみつからない場合は、指定内容をそのまま
表示する。空文字の場合は空文字が表示される。
ticker
通知バーに表示
するメッセージ部
任
意
指定しない場合、プッシュクライアントが保持しているティッカー定義文(※)を表示する。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
指定された定義値がアプリ内にみつからない場合は、指定内容をそのまま
表示する。空文字の場合は空文字が表示される。
message
通知領域に表示
するメッセージ部
必
須
指定しない場合や空文字を指定した場合は、通知バーに表示されない。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
指定された定義値がアプリ内にみつからない場合は、指定内容をそのまま
表示する。
message_arg
メッセージに渡す
引数
任
意
messageに%sを指定した場合に、書式指定子の代わりに表示する変数文字
列値を指定する。
messageに書式指定子があり、message_argを省略した場合は、書式指定子
がそのままメッセージ部に表示される。
空文字を指定した場合は、空文字に置き換わる。
action通知領域のタッ
プ時のアクション
任
意
指定しない場合、通知領域のタップ時に、通知を消去する。
指定した場合、かつ、push.NotificationMainClassNameに有効値が指定され
ている場合は、通知を消去し、指定されたアクションを行う。
sound
通知音 任
意
指定しない場合、かつ、push.RingtoneUriに有効値が指定されていない場合
は、音を再生しない。
指定する場合は、TYPE_ALARM/TYPE_NOTIFICATION/
TYPE_RINGTONEのいずれかを指定するが、3種以外が指定されていた場
合は、端末の通知音(TYPE_NOTIFICATION)を再生する
いずれの場合も、繰り返しは行わず1度だけ再生する。また、マナーモード時
は再生しない。
led_color
イルミネーション
色
任
意
指定しない場合、または定義値がない場合は、イルミネーションは発光しな
い。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
リソースでARGB(ffff0000など)を定義する。
ただし、実際の発光については、端末に依存する。
led_pattern
イルミネーション
パターン
任
意
指定しない場合、または定義値がない場合は、イルミネーションは発光しな
い。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
リソースでパターンを定義する。(OnTime,OffTimeの順)
ただし、実際の発光については、端末に依存する。
vibバイブレーション 任
意
指定しない、または定義値がない場合は、振動しない。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
registration_ids registrationID 任
意
空にするか、または指定しない
- 93 -
※ティッカー定義文:(日本語)「メッセージを受信しました。」 (英語)「Received the Message.」そのほかのGCM固有のタグについては、GCMの公式サイトを確認してください。
6.2.3 APNsAPNsによって受信したメッセージは、システム(OS)によって通知センターに表示されます。
アプリケーションがフォアグラウンドの場合は、ダイアログ形式で表示されます。このダイアログのキャンセル機能のボタン名は、アプリ
ケーションに含まれる下記のローカライズファイルに定義された文字列になります。(下記例の場合、「キャンセル」となります)
xx.lproj/FJPHandlerLib.strings
"But_01" = "キャンセル"
Payloadのフォーマット
受信されるPayloadはJSON形式です。
Payload仕様
Payloadでサポートするタグ情報は以下のとおりです。
タグ 意味 設定 概要
aps APNsの固定Payloadのタグ
alert 通知センターに表示するメ
ッセージ情報
※1 alertのタグ
body通知センターに表示するメ
ッセージ部
任意 指定しない場合、バナーまたはダイアログに表示されない。
loc-key
通知センターに表示するメ
ッセージ部
任意 指定しない場合、バナーまたはダイアログに表示されない。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
指定された定義値がアプリ内にみつからない場合は、指定内容
をそのまま表示する。
loc-args
loc-keyに渡す引数 任意 loc-keyに%@指定子や%n$@指定子を指定した場合に、書式指
定子の代わりに表示する変数文字列を配列で指定する。
例)
message_arg":["test","test2"]
launch-image
起動画面 任意 指定しない場合は、アプリのUILaunchImageFileキーに指定され
ている画像かDefault.pngを使用する。
指定する場合は、アプリにバンドルされているイメージファイル名
を指定する。
action-loc-keyボタンのローカライズ文字
列
任意 指定しない場合、バンドルしていないリソースの定義値を指定し
た場合は「起動」が表示される。
指定する場合は、アプリにバンドルしたリソースの定義値とする。
badge バッジ 任意 数値型で数値を指定するとアイコンにバッジが表示される。
指定しない場合や上記を満たさない指定の場合は何も表示され
ない(0の位)。
sound 通知音 任意 アプリにバンドルされているサウンドファイル名を指定する。サポ
ートするファイルは、aiff、wav、またはcafファイルとする。それ以
外を指定した場合は、端末の通知音に設定されている音を再生
する。省略時は無音である。
いずれの場合も、繰り返しは行わず1度だけ再生する。また、マ
ナーモード時は再生しない。
category カテゴリ指定 任意 iOS8から追加された、通知アクションのカテゴリを指定する。
- 94 -
タグ 意味 設定 概要
action 通知領域のタップ時のアク
ション
任意 指定しない場合、通知領域のタップ時に、通知を消去する。
指定した場合は、通知を消去し、指定されたアクションを行う。
指定方法は6.3 受信したメッセージからのアクションを参照のこ
と。
※1:alertタグに指定できる型は文字列とJSON構造のいずれかを指定可能である
Payloadの指定例
{
"aps":"{
"alert":"{
"loc-key":"MES_01",
"action-loc-key":"BUT_01"
}",
"badge”:1,
"sound":"notify.aiff"
}",
"action":http://jp.fujitsu.com/
}
アプリケーションにバンドルしたリソース
ja.lproj/Localizable.strings
"MES_01" = "次のサイトを確認してください。"
"BUT_01" = "確認"
ja.lproj/FJPHandlerLib.string
"But_01" = "キャンセル"
iOS8端末でアプリがフォアグラウンドの場合に、APNsプッシュ通知を受信し、かつ、その通知にカテゴリが追加されていた場合は、ア
プリで設定されたカテゴリ情報に従った通知ダイアログを表示できます。
・ イルミネーション
以下の端末設定がされている場合で、かつ、端末がロックおよびスリープ状態の場合にライトが発光する。
[設定] > [一般] > [アクシビリティ] > [LEDフラッシュ通知:ON]端末設定に依存しており、アプリ毎やPush通知毎の変更は不可能。
・ バイブレーション
端末設定において、バイブレーション有りが設定されている場合だけ動作する。
マナーモード時も振動する。
[設定] > [サウンド] > [バイブレーション]端末設定に依存しており、アプリ毎やPush通知毎の変更は不可能。
6.2.4 WNSWNSから受信したメッセージは端末アプリケーション側のプッシュ部品で受信し、通知領域に表示されます。
本機能は直接通知方式を採用しているためプッシュ部品側で受信メッセージの解析を行います。
Payloadのフォーマット
受信されるPayloadはxml形式です。
Payload仕様
Payloadでサポートするタグ情報は以下のとおりです。
要素 意味 設
定
概要
wns 必
須
WNS Payloadであることを示す要素
- 95 -
要素 意味 設
定
概要
toast トースト通知 任
意
Microsoftが取り決めたWNSのtoast要素が指定されます。toast要素は1つの
み指定可能とする。
badge バッジ通知 任
意
Microsoftが取り決めたWNSのbadge要素が指定されます。badge要素は1つ
のみ指定可能とする。
tile タイル通知 任
意
Microsoftが取り決めたWNSのtile要素が指定されます。tile要素は1つのみ
指定可能とする。
注意
toast、badge、tile要素の詳細は、Microsoftの公式サイト(https://msdn.microsoft.com/en-us/library/windows/apps/br212853.aspx)を参照
してください。
表6.1 toast要素詳細
要素 属性 設
定
概要
toast - - トースト通知を示す要素。
- launch 任
意
トースト通知をクリックしたときに関連するアプリケーションに
渡される文字列。特定URLへのアクセスや、メール送信等
を行う際に指定する文字列。
例:http(s)://xxx.abc.jp、mailto:[email protected]
duration 任
意
トースト通知が表示される時間を示す文字列。long(25秒)も
しくはshort(7秒)を指定する。デフォルトはlongである。
visual - - トースト通知の表示形式を示す要素。
- version 任
意
トースト通知のXMLスキーマのバージョン。
lang 任
意
ロケールを示す文字列。
addImageQuery 任
意
trueの場合、現在の倍率、コントラスト設定、ロケール情報が
image要素のURIへのクエリパラメータに自動的に追加され
る。falseの場合はクエリパラメータが追加されない。デフォル
トはfalseである。
例えば、http://www.abc.xyz」がimage要素のsrc属性に指定
された場合、実際には「http://www.abc.xyz?ms-scale=80&ms-contrast=standard&ms-lang=en-US」のように
Webサーバに要求される。
baseUri 任
意
ベースになるURIを示す文字列。baseUriで指定した文字列
は、各image要素のURIから省略できる。デフォルトは「ms-appx:///」例えば、baseUriで「http:」を設定すると、各image要素のURIでは「http://www.abc.xyz」でなく「//www.abc.xyz」 と指定で
きる。
branding 任
意
未使用。
binding - - トースト通知のテンプレートと表示内容を関連付けている要
素。
- template 必
須
トースト通知で使用するテンプレート。
- 96 -
要素 属性 設
定
概要
fallback 任
意
template属性で指定したテンプレートが見つからない場合に
指定するテンプレート。
lang 任
意
ロケールを示す文字列。
addImageQuery 任
意
trueの場合、現在の倍率、コントラスト設定、ロケール情報が
image要素のURIへのクエリパラメータに自動的に追加され
る。falseの場合はクエリパラメータが追加されない。デフォル
トはfalseである。
例えば、http://www.abc.xyz」がimage要素のsrc属性に指定
された場合、実際には「http://www.abc.xyz?ms-scale=80&ms-contrast=standard&ms-lang=en-US」のように
Webサーバに要求される。
baseUri 任
意
ベースになるURIを示す文字列。baseUriで指定した文字列
は、各image要素のURIから省略できる。デフォルトは「ms-appx:///」例えば、baseUriで「http:」を設定すると、各image要素のURIでは「http://www.abc.xyz」でなく「//www.abc.xyz」 と指定で
きる。
branding 任
意
未使用。
image - - トースト通知のテンプレートで使用されるイメージ要素。
- id 必
須
image要素に付与するID。1から順に指定する。templateで
指定したテンプレートに応じて各IDの画像が配置される。
src 必
須
イメージを示すURI文字列。
alt 任
意
イメージの説明。
addImageQuery 任
意
trueの場合、現在の倍率、コントラスト設定、ロケール情報が
image要素のURIへのクエリパラメータに自動的に追加され
る。falseの場合はクエリパラメータが追加されない。デフォル
トはfalseである。
例えば、http://www.abc.xyz」がimage要素のsrc属性に指定
された場合、実際には「http://www.abc.xyz?ms-scale=80&ms-contrast=standard&ms-lang=en-US」のように
Webサーバに要求される。
text - - トースト通知のテンプレートで使用されるテキスト要素。
- id 必
須
text要素に付与するID。1から順に指定する。templateで指
定したテンプレートに応じて各IDの画像が配置される。
lang 任
意
ロケールを示す文字列。
audio - - トースト通知に伴うサウンド表現に関する要素。
- src 任
意
通知音データのURI。
loop 任
意
trueの場合は通知音の鳴動を繰り返す。falseの場合は繰り
返さない。デフォルトはfalse。
silent 任
意
trueの場合は通知音をミュートする。falseの場合はミュートし
ない。デフォルトはfalse。
- 97 -
要素 属性 設
定
概要
commands - - commandを束ねる要素。
- scenario 任
意
通知の実行目的を表わす。
command - - commands要素のsenario属性と関連づいた命令を表す要
素。
- id 任
意
commands要素のsenario属性と関連づいた文字列を指定す
る。
指定パターンは以下の通り。
・scenarioがalarmの場合 は、 snoozeまたはdismissを指定す
る。
・scenarioがincomingCallの場合は、video、voice、declineのいずれかを指定する。
arguments 任
意
連携アプリに渡す引数文字列。
表6.2 badge要素詳細
要素 属性 設
定
概要
badge - - バッジ通知を示す要素。
- value 必
須
バッジに表示する数値("1"、"2"等)またはグリフ("activity"、"playing"等) 。また、Windows8.1では100以上を指定した場
合バッジには「99+」と表示される。一方、Windows10では100以上でも省略せずにバッジ表示されるが「9999」が上限であ
る。
version 任
意
バッジ通知のXMLスキーマのバージョン。
表6.3 tile要素詳細
要素 属性 設
定
概要
tile - - タイル通知を示す要素。
visual - - タイル通知の表示形式を示す要素。
- version 任
意
タイル通知のXMLスキーマのバージョン
lang 任
意
ロケールを示す文字列。
addImageQuery 任
意
trueの場合、現在の倍率、コントラスト設定、ロケール情報が
image要素のURIへのクエリパラメータに自動的に追加され
る。falseの場合はクエリパラメータが追加されない。デフォル
トはfalseである。
例えば、http://www.abc.xyz」がimage要素のsrc属性に指定
された場合、実際には「http://www.abc.xyz?ms-scale=80&ms-contrast=standard&ms-lang=en-US」のように
Webサーバに要求される。
baseUri 任
意
ベースになるURIを示す文字列。baseUriで指定した文字列
は、各image要素のURIから省略できる。デフォルトは「ms-appx:///」例えば、baseUriで「http:」を設定すると、各image要素のURIでは「http://www.abc.xyz」でなく「//www.abc.xyz」 と指定で
きる。
- 98 -
要素 属性 設
定
概要
branding 任
意
アプリの商標を指定する場合は、「none」「logo」「name」のい
ずれかを指定する。
contentId 任
意
通知するコンテンツを一意に識別するために送信者側で定
義する文字列。
binding - - タイル通知のテンプレートと表示内容を関連付けている要
素。
- template 必
須
タイル通知で使用するテンプレート。
fallback 任
意
template属性で指定したテンプレートが見つからない場合に
指定するテンプレート。
lang 任
意
ロケールを示す文字列。
addImageQuery 任
意
trueの場合、現在の倍率、コントラスト設定、ロケール情報が
image要素のURIへのクエリパラメータに自動的に追加され
る。falseの場合はクエリパラメータが追加されない。デフォル
トはfalseである。
例えば、http://www.abc.xyz」がimage要素のsrc属性に指定
された場合、実際には「http://www.abc.xyz?ms-scale=80&ms-contrast=standard&ms-lang=en-US」のように
Webサーバに要求される。
baseUri 任
意
ベースになるURIを示す文字列。baseUriで指定した文字列
は、各image要素のURIから省略できる。デフォルトは「ms-appx:///」例えば、baseUriで「http:」を設定すると、各image要素のURIでは「http://www.abc.xyz」でなく「//www.abc.xyz」 と指定で
きる。
branding 任
意
アプリの商標を指定する場合は、「none」「logo」「name」のい
ずれかを指定する。
contentId 任
意
通知するコンテンツを一意に識別するために送信者側で定
義する文字列。
image - - タイル通知のテンプレートで使用するイメージ要素。
- id 必
須
image要素に付与するID。1から順に指定する。templateで指
定したテンプレートに応じて各IDの画像が配置される。
src 必
須
イメージを示すURI文字列。
alt 任
意
イメージの説明。
addImageQuery 任
意
trueの場合、現在の倍率、コントラスト設定、ロケール情報が
image要素のURIへのクエリパラメータに自動的に追加され
る。falseの場合はクエリパラメータが追加されない。デフォル
トはfalseである。
例えば、http://www.abc.xyz」がimage要素のsrc属性に指定
された場合、実際には「http://www.abc.xyz?ms-scale=80&ms-contrast=standard&ms-lang=en-US」のように
Webサーバに要求される。
text - - タイル通知のテンプレートで使用するテキスト要素。
- id 必
須
text要素に付与するID。1から順に指定する。templateで指定
したテンプレートに応じて各IDの画像が配置される。
- 99 -
要素 属性 設
定
概要
lang 任
意
ロケール文字列。
Payloadの指定例
<?xml version=”1.0” encoding=”utf-8”?>
<wns>
<toast launch=”http://www.fujitsu.com/jp/”>
<visual>
<binding template=”ToastText04”>
<text id=”1”>Sample Messsage</text>
</binding>
</visual>
</toast>
</wns>
6.3 受信したメッセージからのアクション
通知領域(Android:通知バー/iOS:通知センター/Windows:通知領域)に表示されたメッセージをタップすると、一連のアクションが行え
ます。
actionタグでアプリを開く操作を行うために、以下のオプションをサポートします。
注意
Windowsでのアクション指定は、トースト通知のみサポートされているため、タイル通知、バッジ通知でのアクション指定はできません。
アクション フォーマット 備考
自アプリケーション起動
Androidの場合、action値に半角スペースまたは、指定したカスタ
ムURLスキームに対応した連携アプリが存在しない場合に自ア
プリケーションが起動します。連携アプリが存在しない場合の規
定動作については、・連携アプリが存在しない場合の既定動作
についてを参照してください。
iOS、Windowsの場合、action指定の有無に関係なく自アプリケ
ーションが起動します。
メール送信画面起動action="mailto:TOアドレス?subject=件名&body=本文&cc=CCア
ドレス&bcc=BCCアドレス"mailtoスキーマをサポートしているメー
ルアプリだけ起動可能。
ブラウザ起動 action="http(https):から始まるサイトのURL"
連携アプリ起動 各連携アプリに依存します。
連携アプリを起動するには、カスタムURLスキームを利用します。
また、URLにクエリ文字列を指定することにより、パラメータの受
け渡しも可能です。
連携アプリが存在しない場合の規定動作については、・連携アプ
リが存在しない場合の既定動作について、連携アプリ側で必要
となる設定及び、URL・クエリ文字列の取得については、・連携ア
プリ側で必要となる設定及び、URL・クエリ文字列取得について
を参照してください。
外部からの起動を許容している他の
アプリケーション
iOS8からは、カテゴリを指定して、通知ダイアログに以下に示す"action1"、"action2"のような選択肢を設けることができます。
- 100 -
・連携アプリが存在しない場合の既定動作について
指定されたカスタムURLスキームに対応する連携アプリが存在しない場合の動作は、OSごとに以下のようになります。
OS 動作
Android 自アプリケーションが起動します。
iOS 自アプリケーションが起動します。
Windows 「ストアでアプリを探す」のダイアログが表示されます。
・連携アプリ側で必要となる設定及び、URL・クエリ文字列取得について
Android
カスタムURLスキームの定義をします。AndroidManifest.xmlで、アクションから起動するActivityに以下のような記述を追加します。
(以下の例では、URLスキームを「fjp」、ホストを「sample」として設定しています。)
<intent-filter>
<action android:name="任意" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="fjp" android:host="sample" />
</intent-filter>
URL・クエリ文字列を受け取る場合は、アクションから起動するActivityに以下のような記述を追加します。(以下の例では、受け取
るURLを「fjp://sample?param1=abc」としています。)
Intent intent = this.getIntent();
// fjp://sample?param1=abcを取得
Uri uri = intent.getData();
// abcを取得
String param1 = intent.getStringExtra("param1");
iOS
カスタムURLスキームの定義をします。Targetを開き、InfoタブのURL Types欄を展開しURL Schemesに任意のURLスキームを入
力します。
- 101 -
注意
・ iOS9でURLスキームを定義する場合は、info.plistに配列型のLSApplicationQueriesSchemesを記述し、配列要素として、使用
するURLスキームを設定してください。info.plistに設定が無い場合、エラーとなってしまいます。
・ 定義したURLスキームがAppleが提供するアプリケーションにも定義されている場合、Appleのアプリケーションが優先して起動
されます。また、Apple以外のアプリケーションに同一のURLスキームが定義されている場合、どちらが起動されるかは保証され
ないため、必ず固有のURLスキームを指定するようにしてください。
URL・クエリ文字列を受け取る場合は、AppDelegate.mを開き、以下のメソッドを実装します。
-(BOOL)application:(UIApplication*)application openURL:(NSURL*)url
sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
{
// URLを文字列で取得
NSString *strUrl = [url absoluteString];
// クエリ文字列取得
NSString *query = [url query];
return YES;
}
注意
iOS9では、上記メソッドは非推奨となりましたので、iOS9で実装する場合は、以下のメソッドを実装してください。
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
// URLを文字列で取得
NSString *strUrl = [url absoluteString];
// クエリ文字列取得
NSString *query = [url query];
return YES;
}
Windows
カスタムURLスキームの定義をします。Package.appxmanifestを開き、宣言タブの使用可能な宣言で「プロトコル」を追加し、プロパ
ティの名前欄に任意のURLスキームを定義します。
URL・クエリ文字列を受け取る場合は、App.xaml.csを開き、以下のメソッドを実装します。
protected override void OnActivated(IActivatedEventArgs args)
{
// 起動処理の実装(実装内容はアプリケーションに依存するため省略)
// アクションから起動された場合true
if (args.Kind == ActivationKind.Protocol)
{
// URL・クエリ文字列を受け取る
ProtocolActivatedEventArgs ar = args as ProtocolActivatedEventArgs;
// URLの取得
Uri uri = ar.Uri;
// クエリ文字列の取得
string query = uri.Query;
}
Window.Current.Activate();
}
- 102 -
6.4 API
6.4.1 サーバ側のAPIサーバ側のAPIの概要を以下に示します。サーバ側のAPIはWeb APIで、送受信のデータ形式はJSONです。詳細は付録A プッシュ
Web APIを参照してください。
API名 メソッド 機能パス
(Web API名)意味
登録ID情報の取得 POST regID 登録ID情報を取得。
登録IDの一覧取得 POST regIDs 登録IDの一覧を取得。
登録IDの検索 POST findRegID 拡張データを検索条件として、登録IDを検索。
登録IDの削除 POST delRegIDs 指定した登録IDを削除。
IMAPSプッシュIDの更
新
POST fjpRegID IMAPSプッシュIDを更新。
APNsのデバイストーク
ン登録、更新
POST apnsRegID APNsのデバイストークン、アプリケーション名、サンドボックスを登
録、または更新。
WNSのチャネルURI登録、更新
POST wnsRegID WNSのチャネルURI、アプリケーション名の情報を登録、または更
新。
GCMのregistrationID登録、更新
POST gcmRegID GCMのregistrationID、GCMのアプリケーション名の情報を登録、ま
たは更新。
メッセージ送信 POST notify 指定した宛先に対して、メッセージを送信。
共通メッセージの送信 POST notifyCommon 指定した宛先に対して、共通のメッセージを送信。
蓄積メッセージ参照 GET refSvrMsg サーバに蓄積しているメッセージを参照。
メッセージ情報の取得 POST getMsgByMsgID
メッセージIDが示すメッセージ情報を取得します。
メッセージ情報の取得 POST getMsgByRegID
登録IDが示すメッセージ情報を取得します。
既読件数の取得 POST readCount 送信済のメッセージの総件数と既読件数を取得します。
プッシュWeb APIは、アプリケーション管理者によるアクセス制御を使用します。
そのため、プッシュWeb APIを使用するアプリケーションは、HTTPヘッダにIMAPS-Authorizationキーの設定が必要です。IMAPSとし
て認証する/しないの動作に連動して、プッシュの認証も動作します。
IMAPS-Authorizationキーには、以下の内容を設定します。IMAPS-Authorizationキーに指定するユーザーID、パスワードは、adminusercreateコマンドで作成したユーザーを指定します。
IMAPS-Authorization: Basic ユーザー ID:パスワード
下線部はBase64でエンコードしてください。
HTTPリクエストのURLの形式は以下のとおりです。
http(s)://<IMAPSサーバ>:<ポート番号>/pushidmng/機能パス
<IMAPSサーバ>
IMAPSサーバのFQDNまたはIPアドレス。
<ポート番号>
プッシュアプリで使用するApacheのリスナーポート。
「IMAPSサーバ用パラメタ(imsetup_srv.properties)」のIM_AHS_PUSH_PORTの値。
- 103 -
<機能パス>
Web API名。
アプリケーション管理者によるアクセス制御は、"運用ガイド"の"アプリケーション管理者によるアクセス制御"を参照してください。
6.4.2 クライアント側のAPIクライアント側のAPIの概要を以下に示します。ハイブリッドアプリケーション向けのJavaScriptと、それぞれのクライアントOS向けのネイ
ティブ言語のAPIを提供します。
JavaScript APIの概要を以下に示します。
Namespace メソッド名 意味
FJPHandler init プッシュハンドラを利用するための初期設定を行う。
Android向けのAPIの概要を以下に示します。
クラス名 メソッド名 意味
PushManager init プッシュハンドラを利用するための初期設定(登録IDの払出しとプッシュ基盤サー
バへの接続)を行い、プッシュ通知を受信できる状態にする。
PushManager initAtomic プッシュハンドラを利用するための初期設定(登録IDの払出しだけ)を行う。プッシ
ュ通知を受信できない状態。
PushManager bind PUSH通信サービスにバインドする。これにより、APIが利用できるようになる。
PushManager notifyMessageRead メッセージIDを引数に指定し、IMAPSサーバへメッセージを確認したことを通知す
る。
PushManager getFailedMsgIDList 通信エラーによりアプリ領域に保存したメッセージIDの一覧を取得する。
GcmRegister register SENDER IDでGCMのregistrationIDを要求し、IMAPSサーバに登録。IMAPSサ
ーバ登録後に、再度、本APIを実行した場合は、GCMのregistrationID要求は行
う、IMAPSサーバへの登録はregistrationIDが変更されるまでは行わない。
なお、すでにIMAPSサーバ登録後のためGCMのregistrationID要求だけ行った
場合でも、要求に成功した場合はPushReceiver:callbackにID登録状態であること
が通知される。
GcmRegister notifyMessageRead メッセージIDを引数に指定し、IMAPSサーバへメッセージを確認したことを通知す
る。
GcmRegister getFailedMsgIDList 通信エラーによりアプリ領域に保存したメッセージIDの一覧を取得する。
PushManager生成時に、引数としてPushReceiverを指定します。
メッセージ(エラーメッセージを含む)を受信したい場合は、以下のメソッドをオーバーライドしてください。
クラス名 メソッド名 意味
PushReceiver Callback PushManagerからの通知を受信。
PushMangerのbindメソッドで、引数としてPushServiceを指定します。
プッシュ通知されたメッセージを個別処理したい場合は、以下のメソッドをオーバーライドしてください。
クラス名 メソッド名 意味
PushService notifyMessage プッシュ通知されたメッセージを、Androidの通知領域に表示。
iOS向けのクラス、APIの概要を以下に示します。
クラス名 メソッド名 意味
FJPApplication - アプリ全体で共有する情報を保持。アプリケーションのエントリポイント
UIApplicationMain()の引数として指定。
FJPAppDelegate - 本クラスを親としてDelegateクラスを作成。
- 104 -
クラス名 メソッド名 意味
FJPAppDelegateの派
生クラス
RegisterForRemoteNotificationTypes
APNsにリモート通知を要求する処理を記述。
FJPMessageReadManager
notifyMessageRead メッセージIDを引数に指定し、IMAPSサーバへメッセージを確認したことを通知す
る。
FJPMessageReadManager
getFailedMsgIDList 通信エラーによりアプリ領域に保存したメッセージIDの一覧を取得する。
FJPNotifyDelegateの
派生クラス
didNotifyMessageRead
既読通知処理が完了した場合に呼び出す関数。
Windows向けのAPIの概要を以下に示します。
クラス名 メソッド名 意味
WNSRegister init WNSから取得したチャネルURIをIMAPSサーバに登録します。
WNSから返されるチャネルURIが変更されることがありうるので、
WNSを利用する場合は、アプリ起動の度に本APIを必ず呼び出
してください。
また、本APIを呼び出す場合は、UIスレッド上から呼び出してくだ
さい。
WNSRegister setPushReceiver 本クラスからの通知を受け取るクラスを設定します。
WNSRegister notifyMessageRead メッセージIDを引数に指定し、IMAPSサーバへメッセージを確認
したことを通知する。
WNSRegister getFailedMsgIDList 通信エラーによりアプリ領域に保存したメッセージIDの一覧を取
得する。
WNSRegister getMessageID トースト通知をタップ後、アプリ起動時に渡される情報からメッセ
ージIDを取得する。
6.5 クライアントのアプリケーションの開発
6.5.1 ハイブリッドアプリケーション向けのAPIの開発
ハイブリッドアプリケーション向けのAPIはJavaScriptで提供します。
1.マニフェストファイルの修正と、プッシュクライアント設定ファイルの設定
以下を行います。
・ IMAPSプッシュ
6.5.2 IMAPSプッシュ通知を利用するネイティブアプリケーションの開発の1.マニフェストファイルの修正、2. プッシュクライアント設
定ファイルの作成を実施します。
・ GCM
6.5.3 GCMプッシュ通知を利用するネイティブアプリケーションの開発のGCMプッシュ通知を利用するネイティブアプリケーション
を開発するための事前準備、1. マニフェストファイルの修正、2. プッシュクライアント設定ファイルの作成を実施します。
・ APNs
6.5.4 APNsプッシュ通知を利用するネイティブアプリケーションの開発のAPNsプッシュ通知を利用するネイティブアプリケーション
を開発するための事前準備、1. プッシュクライアント設定ファイルの作成、および2. プッシュクライアント設定ファイル設定、プッシュ
ハンドラ初期化処理の作成の項番1を実施します。
2. プッシュクライアント設定ファイル設定、プッシュハンドラ初期化処理の作成の項番2を、以下のように実施します。
- 105 -
@interface AppDelegate : FJPCDVAppDelegate
2. プッシュクライアント設定ファイル設定、プッシュハンドラ初期化処理の作成の項番4を、以下のように実施します。
//@interface MainViewController: CDVViewController
@interface MainViewController : FJPCDVViewController
・ WNS
6.5.5 WNSプッシュ通知を利用するネイティブアプリケーションの開発のWNSを利用するネイティブアプリケーションを開発するた
めの事前準備、1. マニフェストファイルの修正、および2. プッシュクライアント設定ファイルの作成を実施します。
注意
WNSを使用するハイブリッドアプリケーションは、Visual Studioを使用してWNSの設定とビルドを行う必要があります。詳細は、2.5.2WNSを使用する場合の注意事項を参照してください。
保管先
<Cordovaプロジェクトのルート>/plugins/imaps-plugin-push-properties
ファイル
・ IMAPSプッシュ/GCM用:push.properties
・ APNs用:push.plist
・ WNS用:push.xml
2.プッシュハンドラ初期化処理の作成
FJPHandler.initメソッドを呼び出すと初期化され、メッセージの受信を開始します。
以下に使用例を示します。
var jsonText = '{"ext_data":"Extension String"}';
FJPHandler.init("FJ", // プッシュの種類を指定 FJ:IMAPSプッシュ
JSON.parse(jsonText ), // 初期化時に使用する値を設定。
function(result) {
// プッシュを受信可能な状態になった後の処理
},
function(result) {
// エラー発生時のコールバック
}
);
各プッシュ方式固有の動作、設定は次のとおりです。
観点 IMAPSプッシュ
(Android)GCM
(Android)APNs(iOS)
WNS(Windows)
init()のoptionsに渡す情報
拡張データ 拡張データ
SENDER_ID(注1)拡張データ 拡張データ
setNotificationMode()
動作する 一部動作する
(Android4.1以降は端末
の通知設定が優先)
動作しない
(端末設定の「通知セン
ター」で設定)
動作する
プッシュを利用す
るための事前設定
AndroidManifest.xmlに、ネイティブAPIと同様
の記述が必要(注2)
AndroidManifest.xmlに、ネイティブAPIと同様
の記述が必要(注3)
ネイティブ層の修正が必
要
Package.appxmanifestに機能の追加が必要
errorCallback IMAPSサーバとの通信
エラーが返される
IMAPSサーバとの通信
エラーが返される
JavaScript層にエラーを
返せないので、ネイティ
ブ層の作り込みが必須
(注4)
IMAPSサーバとの通信
エラーが返される
- 106 -
注1)GCMプッシュの際のSENDER IDです。6.4.2 クライアント側のAPI のAPIのGcmRegister.register()に渡すものと同じです。 以下の
ように指定します。
JSON{"sender_id":"(GCMの開発者コンソールから入手したSENDER IDの値)"}
注2)"IMAPSプッシュ通知を利用するネイティブアプリケーションの開発"の1.マニフェストファイルの修正を参照してください。
注3)"GCMプッシュ通知を利用するネイティブアプリケーションの開発"の1. マニフェストファイルの修正を参照してください。
注4)iOSの場合、デバイストークン生成時のエラーやIMAPSサーバとの通信エラーは、FJPAppDelegateを継承したサブクラスの
[UIAppliationDelegate application:didFailToRegisterForRemoteNotificationWithError:]にコールバックされるため、このインタフェース
をオーバライドしてエラー処理の実装が必要です。
ハイブリッドアプリケーションでログ出力を行う場合、6.5.6 ログ出力のカスタマイズを参照してください。
認証の設定は、6.5.7 認証クラスの定義を参照してください。
拡張データを指定する場合は、6.5.8 拡張データの指定を参照してください。
既読通知機能の利用を行う場合、6.5.13 既読通知機能の利用を参照してください。
受信したメッセージ情報を受け取る場合、ネイティブ層の実装が必要です。6.5.9 IMAPSプッシュの処理結果受け取り、6.5.10 GCMプ
ッシュの処理結果受け取り、6.5.11 APNsプッシュの処理結果受け取り、6.5.12 WNSプッシュの処理結果受け取りを参照してください。
注意
ダウンロード方法により読み込み専用ファイルとなる場合があります。プロジェクト読み込み時にファイルの書き込み権限が必要となる
ので、その際は権限の付与など必要な対処をしてください。
6.5.2 IMAPSプッシュ通知を利用するネイティブアプリケーションの開発
IMAPSプッシュ通知を利用するネイティブアプリケーション向けのAPIはJavaで提供します。
IMAPS向けのネイティブアプリケーションの開発環境を準備後、以下のファイルをコピーします。開発環境は、 3.3.1 開発環境の準備
を参照してください。
<DVD-ROMドライブ>\development\android\push\native
<DVD-ROMマウントディレクトリ>/development/android/push/native
上記ディレクトリから開発用端末に資産をコピーし、Moduleとしてインポートします。次に、インポートしたModuleを参照Moduleとして設
定します。
IMAPSプッシュ通知を利用するネイティブアプリケーションの開発には、以下の作業が必要です。
1. マニフェストファイルの修正
2. プッシュクライアント設定ファイルの作成
3. プッシュクライアント設定ファイル設定、プッシュハンドラ初期化処理の作成
4. build.gradle ファイルの修正
1.マニフェストファイルの修正
・ Wi-Fi機能の状態を参照(WiFi MACアドレスを利用)するために、以下のパーミッションを設定します。
android.permission.ACCESS_WIFI_STATE
・ IMEIを取得するために、以下のパーミッションを設定します。IMEI(International Mobile Equipment Identifier)は、端末識別番号で
す。
android.permission.READ_PHONE_STATE
注意
インストール先の端末がAndroid6.0以上の場合、パーミッションの確認が必要です。詳細は3.3.7 パーミッションを参照してくださ
い。
・ ネットワークの接続/切断状態を取得するため、以下のパーミッションを設定します。
- 107 -
android.permission.ACCESS_NETWORK_STATE
・ プッシュ受信用のサービスをアプリケーション起動時および端末起動時に自動起動するには、以下の指定が必要です。
- 端末の起動が完了したことをサービスが受け取れるように、以下のパーミッションを指定します。
android.permission.RECEIVE_BOOT_COMPLETED
- レシーバーがインテントを受け取れるようにインテントフィルターと以下のパーミッションを指定します。
action android:name="android.intent.action.BOOT_COMPLETED
・ サービスとして、com.fujitsu.imaps.push.PushServiceクラス、または、その派生クラスを指定します。
・ レシーバーとして、com.fujitsu.imaps.push.BootReceiverを指定します。
...
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission
android:name="android.permission.READ_PHONE_STATE" /><uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission
android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application ...>
<activity ...>
...
</activity>
<service android:name="com.fujitsu.xxx.push.PushService" /> <receiver
android:name="com.fujitsu.imaps.push.BootReceiver"> <intent-filter> <action
android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>
2. プッシュクライアント設定ファイルの作成
プッシュハンドラに渡すパラメータを、プッシュクライアント設定ファイル(push.properties)に設定します。プッシュクライアント設定ファイ
ルについては、付録D プッシュクライアント設定ファイルを参照してください。
3. プッシュクライアント設定ファイル設定、プッシュハンドラ初期化処理の作成
プッシュクライアント設定ファイル情報は、プッシュハンドラを利用する前に設定してください。
以下はプッシュクライアント設定ファイルの設定例です。
// プッシュサーバとの接続先をプッシュクライアント設定ファイルに設定する
push.ServerAddress = https://example.com/
push.SelfCertificate = true
以下はプッシュ通知を受信できる状態にする場合のプッシュハンドラ初期化処理例です。
public class Sample {
// プッシュ部品のインスタンス
private static PushManager mPushManager = null;
// プッシュ部品から通知を受け取るためのコールバッククラスの宣言
private class MyReceiver extends PushReceiver{
@Override
public void callback(int result, Bundle data) {
// ここに通知されます
if(result == PushDefine.RESULT_REG_SERVER_SUCCESS) { // 初期化完了
}
}
}
public void executeSample() {
// プッシュハンドラの初期化
mPushManager = new PushManager(context, new MyReceiver());
pm.bind(PushService.class);
- 108 -
try {
pm.init();
} catch (PushException e) {
e.printStackTrace();
}
…
}
}
以下はプッシュ通知を受信できる状態にしない場合(登録ID払出だけ)のプッシュハンドラ初期化処理例です。任意のタイミングでプ
ッシュ基盤サーバとの接続がおこなえます。
public class Sample {
// プッシュ部品のインスタンス
private static PushManager mPushManager = null;
// プッシュ部品から通知を受け取るためのコールバッククラスの宣言
private class MyReceiver extends PushReceiver{
@Override
public void callback(int result, Bundle data) {
// ここに通知されます
if(result == PushDefine.RESULT_REG_SERVER_SUCCESS) { // 初期化完了
// プッシュ基盤サーバと接続
mPushManager.connect();
}
}
}
public void executeSample() {
// プッシュハンドラの初期化
mPushManager = new PushManager(context, new MyReceiver());
pm.bind(PushService.class);
try {
pm.initAtomic();
} catch (PushException e) {
e.printStackTrace();
}
…
}
}
4.build.gradle ファイルの修正
・ プッシュクライアント設定ファイルを参照するために、defaultConfigのapplicationIdにパッケージ名を設定します。以下は、設定例で
す。
android {
・・・
defualtConfig {
applicationId 'com.sample.app'
}
}
注意
ビルドを行うGradle version によっては、上記設定が行われていない場合、プッシュクライアント設定ファイルの参照に失敗し、実行
時にエラーとなる場合があります。
ログ出力を行う場合、6.5.6 ログ出力のカスタマイズを参照してください。
認証の設定は、6.5.7 認証クラスの定義を参照してください。
- 109 -
拡張データを指定する場合は、6.5.8 拡張データの指定の指定を参照してください。
エラー通知受け取りを行う場合、6.5.9 IMAPSプッシュの処理結果受け取りを参照してください。
既読通知機能の利用を行う場合、6.5.13 既読通知機能の利用を参照してください。
注意
ダウンロード方法により読み込み専用ファイルになる場合がありますが、プロジェクト読み込み時にファイルの書き込み権限が必要とな
りますので、その際は権限の付与など必要な対処を実施してください。
注意
build.gradleのcompileSdkVersionに23を指定して、プッシュ通知のAPIの以下のメソッドを使用する場合、
・ com.fujitsu.imaps.push.customize.PushExtAuth
- setRequestAuth メソッド
- saveResponseAuth メソッド
build.gradleに以下を追加してください。
android {
.....
useLibrary 'org.apache.http.legacy' //この行を追加
.....
}
useLibraryの追加をしないと、認証APIでコンパイルエラーが発生します。
6.5.3 GCMプッシュ通知を利用するネイティブアプリケーションの開発
GCMプッシュ通知を利用するネイティブアプリケーションを開発するための事前準備
GCMプッシュ通知を利用するネイティブアプリケーションを開発するための事前準備として以下を行います。
1. Google Developers Consoleでプロジェクトを作成します。
2. 作成したプロジェクトを選択し、GCMを有効にします。
3. API Keyを作成します。
4. GCM対応のAndroidアプリを開発します。
注) GoogleCloudMessaging.register()に渡すSENDER_IDは、作成したプロジェクトの「Project Number」を指定します。
5. API keyをプッシュサーバに登録します。
詳細は、Google Developers Consoleを参照してください。
GCMプッシュ通知を利用するネイティブアプリケーションの開発
GCMプッシュ通知を利用するネイティブアプリケーション向けのAPIはJavaで提供します。IMAPSプッシュ通知を利用するネイティブア
プリケーション向けのAPIと同様に準備します。
GCMプッシュ通知を利用するネイティブアプリケーションの開発には、以下の作業が必要です。
1. 作成したプロジェクトの参照設定で、MavenリポジトリからGoogle Play Servicesのライブラリ(rev.17以降)を指定します。
2. マニフェストファイルを修正します。
3. プッシュクライアント設定ファイルを作成します。
4. プッシュクライアント設定ファイルを設定し、プッシュハンドラ初期化処理を作成します。
5. Google Play開発者サービスのインストールをします。
- 110 -
6. build.gradle ファイルの修正
1. マニフェストファイルの修正
・ Wi-Fi機能の状態を参照(WiFi MACアドレスを利用)するため、以下のパーミッションを設定します。
android.permission.ACCESS_WIFI_STATE
・ IMEIを取得するため、以下のパーミッションを設定します。IMEI(International Mobile Equipment Identifier)は、端末識別番号で
す。
android.permission.READ_PHONE_STATE
注意
インストール先の端末がAndroid6.0以上の場合、パーミッションの確認が必要です。詳細は3.3.7 パーミッションを参照してくださ
い。
・ GCMからメッセージを受信するため、以下のパーミッションを設定します。ここで指定したアプリケーションだけが GCM メッセージ
を受信できます。[package]部分は作成したアプリのパッケージ名に置き換えます。Android 4.1 以上 (SdkVersion 16 ) をターゲット
としている場合は必須ではありません。
<permission android:name="[package].permission.C2D_MESSAGE"android:protectionLevel="signature" />
<uses-permission android:name="[package].permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
・ メッセージを受信したらスリープを解除するため、以下のパーミッションを設定します。
<uses-permission android:name="android.permission.WAKE_LOCK"/>
・ インターネットに接続するため、以下のパーミッションを設定します。
<uses-permission android:name="android.permission.INTERNET"/>
・ Android4.0.4未満で動作させる場合は、Googleアカウントを取得するため、以下のパーミッションを指定します。
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
・ サービスとして、com.fujitsu.imaps.push.gcm.GcmIntentServiceを指定します。
・ レシーバーとして、com.fujitsu.imaps.push.gcm.GcmBroadcastReceiverを指定します。
...
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission
android:name="android.permission.READ_PHONE_STATE" />
<permission android:name="[package].permission.C2D_MESSAGE" android:protectionLevel="signature" /><uses-permission
android:name="[package].permission.C2D_MESSAGE" /><uses-permission
android:name="com.google.android.c2dm.permission.RECEIVE" /><uses-permission
android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.INTERNET" /><uses-
permission android:name="android.permission.GET_ACCOUNTS" />
<application ...>
...
<receiver android:name="com.fujitsu.imaps.push.gcm.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action
android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="[packge]" /> </
intent-filter> </receiver>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/
google_play_services_version" /> <service android:name="com.fujitsu.imaps.push.gcm.GcmIntentService" />
</application>
...
- 111 -
2. プッシュクライアント設定ファイルの作成
プッシュハンドラに渡すパラメータを、プッシュクライアント設定ファイル(push.properties)に設定します。プッシュクライアント設定ファイ
ルについては、付録D プッシュクライアント設定ファイルを参照してください。
3. プッシュクライアント設定ファイル設定、プッシュハンドラ初期化処理の作成
プッシュクライアント設定ファイル情報は、プッシュハンドラを利用する前に設定します。
以下はプッシュクライアント設定ファイルの設定例です。
// プッシュサーバとの接続先をプッシュクライアント設定ファイルに設定する
push.ServerAddress=https://example.com/push/
push.SelfCertificate = true
push.gcm.SenderID=1234567890 // SENDER_IDは、Googleの開発者向けのWebサイトで入手
以下はプッシュハンドラ初期化処理の例です。
// com.fujitsu.imaps.push.gcm.GcmRegisterによるプッシュハンドラの初期化
GcmRegister gcm = GcmRegister.getInstance(Activity.this);
gcm.register();
4.Google Play開発者サービスのインストール
GCMプッシュ通知を受信するためには、Google Play開発者サービス(4.4.52以降)が必要です。Google Play開発者サービスがインスト
ールされていない場合、プッシュハンドラ初期化処理が失敗し、GCMのプッシュ通知を受信できません。Google Play開発者サービス
はGoogle Playから入手できます。
注意
Google Play開発者サービスは、開発したアプリケーションを実行するAndroidへインストールする必要があります。
5.build.gradle ファイルの修正
・ プッシュクライアント設定ファイルを参照するために、defaultConfigのapplicationIdにパッケージ名を設定します。以下は、設定例で
す。
android {
・・・
defualtConfig {
applicationId 'com.sample.app'
}
}
注意
ビルドを行うGradle version によっては、上記設定が行われていない場合、プッシュクライアント設定ファイルの参照に失敗し、実行
時にエラーとなる場合があります。
ログ出力を行う場合、6.5.6 ログ出力のカスタマイズを参照してください。
認証の設定は、6.5.7 認証クラスの定義を参照してください。
拡張データを指定する場合は、6.5.8 拡張データの指定の指定を参照してください。
エラー通知受け取りを行う場合、6.5.10 GCMプッシュの処理結果受け取りを参照してください。
既読通知機能の利用を行う場合、6.5.13 既読通知機能の利用を参照してください。
- 112 -
参考
GCMプッシュハンドラ初期化処理(GcmRegister.register)は、GCMとの通信とIMAPSサーバとの通信を伴います。そのため、開発中に
以下の環境でGCMプッシュの動作を確認したい場合、 開発中の動作確認用の定義であるpush.ServerConnectRetryCountおよび
push.ServerConnectRetryWaitを設定すると、クライアントアプリケーション開発時におけるRegistrationID登録が容易に確認できます。
・ IMAPSサーバがイントラネットに配置されており、イントラネット内WiFiで接続する環境
・ イントラネット内からGCMへのアクセスが(ファイアウォールなどで)遮断される環境
以下の方法で設定します。
<手順>
1. プッシュクライアント設定ファイルのpush.ServerConnectRetryCountおよびpush.ServerConnectRetryWaitに任意の値を指定しま
す。
2. Android端末のWiFiを無効にし、クライアントアプリケーションから、GCMプッシュハンドラ初期化処理(GcmRegister.register)を実
行します。
3. Android端末のWiFiを有効にします。
手順1の設定に従い、GCMから取得したregistrationIDがIMAPSサーバに登録されます。
注意
push.ServerConnectRetryCountおよびpush.ServerConnectRetryWaitは開発中の動作確認用として提供しています。運用向け環境で
は指定しないでください。
注意
build.gradleのcompileSdkVersionに23を指定して、プッシュ通知のAPIの以下のメソッドを使用する場合、
・ com.fujitsu.imaps.push.customize.PushExtAuth
- setRequestAuth メソッド
- saveResponseAuth メソッド
build.gradleに以下を追加してください。
android {
.....
useLibrary 'org.apache.http.legacy' //この行を追加
.....
}
useLibraryの追加をしないと、認証APIでコンパイルエラーが発生します。
6.5.4 APNsプッシュ通知を利用するネイティブアプリケーションの開発
APNsプッシュ通知を利用するネイティブアプリケーションを開発するための事前準備
APNsプッシュ通知を利用するネイティブアプリケーションを開発するための事前準備として以下を行います。
1. Mac OSXのキーチェーンサービス上でCSRを作成します。
2. iOS Develper Centerに、APNsを利用するアプリ情報を登録します。
3. APNsを利用するためのSSL証明書を発行します。
4. APNsを利用するためのプロビジョニングファイルを作成します。
- 113 -
5. APNsを利用するために発行したSSL証明書をダウンロードし、Mac OSXのキーチェーンサービス上で作成したCSRの秘密鍵と
共にPKCS#12形式の証明書を作成します。
6. プロビジョニングファイルをXcodeに取り込み、iOSアプリをビルドします。
7. PKCS#12をプッシュサーバに登録します。
詳細は、iOS Develoepr Center内を参照してください。
APNsプッシュ通知を利用するネイティブアプリケーション向けのAPIはObjective-Cで提供します。
IMAPS向けのネイティブアプリケーションの開発環境を準備後、以下からzipファイルを取得し、Mac上で展開してください。
<DVD-ROMドライブ>\development\ios\push\FJPHandlerLib.1.0.zip
<DVD-ROMマウントディレクトリ>/development/ios/push/FJPHandlerLib.1.0.zip
APNsプッシュ通知を利用するネイティブアプリケーションの開発には、以下の作業が必要です。
・ プッシュクライアント設定ファイルの作成
・ プッシュクライアント設定ファイル設定、プッシュハンドラ初期化処理の作成
1. プッシュクライアント設定ファイルの作成
プッシュハンドラに渡すパラメータを、プッシュクライアント設定ファイル(push.plist)に設定します。プッシュクライアント設定ファイルにつ
いては、付録D プッシュクライアント設定ファイルを参照してください。
2. プッシュクライアント設定ファイル設定、プッシュハンドラ初期化処理の作成
プッシュクライアント設定ファイル情報は、プッシュハンドラを利用する前に設定します。
以下はプッシュハンドラ初期化処理の例です。
1. main.mのmain関数で、ネイティブ層で利用するUIApplicationクラスをプッシュハンドラのクラスに変更します。
return UIApplicationMain(argc, argv,NSStringFromClass([FJPApplication class]),
NSStringFromClass([XXXAppDelegate class]));
2. XXXAppDelegateクラスの親クラスをプッシュハンドラに変更します。
@interface XXXAppDelegate : FJPAppDelegate
...
3. XXXAppDelegateクラスの初回起動時(application:didFinishLaunchingWithOptions:)などで、APNsにリモート通知を要求します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[super application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions];
// APNsにリモート通知を要求
UIUserNotificationSettings* notificationSettings =
[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound
| UIUserNotificationTypeAlert
| UIUserNotificationTypeBadge)
categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
[[UIApplication sharedApplication] registerForRemoteNotifications];
注) [UIAppliaction registerForRemoteNotificationType:]を呼び出すとAPNsに対してデバイストークンが要求され、IMAPSサーバ
にデバイストークンが登録されます。APNsから返されるデバイストークンが変更される可能性があるため、プッシュ機能の利用の
際は定期的に呼び出してください。
4. XXXViewControllerクラスの親クラスをプッシュ部品に変更します。
- 114 -
//@interface XXXViewController : UIViewController
@interface XXXViewController : FJPViewController
…
UIViewController以外の画面で構成されているユーザーアプリケーションにおいても、フォアグラウンド時のAPNsプッシュ通知の
ダイアログ表示を可能にする場合は、以下のように変更します。
XXXViewController.h(ヘッダファイル側)】
// FJPViewControllerProtocolを実装します。
//@interface XXXViewController : UINavigationViewController
@interface XXXViewController : UINavigationViewController<FJPViewControllerProtocol>…
…
【XXXViewController.m(実装ファイル側】
//実装例(ダイアログを表示させる場合)
- (BOOL)isShowOnForeground
{
return YES;
}
isShowOnForeground関数を実装し、 前面時のプッシュ通知でダイアログを表示させる場合はYESを返します。
注) isShowOnForeground関数が実装されていない場合、また、FJPViewControllerProtocolが実装されていない場合は、 前面
時にプッシュ通知されてもダイアログは表示されません。
ログ出力を行う場合、6.5.6 ログ出力のカスタマイズを参照してください。
認証の設定は、6.5.7 認証クラスの定義を参照してください。
拡張データを指定する場合は、6.5.8 拡張データの指定の指定を参照してください。
エラー通知受け取りを行う場合、6.5.11 APNsプッシュの処理結果受け取りを参照してください。
既読通知機能の利用を行う場合、6.5.13 既読通知機能の利用を参照してください。
参考
APNsプッシュハンドラ初期化処理(FJPAppDelegate)では、APNsとの通信とIMAPSサーバとの通信を伴います。そのため、開発中に
以下の環境でAPNsプッシュの動作確認を行いたい場合、[モバイルデータ通信]と[WiFi]をONにしておくことで可能となります。
・ IMAPSサーバがイントラネットに配置されており、イントラネット内WiFiで接続する環境
・ さらに、イントラネット内からAPNsへのアクセスが(ファイアウォールなどで)遮断される環境
6.5.5 WNSプッシュ通知を利用するネイティブアプリケーションの開発
WNSを利用するネイティブアプリケーションを開発するための事前準備
WNSプッシュ通知を利用するネイティブアプリケーションを開発するための事前準備として以下を行います。
1. Windowsデベロッパーセンターの「ダッシュボード」で、アプリの作成をします。
2. 「サービス」>>「プッシュ通知」>>「Windows プッシュ通知サービス(WNS)と Microsoft Azure Mobile Services」セクション内の「Liveサービスサイト」で「パッケージSID」、「クライアントシークレット」、「アプリケーションID」を取得します。
3. Visual Studio の「プロジェクト」メニューの「ストア」>>「アプリケーションをストアと関連付ける」を行いアプリをビルドします。
4. 2.で取得したパッケージSIDとクライアントシークレットをIMAPSサーバに登録します
詳細は、Windowsデベロッパーセンター内を参照してください。
WNSを利用するネイティブアプリケーションの開発
WNSプッシュ通知を利用するネイティブアプリケーション向けのAPIはC#で提供します。
- 115 -
IMAPS向けのネイティブアプリケーションの開発環境を準備後、以下のファイルをコピーしてください。
<DVD-ROMドライブ>\development\windows\push\Com.Fujitsu.Imaps.Push.winmd
<DVD-ROMマウントディレクトリ>/development/windows/push/Com.Fujitsu.Imaps.Push.winmd
このCom.Fujitsu.Imaps.Push.winmdファイルは、参照ライブラリとして設定してください。
6.5.7 認証クラスの定義や6.5.6 ログ出力のカスタマイズを行う場合は、同じディレクトリにあるImapsPushEx.dllファイルも参照ライブラリ
に追加してください。
WNSプッシュ通知を利用するネイティブアプリケーションの開発には、以下の作業が必要です。
・ マニフェストファイルの修正
・ プッシュクライアント設定ファイルの作成
・ プッシュクライアント設定ファイル設定、プッシュハンドラ初期化処理の作成
・ App.xamlファイルの修正
1. マニフェストファイルの修正
・ トースト通知機能を利用するため [アプリケーション]タブでトースト対応を[はい]に設定します。
Windows 8.1ストアアプリを開発する場合のみ、この設定を行ってください。
・ インターネット機能を利用するために、[機能]タブで[インターネット(クライアント)]を設定します。
・ バックグラウンドタスクでプッシュ通知を利用するために、[宣言]タブで使用可能な宣言として[バックグラウンドタスク]を追加し、プ
ロパティで[プッシュ通知]を選択、エントリポイントに[Com.Fujitsu.Imaps.Push.WNS.WNSBackgroundTask]を設定します。
・ トースト通知でアラーム機能を利用するために、「アラーム」を追加します。
ま た 、 ア ラ ー ム 機 能 を 利 用 し て よ い か を ユ ー ザ に 確 認 す る 必 要 が あ る た め 、 プ ッ シ ュ 受 信 を 行 う 前 に 、
AlarmApplicationManager.RequestAccessAsync()を実行し、ユーザに確認をするようにしてください。
Windows 8.1 ストアアプリを開発する場合
Package.appxmanifestを選択し、[表示] > [コード]からマニフェストファイルを開きます。
Extensionsタグの子要素として、以下を追加してください。
<m2:Extension Category=”windows.alarm" />
Windows 10 UWPアプリを開発する場合
[宣言]タブで使用可能な宣言として[アラーム]を追加してください。
・ トースト通知で着信機能を利用するために、「ロック画面」を追加します。
Windows 8.1 ストアアプリを開発する場合
Package.appxmanifestを選択し、[表示] > [コード]からマニフェストファイルを開きます。
Extensionsタグの子要素として、以下を追加してください。
<m2:Extension Category=”windows.lockScreenCall" />
Windows 10 UWPアプリを開発する場合
[宣言]タブで使用可能な宣言として[ロック画面]を追加してください。
2. プッシュクライアント設定ファイルの作成
プッシュハンドラに渡すパラメータを、プッシュクライアント設定ファイル(push.xml)に設定します。プッシュクライアント設定ファイルにつ
いては、付録D プッシュクライアント設定ファイルを参照してください。
3. プッシュクライアント設定ファイル設定、プッシュハンドラ初期化処理の作成
プッシュクライアント設定ファイル情報は、プッシュハンドラを利用する前に設定してください。
以下はプッシュクライアント設定ファイルの設定例です。
- 116 -
// プッシュサーバとの接続先をプッシュクライアント設定ファイルに設定する
<push.ServerAddress>https://example.com/</push.ServerAddress>
<push.SelfCertificate>true</push.SelfCertificate>
以下はプッシュ通知を受信できる状態にする場合のプッシュハンドラ初期化処理例です。
namespace Sample
{
// プッシュ部品から通知を受け取るためのコールバッククラスの宣言
class MyReceiver : PushReceive
{
public void callback(int result, IDictionary<string, object> data)
{
// ここに通知されます
if(result == PushDefine.RESULT_REG_SERVER_WNS_SUCCESS) { // 初期化完了
}
}
}
public void executeSample()
{
// プッシュハンドラの初期化
WNSRegister register = WNSRegister.getInstance(new WNSPushReceiver(this));
register.init();
…
}
}
ログ出力を行う場合、6.5.6 ログ出力のカスタマイズを参照してください。
認証の設定は、6.5.7 認証クラスの定義を参照してください。
拡張データを指定する場合は、6.5.8 拡張データの指定の指定を参照してください。
エラー通知受け取りを行う場合、6.5.12 WNSプッシュの処理結果受け取りを参照してください。
既読通知機能の利用を行う場合、6.5.13 既読通知機能の利用を参照してください。
4. App.xamlファイルの修正
ネイティブアプリケーションでトースト通知からのアクション機能を使用する場合は、App.xaml内のOnLaunchedメソッドからWNSToastActionクラスのactionメソッドを呼び出す必要があります。
以下は実装例です。
例:App.xaml.cs
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
・・・
WNSToastAction.action(e.Arguments, e.Kind);
}
6.5.6 ログ出力のカスタマイズ
プッシュ通知機能のログは、デフォルトでは標準出力にログを出力しています。
そのため、アプリケーション開発時にはプラットフォーム固有の開発環境で参照できますが、運用環境では障害時調査のためにログを
ファイルに記録しておく事を推奨します。
ログ出力APIを使用することで、ログファイルが永続化されるだけでなく、ログ送信の対象となりサーバ側で収集できます。
出力されたログファイルを送信する場合は、 Android版は3.3.5.2 ログ出力とサーバへの送信、 iOS版は3.4.6.2 ログ出力とサーバへの
送信、 Windows版は3.5.5.2 ログ出力とサーバへの送信、 ハイブリッドアプリケーションは2.3.28.4.1 ログ出力とサーバへの送信 のsendメソッドを参照してください。
IMAPSではログをファイル出力するクラスを提供しています。
- 117 -
プッシュのログをIMAPSが提供しているクラスに変更するための手順を以下に示します。本節に記述されている事項は、ネイティブア
プリケーションおよびハイブリッドアプリケーションの両方に適用可能です。ログクラスの定義が未設定の場合や、誤ったログクラスを設
定するなどの定義値誤りの場合は、ログは標準出力に出力されます。
Android
以下のように、プッシュクライアント設定ファイルにログクラスを設定します。
// ログクラスを設定
push.LogClassName=com.fujitsu.imaps.plugin.push.PushLogImpl
iOS
以下のように、グローバル変数"fjpLogger"にFJPExLoggerImplクラスのインスタンスを設定します。
#import <IMAPSPush/FJPExLoggerImpl.h>
// ログ拡張クラスのインスタンスをグローバル変数に設定
// ※プッシュ部品クラスからも参照するため下記変数名で設定すること
id<FJPLogger> fjpLogger;
@implementation AppDelegate
@synthesize window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 親クラスの同名関数の実行
[super application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions];
// (省略)
// 親クラスの同名関数の実行後、グローバル変数に代入
fjpLogger = [[FJPExLoggerImpl alloc] init];
return YES;
}
Windows
以下のように、プッシュクライアント設定ファイルに拡張したログクラスを設定します。
// 拡張したログクラスの名前空間を設定
<push.LogClassNameSpace>ImapsPushEx</push.LogClassNameSpace>
// 拡張したログクラスを設定
<push.LogClassName>Com.Fujitsu.Imaps.PushEx.PushLogImpl</push.LogClassName>
注意
・ ハイブリッドアプリでのログ出力クラスの指定方法について
ハイブリッドアプリのJSプロジェクトでは、DLLの参照ができないためDLL参照用の「クラスライブラリ」プロジェクトを作成し、JSプ
ロジェクトから参照させるよう設定してください。
・ バックグラウンドタスク実行時のログ出力について
バックグラウンド実行を許可しておりアプリケーションが起動していない場合、プッシュ受信制御はバックグラウンドタスクにて行
われます。
バックグラウンドタスクの実行は、アプリケーションが起動していない状態で実行されます。そのためバックグラウンドタスク実行
中に発生したエラーはプッシュ部品側のログ出力クラスまたは、アプリケーション側で拡張したログ出力クラスからアプリケーシ
ョンに返却できません。
そのためバックグラウンドタスク実行時に発生したエラー内容の確認が必要な場合は、プッシュクライアント設定ファイルにログ
出力用のファイル名を指定してください。
プッシュクライアント設定ファイルについては、付録D プッシュクライアント設定ファイルを参照してください。
- 118 -
例:<Push.BackGroundTaskErrorLogFileName>Error.log</Push.BackGroundTaskErrorLogFileName>
プッシュクライアント設定ファイルにログ出力用のファイル名が指定されている場合は、指定されたファイル名でログ出力用ファ
イルを作成し以下のフォルダに格納します。
「C:\Users\{ユーザ名}\AppData\Local\Packages\{パッケージファミリ名}\LocalState」
初期設定ファイルにログ出力用のファイル名が指定されていない場合は、ログ出力用ファイルは出力されません。
プッシュのログは、以下のように出力されます。
1. Androidの場合: プッシュログ
2. iOSの場合: プラグインログ
3. Windowsの場合: プラグインログ
詳細は"運用ガイド"の"IMAPSクライアントアプリケーションのログによる保守"を参照してください。
6.5.7 認証クラスの定義
プッシュ通知を利用するハイブリッドアプリケーション/ネイティブアプリケーションは、登録IDをIMAPSサーバに 登録するためにIMAPS認証が必要です。その認証状態を渡すために認証クラスの 定義が必要です。認証クラスの定義が未設定の場合や、誤ったクラスを設
定するなどの定義値誤りの場合は 認証エラーになります。
認証クラスの定義では、以下の作業を行います。
1. 利用する認証方式にあわせた認証情報の設定
2. 認証クラスの組み込み
1.利用する認証方式にあわせた認証情報の設定
利用する認証方式にあわせて、以下のどちらかの認証情報を設定します。
[Android][iOS][Windows]のハイブリッドアプリケーションおよびネイティブアプリケーション開発において、プッシュハンドラの初期化を
行う前に、認証情報の設定します。
(1)オンライン認証(loginOnlineによる認証設定)
プッシュハンドラの初期化を行う前に、アプリケーションからオンライン認証の認証情報を設定します。
なお、オンライン認証の方法は、 Android版は3.3.3.2 ログイン、 iOS版は3.4.4.2 ログイン、 Windows版は3.5.3.2 ログイン、 ハイブリ
ッドアプリケーションは2.3.28.2.1 ログイン のオンライン認証の説明を参照してください。
(2)管理情報認証(setManageInfoによる認証設定)
あらかじめIMAPSサーバの管理コマンドでアプリケーション管理者を作成します。
プッシュハンドラの初期化を行う前に、アプリケーションから管理情報の認証情報を設定します。
なお、管理情報認証の方法については、 Android版は3.3.3.5 管理情報の設定、 iOS版は3.4.4.5 管理情報の設定、 Windows版は3.5.3.5 管理情報の設定、 ハイブリッドアプリケーションは2.3.28.2.5 管理情報による認証 の説明を参照してください。
2.認証クラスの組み込み
Android
以下のように、プッシュクライアント設定ファイルに認証クラスを設定します。
// 認証クラスを設定
push.AuthClassName=com.fujitsu.imaps.plugin.push.PushExtAuthImpl
iOS
以下のように、グローバル変数"fjpExAuth"にFJPExAuthImplクラスのインスタンスを設定します。
#import <IMAPSPush/FJPExAuthImpl.h>
// 認証拡張クラスのインスタンスをグローバル変数に設定
- 119 -
// ※プッシュ部品クラスからも参照するため下記変数名で設定すること
id<FJPExAuth> fjpExAuth;
@implementation AppDelegate
@synthesize window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 親クラスの同名関数の実行
[super application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions];
// (省略)
// 親クラスの同名関数の実行後、グローバル変数に代入
fjpExAuth = [[FJPExAuthImpl alloc] init];
return YES;
}
Windows
管理情報認証を行う場合、以下のように、プッシュクライアント設定ファイルに認証クラスを設定します (オンライン認証を用いる場
合は、認証クラスの設定は不要です)。
// 認証クラスの名前空間を設定
lt;push.AuthClassNameSpace>ImapsPushEx</push.AuthClassNameSpace>
// 認証クラスを設定
<push.AuthClassName>Com.Fujitsu.Imaps.PushEx.PushExtAuthImpl</push.AuthClassName>
注意
・ ハイブリッドアプリでの認証クラスの指定方法について
ハイブリッドアプリのJSプロジェクトでは、DLLの参照ができないためDLL参照用の「クラスライブラリ」プロジェクトを作成し、JSプ
ロジェクトから参照させるよう設定してください。
6.5.8 拡張データの指定
端末に結びついた登録IDの拡張データを更新します。プッシュクライアント設定ファイル(push.properties)にあらかじめ設定した値より
も、本処理で設定した値が優先されます。
Android - IMAPSプッシュ
PushManager.init()を呼び出す前に、PushPropertiesインスタンスに拡張データを設定します。
PushManager pm = new PushManager(context);
...
Properties props = PushProperties.getInstance(this);props.setProperty(PushDefine. KEY_EXTENSION_DATA, "xxxx");
try {pm.init(); // init()実行時にIMAPSサーバと通信を行なうので、
} catch (PushException e) { //拡張データを変更する場合もinit()を呼び出す必要があります。
e.printStackTrace();
}
Android - GCM
GcmRegister.register()/register(String)を呼び出す前に、PushPropertiesインスタンスに拡張データを設定してください。
GcmRegister gcm = GcmRegister gcm = GcmRegister.getInstance(this);
...
Properties props = PushProperties.getInstance(this);props.setProperty(PushDefine. KEY_EXTENSION_DATA,
"xxxx");gcm.register(); // regist()実行時にIMAPSサーバと通信を行なうので、//拡張データを変更する場合もregist()を呼
- 120 -
び出す必要があります。
...
iOS - APNs
APNsを利用開始する際に呼び出す[UIApplication registerForRemoteNotification:]を実行する前に、プッシュ部品のFJPApplicationクラスのプロパティextDataに拡張データを設定してください。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
if( [application isKindOfClass:[FJPApplication class]] ) { [((FJPApplication*)application)
setExtData:@"xxxx"]; }
// 本関数を実行後にプッシュ部品のFJPAppDelegateクラス内でIMAPSサーバと通信を行なうので、 // 拡張データを更
新する場合も再度呼び出す必要がある [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
...
Windows - WNS
WNSRegister.init()を呼び出す前に、PushPropertiesクラスのsetPropertyで拡張データを設定します。
WNSRegister wnsr = new WNSRegister.getInstance();
...
PushProperties.setProperty(PushDefine. KEY_EXTENSION_DATA, "xxxx");
wnsr.init(); // init()実行時にIMAPSサーバと通信を行なうので、
//拡張データを変更する場合もinit()を呼び出す必要があります。
ハイブリッド
アプリケーションで固定の値を持つ場合は、プッシュクライアント設定ファイルのpush.ExtensionDataに値を記述しておき、
FJPHandler.initを呼んでください。
var nullopt = {};
FJPHandler.init("FJ",
nullopt,
function(result) {
// プッシュを受信可能な状態になった後の処理
},
function(result) {
// エラー発生時のコールバック
}
);
動的に値を変更したい場合は、FJPHandler.initの引数optionsに、拡張データをJSON形式で指定してください。
var jsonText = '{"ext_data":"Extension String"}';
FJPHandler.init("FJ",JSON.parse(jsonText ),
function(result) {
// プッシュを受信可能な状態になった後の処理
},
function(result) {
// エラー発生時のコールバック
}
);
6.5.9 IMAPSプッシュの処理結果受け取り
クライアントでのプッシュハンドラ初期化処理で、処理結果を受け取るクラスを実装することで、メッセージおよびエラー通知を受信でき
ます。
PushReceiverの派生クラスを実装し、Pushのクラス生成時に指定します。メッセージ受信時、エラー発生時はcallbackメソッドが呼び出
されます。
- 121 -
なお、メッセージ受信が可能なのは、クライアントアプリケーションが動作中(フォアグラウンド、または、バックグラウンド)状態の場合で
す。
IMAPS プッシュの場合の例を以下に示します。
// Pushのエラー通知クラス
public class pReceiver extends PushReceiver{
@Override
public void callback(int result, Bundle data) {
// ここに通知されます
}
}
// Pushの初期化
pReceiver prec = new pReceiver();
PushManager pm = new PushManager(context, prec);
pm.bind(PushService.class);
通知される内容は以下のとおりです。
表6.4 通信情報
状態 result Bundle
キー名:
ERROR_BUNDLE_CODE_KEY
キー名:
ERROR_BUNDLE_DATA_KEY
自分でBrokerを切断 RESULT_CONNECT_FAIL ERROR_CODE_NOMAL null
Brokerネットワーク利用不可 RESULT_CONNECT_FAIL ERROR_CODE_NETWORK_NOT_AVAILABLE
ConnectException
Broker接続不可(タイムアウト) RESULT_CONNECT_FAIL ERROR_CODE_SOCKET_TIMEOUT
SocketTimeoutException
Brokerアクセス権限なし(内部
エラー)RESULT_CONNECT_FAIL ERROR_CODE_NOACCESS
_AUTHORITYnull
SSL認証エラー RESULT_CONNECT_FAIL ERROR_CODE_SSL_HANDSHAKE_FAILED
SSLHandshakeException
Broker停止 RESULT_CONNECT_FAIL ERROR_CODE_BROKER_SEVERANCE
EOFException
ネットワーク切断 RESULT_CONNECT_FAIL ERROR_CODE_NETWORK_LOST
SocketException
原因不明のエラー RESULT_CONNECT_FAIL ERROR_CODE_UNKNOWN 上記以外の例外の場合
Broker接続成功 RESULT_CONNECTED - -
ID払出し成功 RESULT_REG_SERVER_SUCCESS
- -
ID払出しサーバとの接続失敗 RESULT_REG_SERVER_CONNECT_FAIL
- -
ID払出し失敗 RESULT_REG_SERVER_FAIL
- -
プッシュサービスとのbindに成
功した
RESULT_BIND_SERVICE_SUCCESS
- -
プッシュサービスとのunbindに
成功した
RESULT_UNBIND_SERVICE_SUCCESS
- -
各定義値はPushDefineクラスに定義
- 122 -
表6.5 メッセージ受信
状態 result Bundle
キー名:MESSEAGE_BUNDLE_PAYLOAD_KEY
IMAPSプッシュメッセージ受信 RESULT_RECEIVE_MESSAGE
byte[ ] ペイロード
各定義値はPushDefineクラスに定義
表6.6 既読通知情報
状態 result Bundle
キー名:
ERROR_BUNDLE_CODE_KEY
キー名:
ERROR_BUNDLE_DATA_KEY
IMAPSサーバへの既読通知
成功
RESULT_NOTIFY_MESSAGEREAD_SUCCES
- -
IMAPSサーバへの既読通知
失敗
RESULT_NOTIFY_MESSAGEREAD_FAIL
BUNDLE_STATUSCODE_KEY
ステータスコード
IMAPSサーバへの接続失敗 RESULT_SERVER_CONNECT_FAIL
- -
各定義値はPushDefineクラスに定義
6.5.10 GCMプッシュの処理結果受け取り
クライアントでのプッシュハンドラ初期化処理で、処理結果を受け取るクラスを実装すると、メッセージおよびエラー通知を受信できま
す。
PushReceiverの派生クラスを実装し、Pushのクラス生成時に指定します。メッセージ受信時、エラー発生時はcallbackメソッドが呼ばれ
ます。
なお、クライアントアプリケーションが動作中(フォアグラウンド、またはバックグラウンド)の場合に、メッセージを受信できます。
GCMプッシュの場合の例を以下に示します。
....
// Pushのエラー通知クラス
public class pReceiver extends PushReceiver{
@Override
public void callback(int result, Bundle data) {
// ここに通知されます
}
}
//GCMにregistraionIDを要求
pReceiver prec = new pReceiver();
GcmRegister gcm = GcmRegister.getInstance(this, prec);
gcm.regist(SENDER_ID); // SENDER_IDは、Googleの開発者向けのWebサイトでGCM向けのものを入手;
PushReceiver :: callback(int result, Bundle data)に通知される内容は以下のとおりです。
表6.7 通信情報
状態 result Bundle
ID登録 RESULT_REG_SERVER_GCM_SUCCESS
- -
ID登録サーバとの接続失敗 RESULT_REG_SERVER_GCM_CONNECT_FAIL
- -
ID登録失敗 RESULT_REG_SERVER_GCM_FAIL
- -
- 123 -
各定義値はPushDefineクラスに定義
表6.8 メッセージ受信
状態 result Bundle
キー名:
MESSAGE_BUNDLE_GCM_MESSAGETYPE_KEY
キー名:
MESSEAGE_BUNDLE_PAYLOAD_KEY
GCMメッセージ受信 RESULT_RECEIVE_GCM_MESSAGE
GoogleCloudMessaging.MESSAGE_TYPE_DELETED (注)
Bundle ペイロード
GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE(注)
GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR (注)
各定義値はPushDefineクラスに定義
注) 以下の文字列が通知されます。
com.google.android.gms.gcm.GoogleCloudMessaging
public static final String MESSAGE_TYPE_DELETED Constant Value: "deleted_messages"
public static final String MESSAGE_TYPE_MESSAGE Constant Value: "gcm"
public static final String MESSAGE_TYPE_SEND_ERROR Constant Value: "send_error"
表6.9 既読通知情報
状態 result Bundle
キー名:
ERROR_BUNDLE_CODE_KEY
キー名:
ERROR_BUNDLE_DATA_KEY
IMAPSサーバへの既読通知
成功
RESULT_NOTIFY_MESSAGEREAD_SUCCES
- -
IMAPSサーバへの既読通知
失敗
RESULT_NOTIFY_MESSAGEREAD_FAIL
BUNDLE_STATUSCODE_KEY
ステータスコード
IMAPSサーバへの接続失敗 RESULT_SERVER_CONNECT_FAIL
- -
各定義値はPushDefineクラスに定義
6.5.11 APNsプッシュの処理結果受け取り
クライアントでのプッシュハンドラ初期化処理で、処理結果を受け取るクラスを実装すると、メッセージおよびエラー通知を受信できま
す。
FJPAppDelegateの派生クラスを実装してください。エラー発生時は次のメソッドが呼び出されます。
表6.10 デバイス取得情報・メッセージ受信
状態 関数 備考
メッセージ通知
(アプリ終了時に通知を受けた場合)didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
メッセージ通知
(アプリ起動時に通知を受けた場合)didReceiveRemoteNotification:(NSDictionary*)userInfo
デバイストークン成功 didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
- 124 -
状態 関数 備考
デバイストークン失敗 didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
通信エラーの場合もこちらに通知
FJPNotifyDelegateの派生クラスを実装してください。エラー発生時は次のメソッドが呼び出されます。
表6.11 既読通知情報
状態 関数 domain code userInfo
メッセージIDか登録
IDがnilまたは空白の
場合
didNotifyMessageRead:(NSError *) error
NotifyMessageReadErrorDomain
NotifyMessageReadParamError
nil
サーバからのレスポン
スが200(成功)以外だ
った場合
didNotifyMessageRead:(NSError *) error
NotifyMessageReadErrorDomain
NotifyMessageReadResponseError
ステータス
コード
その他のエラー(レス
ポンスが得られなかっ
た場合など)
didNotifyMessageRead:(NSError *) error
NotifyMessageReadErrorDomain
NotifyMessageReadConnectError
nil
6.5.12 WNSプッシュの処理結果受け取り
クライアントでのプッシュハンドラ初期化処理で、処理結果を受け取るクラスを実装することで、メッセージおよびエラー通知を受信でき
ます。
PushReceiverの派生クラスを実装し、Pushのクラス生成時に指定します。メッセージ受信時、エラー発生時はcallbackメソッドが呼び出
されます。
なお、メッセージ受信が可能なのは、クライアントアプリケーションが動作中(フォアグラウンド、または、バックグラウンド)状態の場合で
す。
WNS の場合の例を以下に示します。
// Pushのエラー通知クラス
public class PushReceiverImpl : PushReceiver{
public void callback(int result, IDictionary<string, object> data) {
// ここに通知されます
}
}
// Pushの初期化
PushReceiverImpl receiver = new PushReceiverImpl();
WNSRegister wnsr = WNSRegister.getInstance(receiver);
wnsr.init();
通知される内容は以下のとおりです。
表6.12 WNSサーバとの通信状況
状態 result data
key value
チャネルURI取得失敗 RESULT_REG_SERVER_WNS_FAIL
- -
各定義値はPushDefineクラスに定義
- 125 -
表6.13 IMAPSサーバとの通信・登録状況
状態 result data
key value
登録成功 RESULT_REG_SERVER_WNS_SUCCESS
- -
登録失敗 RESULT_REG_SERVER_WNS_FAIL
- -
接続失敗(サーバへの接続に
失敗)RESULT_REG_SERVER_WNS_CONNECT_FAIL
EARROR_DICTIONARY_CODE_KEY
ERROR_CODE_CONNECT_FAIL
EARROR_DICTIONARY_DATA_KEY
Exception
接続失敗(SSL通信に失敗(証明書無効))
RESULT_REG_SERVER_WNS_CONNECT_FAIL
EARROR_DICTIONARY_CODE_KEY
ERROR_CODE_SSL_CERTIFICATE_INVALID
EARROR_DICTIONARY_DATA_KEY
Exception
接続失敗(SSL通信に失敗(証明書有効期限切れ))
RESULT_REG_SERVER_WNS_CONNECT_FAIL
EARROR_DICTIONARY_CODE_KEY
ERROR_CODE_SSL_CERTIFICATE_EXPIRED
EARROR_DICTIONARY_DATA_KEY
Exception
接続失敗(原因不明のエラー) RESULT_REG_SERVER_WNS_CONNECT_FAIL
EARROR_DICTIONARY_CODE_KEY
ERROR_CODE_UNKNOWN
EARROR_DICTIONARY_DATA_KEY
Exception
各定義値はPushDefineクラスに定義
表6.14 メッセージ受信
状態 result data
key value
WNSメッセージ受信 RESULT_RECEIVE_WNS_MESSAGE
RESULT_RECEIVE_WNS_MESSAGE
ペイロードデータ
各定義値はPushDefineクラスに定義
表6.15 既読通知情報
状態 result data
key value
IMAPSサーバへの既読通知
成功
RESULT_NOTIFY_MESSAGEREAD_SUCCESS
- -
IMAPSサーバへの既読通知
失敗
RESULT_NOTIFY_MESSAGEREAD_FAIL
DICTIONARY_STATUSCODE_KEY
ステータスコード
IMAPSサーバへの接続失敗 RESULT_SERVER_CONNECT_FAIL
- -
各定義値はPushDefineクラスに定義
6.5.13 既読通知機能の利用
クライアント側で既読通知APIを利用することにより、受信したメッセージが確認されたことをIMAPSサーバへ通知することができます。
既読通知機能を利用するには定義ファイル(impush.properties)のfj_push_read_modeの設定が必要です。詳細は"運用ガイド"を参照
してください。
- 126 -
既読通知は、通知メッセージ情報に含まれるメッセージIDを取得し、既読通知APIを使用します。メッセージIDの取得タイミングは以下
となります。
・ Android
・通知バーのメッセージタップ後に自アプリが起動し、発行されたインテントからメッセージIDを取得
通知バーのメッセージタップに連動して、自アプリを起動するには、
6.3 受信したメッセージからのアクションの自アプリケーション起動を参照してください。
・アプリ側でPushReceiverを実装していた場合、ペイロード情報からメッセージIDを取得
・ iOS
・通知センターのメッセージタップ後にアプリが起動し、渡されたペイロードからメッセージIDを取得
・FJPAppDelegateクラスを継承したサブクラスのdidReceiveRemoteNotification関数内でペイロード情報からメッセージIDを取得
・ Windows
・トースト通知をタップした後にアプリが起動し、渡される情報からメッセージIDを取得
Androidで既読通知機能を利用する場合は、プッシュクライアント設定ファイルのpush.NotificationMainClassNameに通知バータップ後
に起動するActivityを設定してください。プッシュクライアント設定ファイルについては、付録D プッシュクライアント設定ファイルを参照
してください。
注意
push.NotificationMainClassNameが省略、または存在しないクラスを指定していた場合は、アプリが起動しないためインテントを取得で
きません。
以下、既読API実装例です。
IMAPSプッシュ通知
IMAPSプッシュ通知での既読通知APIの実装例としては以下の二つのパターンがあります。
・ アプリ未起動時/起動時にメッセージ受信し、通知バーをタップしてアプリを起動した場合
//アプリのMainActivity.java内(push.propertiesのpush.NotificationMainClassNameに設定)
//通知バーをタップし、アプリを起動した際の処理
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
//インテントにmsgIDが設定されている場合
if(intent != null && intent.getExtras() != null) {
//インテントからメッセージIDを取得
String msgID = intent.getStringExtra(PushDefine.EXTRA_MESSAGE_ID);
PushManager pm = new PushManager(getApplicationContext());
try {
ArrayList<String> f_msgID = pm.getFailedMsgIDList();
//アプリ領域にメッセージIDが保存されている場合
if(f_msgID != null){
//保存されているメッセージID分の既読通知を実行
for(int i = 0; i < f_msgID.size(); i++) {
String id = f_msgID.get(i);
pm.notifyMessageRead(id);
}
}
//タップしたメッセージの既読通知を実行
pm.notifyMessageRead(msgID);
} catch(PushException e) {
//例外時の処理
}
} else {
//インテントが取得できなかった場合の処理
- 127 -
}
}
//通知バータップで起動するActivityのlaunchModeが
//"singleTop"、"singleTask"、"singleInstance"の場合
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//インテントにmsgIDが設定されている場合
if(intent != null && intent.getExtras() != null) {
//インテントからメッセージIDを取得
String msgID = intent.getStringExtra(PushDefine.EXTRA_MESSAGE_ID);
PushManager pm = new PushManager(getApplicationContext());
try {
ArrayList<String> f_msgID = pm.getFailedMsgIDList();
//アプリ領域にメッセージIDが保存されている場合
if(f_msgID != null) {
//保存されているメッセージID分の既読通知を実行
for(int i = 0; i < f_msgID.size(); i++) {
String id = f_msgID.get(i);
pm.notifyMessageRead(id);
}
}
//タップしたメッセージの既読通知を実行
pm.notifyMessageRead(msgID);
} catch(PushException e) {
//例外時の処理
}
} else {
//インテントが取得できなかった場合の処理
}
}
・ アプリが起動中にメッセージを受信し、アプリ側でPushReceiverを実装していた場合
private class MyReceiver extends PushReceiver{
@Override
public void callback(int arg0, Bundle arg1) {
//IMAPSプッシュのメッセージを受信した場合
if(arg0 == com.fujitsu.fjh.push.common.PushDefine.RESULT_RECEIVE_MESSAGE) {
byte[] payloadData =
arg1.getByteArray(com.fujitsu.fjh.push.common.PushDefine.MESSEAGE_BUNDLE_PAYLOAD_KEY);
String payload = new String(payloadData);
//ペイロード情報をJSONObjectへ変換
JSONObject payloadObject = new JSONObject(payload);
//ペイロード情報からmsgIDを取得
String msgid = payloadObject.getString("mid")
//受信時の処理を実装
// ・・・
//メッセージを確認したタイミング(任意)で既読通知を実行
PushManager pm = PushManager.getInstance();
try {
ArrayList<String> f_msgID = pm.getFailedMsgIDList();
//アプリ領域にメッセージIDが保存されている場合
if(f_msgID != null) {
//保存されているメッセージID分の既読通知を実行
for(int i = 0; i < f_msgID.size(); i++) {
String id = f_msgID.get(i);
pm.notifyMessageRead(id);
}
}
//受信したメッセージの既読通知を実行
pm.notifyMessageRead(msgid);
} catch(PushException e) {
- 128 -
//例外時の処理
}
}
}
GCMプッシュ通知
GCMプッシュ通知での既読通知APIの実装例としては以下の二つのパターンがあります。
・ アプリ未起動時/起動時にメッセージ受信し、通知バーをタップしてアプリを起動した場合
//アプリのMainActivity.java内(push.propertiesのpush.NotificationMainClassNameに設定)
//通知バーをタップし、アプリを起動した際の処理
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
//インテントにmsgIDが設定されている場合
if(intent != null && intent.getExtras() != null) {
//インテントからメッセージIDを取得
String msgID = intent.getStringExtra(PushDefine.EXTRA_MESSAGE_ID);
GcmRegister gr = GcmRegister.getInstance(getApplicationContext());
try {
ArrayList<String> f_msgID = gr.getFailedMsgIDList();
//アプリ領域にメッセージIDが保存されている場合
if(f_msgID != null) {
//保存されているメッセージID分の既読通知を実行
for(int i = 0; i < f_msgID.size(); i++) {
String id = f_msgID.get(i);
gr.notifyMessageRead(id);
}
}
//タップしたメッセージの既読通知を実行
gr.notifyMessageRead(msgID);
} catch(PushException e) {
//例外時の処理
}
} else {
//インテントが取得できなかった場合の処理
}
}
//通知バータップで起動するActivityのlaunchModeが
//"singleTop"、"singleTask"、"singleInstance"の場合
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//インテントにmsgIDが設定されている場合
if(intent != null && intent.getExtras() != null) {
//インテントからメッセージIDを取得
String msgID = intent.getStringExtra(PushDefine.EXTRA_MESSAGE_ID);
GcmRegister gr = GcmRegister.getInstance(getApplicationContext());
try {
ArrayList<String> f_msgID = gr.getFailedMsgIDList();
//アプリ領域にメッセージIDが保存されている場合
if(f_msgID != null) {
//保存されているメッセージID分の既読通知を実行
for(int i = 0; i < f_msgID.size(); i++) {
String id = f_msgID.get(i);
gr.notifyMessageRead(id);
}
}
//タップしたメッセージの既読通知を実行
gr.notifyMessageRead(msgID);
} catch(PushException e) {
//例外時の処理
- 129 -
}
} else {
//インテントが取得できなかった場合の処理
}
}
・ アプリが起動中にメッセージを受信し、アプリ側でPushReceiverを実装していた場合
private class MyReceiver extends PushReceiver {
@Override
public void callback(int arg0, Bundle arg1) {
//GCMプッシュのメッセージを受信した場合
if(arg0 == com.fujitsu.fjh.push.common.PushDefine.RESULT_RECEIVE_GCM_MESSAGE) {
Bundle payloadData = arg1.getBundle
(com.fujitsu.fjh.push.common.PushDefine.MESSEAGE_BUNDLE_PAYLOAD_KEY);
String msgID = payloadData.getString("mid")
//受信時の処理を実装
// ・・・
//メッセージを確認したタイミング(任意)で既読通知を実行
GcmRegister gr = GcmRegister.getInstance(getApplicationContext());
try {
ArrayList<String> f_msgID = gr.getFailedMsgIDList();
//アプリ領域にメッセージIDが保存されている場合
if(f_msgID != null) {
//保存されているメッセージID分の既読通知を実行
for(int i = 0; i < f_msgID.size(); i++) {
String id = f_msgID.get(i);
gr.notifyMessageRead(id);
}
}
//受信したメッセージの既読通知を実行
gr.notifyMessageRead(msgid);
} catch(PushException e) {
//例外時の処理
}
}
}
APNsプッシュ通知
APNsプッシュ通知での既読通知APIの実装例としては以下の二つのパターンがあります。
・ アプリ未起動時にメッセージ受信し、通知センターをタップしてアプリを起動した場合
AppDelegateクラス内
//通知センターのメッセージをタップし、アプリを起動した際の処理
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if(userInfo != nil)
{
FJPPayloadInfo* payInfo = [[FJPPayloadInfo alloc]initWithPayload:userInfo];
//アクションを指定した通知の場合は、親クラスの関数を実行する前に既読通知を行う
if(payInfo != nil && payInfo.msgID != nil)
{
//既読通知を実行
NSArray* f_msgid = [FJPMessageReadManager getFailedMsgIDList];
//アプリ領域にメッセージIDが保存されている場合
if(f_msgid != nil)
{
//保存されているメッセージID分の既読通知を実行
for(NSString* id in f_msgid)
{
[FJPMessageReadManager notifyMessageRead:id delegate:self];
}
- 130 -
}
//タップしたメッセージの既読通知を実行
[FJPMessageReadManager notifyMessageRead:payInfo.msgID delegate:self];
}
}
[super application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions];
//アクション指定がない通知は親クラスの関数実行後でも既読通知を行える
//既読通知を実行
//・・・
return YES;
}
・ アプリ起動中にメッセージ受信した場合
アプリ起動中にメッセージを受信した場合、FJPAppDelegateクラスを継承したサブクラスのdidReceiveRemoteNotification関数
内でペイロード情報からメッセージIDを取得し、既読通知APIを実行します。 また、メッセージIDは、ペイロード情報を
FJPPayloadInfoオブジェクトに変換して取得します。
AppDelegateクラス内
//アプリ起動中にプッシュ通知を受信した場合
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
if (userInfo != nil)
{
// ペイロード情報をFJPPayloadInfoオブジェクトに初期化
FJPPayloadInfo* payInfo = [[FJPPayloadInfo alloc]initWithPayload:userInfo];
//payload情報にmsgIDが格納されている場合
if(payInfo != nil && payInfo.msgID != nil)
{
//受信時の処理を実装
// ・・・
//メッセージを確認したタイミング(任意)で既読通知を実行
NSArray* f_msgid = [FJPMessageReadManager getFailedMsgIDList];
//アプリ領域にメッセージIDが保存されている場合
if(f_msgid != nil)
{
//保存されているメッセージID分の既読通知を実行
for(NSString* id in f_msgid)
{
[FJPMessageReadManager notifyMessageRead:id delegate:self];
}
}
//受信したメッセージの既読通知を実行
[FJPMessageReadManager notifyMessageRead:payInfo.msgID delegate:self];
}
}
}
また、既読通知APIの通知結果を受け取る場合は、FJPNotifyDelegateプロトコルのdidNotifyMessageRead関数をアプリ側で実
装します。以下は実装例です。
AppDelegateクラス内
@interface AppDelegate : FJPAppDelegate <FJPNotifyDelegate>
- (void)didNotifyMessageRead:(NSError*) error
@end
#pragma mark FJPNotifyDelegate implementation
- (void)didNotifyMessageRead:(NSError*) error
{
if(error == nil)
{
//通知成功の場合の処理
}
else
- 131 -
{
//通知失敗の場合の処理
}
}
WNSプッシュ通知
WNSプッシュ通知での既読通知APIの実装例としては以下のパターンがあります。
・ アプリ未起動時/起動時にメッセージ受信し、トースト通知をタップしてアプリを起動した場合
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
・・・
Window.Current.Activate();
//PushReceiverを継承したクラスのインスタンス生成
MyReceiver myreceiver = new MyReceiver();
WNSRegister wr = WNSRegister.getInstance(myreceiver);
//既読通知に失敗したメッセージIDを取得し、再度既読通知を行う
IList<string> list = wr.getFailedMsgIDList();
try
{
if(list != null)
{
//既読通知に失敗したメッセージID分、既読通知を実行する
foreach(string f_msgid in list)
{
wr.notifyMessageRead(f_msgid);
});
}
//LaunchActivatedEventArgsのArgumentsプロパティからメッセージIDを取得する
string msgid = wr.getMessageID(e.Arguments);
//既読通知を実行する
wr.notifyMessageRead(msgid);
}
catch(Exception e)
{
//例外時の処理
}
//アクションを実行する
WNSToastAction.action(e.Arguments, e.Kind);
}
・ハイブリッドアプリでの既読通知について
・ Android、iOSのハイブリッドアプリで既読通知を行う場合は、ネイティブ層で既読APIの実装が必要です。
Android はインテントからメッセージIDを取得する方法のみ有効です。
そのため、アプリ起動中においても通知バーをタップし、インテントからメッセージIDを取得する方法で既読通知を行うようにし
てください。
・ Windowsのハイブリッドアプリで既読通知を行う場合は、WinJSを利用することにより、JavaScriptでネイティブ用の既読APIを使
用することができます。以下、実装例です。
//activatedイベントにハンドラ-を登録
WinJS.Application.addEventListener("activated", onActivatedHandler, false);
function onActivatedHandler(args) {
if (args.detail.arguments !== "") {
//既読通知処理
try {
//メッセージID取得
var msgid = Com.Fujitsu.Imaps.Push.WNS.WNSRegister.getInstance().getMessageID(args.detail.arguments);
//既読通知の実行
Com.Fujitsu.Imaps.Push.WNS.WNSRegister.getInstance().notifyMessageRead(msgid);
- 132 -
}
//WinJSの制限により、nullが返る場合はArgumentNullExceptionが発生する(getMessageID返却値がnull)
catch (e) {
//例外時の処理
}
//アクションの実行
Com.Fujitsu.Imaps.Push.WNS.WNSToastAction.action(args.detail.arguments, args.detail.kind);
}
}
・制限事項
・プッシュ受信アプリ以外のアクションを指定したプッシュ通知にて、既読通知を行う場合について
メッセージタップ後のアクションに、プッシュ受信アプリ以外のアプリのアクション(メール送信画面起動、ブラウザ起動など)を指
定し、そのプッシュ通知にて既読通知を行う場合は、Android、iOSにおいて以下の制限があります。
※Windowsの場合は、プッシュ受信アプリ以外のアプリのアクションを指定したプッシュ通知に対しても、既読通知を行うことが
できます。
[Android]
ネイティブアプリ
アクション指定した通知をタップし起動するのは、アクションに指定されたアプリです。
そのため、アクションにプッシュ受信アプリ以外のアクションを指定していた場合は、それらのアプリ(ブラウザ、メールな
ど)が起動します。 つまり、プッシュ受信アプリが未起動時の場合は、通知をタップしてもプッシュ受信アプリは起動しま
せん。 プッシュ受信アプリが起動しないため、既読通知APIを実行することができません。
プッシュ受信アプリが起動中の場合は、PushReceiverを利用してメッセージIDを取得することで、 アプリがフォアグラウン
ド(アクション実行前)の場合のみ既読通知を実行することができます。
ハイブリッドアプリ
Androidのハイブリッドアプリの場合、プッシュ受信アプリが未起動時・起動中共に既読通知APIを実行することができま
せん。
これは、Androidのハイブリッドアプリでは、通知バーをタップしインテントからメッセージIDを取得する方法でのみ既読通
知することが可能なのですが、 通知バーのタップによりプッシュ受信アプリ以外のアプリ(ブラウザ、メールなど)が起動
し、 プッシュ受信アプリが起動しないため、既読通知APIを実行することができないからです。
[iOS]
ネイティブアプリ
プッシュ受信アプリ未起動時は、FJPAppDelegateの派生クラスのdidFinishLaunchingWithOptions関数内で渡されたパラ
メータからメッセージIDを取得し、既読通知APIを実行することができます。 ただし、親クラスの同関数を実行する前(アプリ起動後のアクション実行前)でのみ有効です。
プッシュ受信アプリ起動中においても、FJPAppDelegateの派生クラスのdidReceiveRemoteNotification関数内で渡された
パラメータからメッセージIDを取得し、既読通知APIを実行することができます。 ただし、プッシュ受信アプリ未起動時と
同様に、親クラスの同関数を実行する前でのみ有効です。
・WNSのタイル通知とバッジ通知について
WNSのタイル通知とバッジ通知での既読通知機能は未サポートです。
・登録IDの更新について
既読通知の前後で登録IDが更新された場合、そのメッセージに対しての既読通知は成功せずに、登録IDの不一致としてパラ
メータエラーになります。 そのため、未読状態が続いているようなメッセージは上記エラーとなることがあります。
・利用不可のファイル名(キー名)
[Android]
SharedPreferencesの下記ファイル名はメッセージIDの保存に使用するため、使用しないでください。
・com_fujitsu_push_msg_id_data
- 133 -
[iOS]
NSUserDefaultsの下記キー名はメッセージIDの保存に使用するため、使用しないでください。
・com_fujitsu_push_msg_id_data
[Windows]
ApplicationData.Current.LocalSettingsの下記キー名はメッセージIDの保存に使用するため、使用しないでください。
・com_fujitsu_push_msg_id_data
・Androidでのメッセージタップ後に起動するActivityについて
メッセージをタップ後に起動するActivityのlaunchModeが省略もしくは、"standard" が設定されていた場合は、メッセージタップ
にてActivityを初回起動後、メッセージを受信し、 その後メッセージをタップしても新規Activityが起動せず、前回のActivityが
表示され、 onCreate()やonNewIntent()などのライフサイクルイベントにてメッセージIDが取得できず、既読通知を行うことができ
ません。
そのため、メッセージタップ後に起動するActivityのlaunchModeは、"singleTop"、"singleTask"、"singleInstance" のいずれかを
指定してください。
6.6 サーバ側のアプリケーションの開発
サーバ側のAPIはWeb APIを提供します。 詳細は、6.4.1 サーバ側のAPIを参照してください。
Web APIの実装例として、メッセージ送信APIと共通メッセージ送信APIを記載します。各Web APIの特長を以下の表に示します。
API名 特徴
共通メッセージ送信API ・ 端末のOSの種類を意識せずに、同じ内容のメッセージを送信できる。
・ テンプレートファイル、またはmessageOptionsとメッセージを指定するだけで、各プッシュサービスの
オプションを指定したメッセージを送信できる。
メッセージ送信API ・ 各プッシュサービスに対して、異なる内容のメッセージを送信できる。
・ 各プッシュサービスの仕様が変更になった場合でも、リクエストのボディの仕様変更であれば、新しい
仕様に合わせたメッセージを送信できる。
注意
サーバ側のアプリケーションは、Web APIをJavaで実装します。
6.6.1 共通メッセージ送信アプリケーションの開発
共通メッセージ送信APIを利用することで、各プッシュサービスへ共通のメッセージを送信できます。
各プッシュサービスのメッセージのオプションは、テンプレートファイル、またはリクエストのボディのmessageOptionsで指定できます。各
指定方法の利用例を以下に示します。
指定方法 利用例
テンプレートファイル ・ 定型文をメッセージで送信する場合(例:開始時間10分前を通知するメッセージを送る場合)
・ 毎回、同じオプションを指定する場合(例:通知バーに表示するメッセージ(ticker)が同じ場合)
messageOptions ・ メッセージ毎にオプションを変更したい場合(例:メッセージの有効期限がメッセージ毎に異なる場合)
・ テンプレートファイルのオプションを追加・変更したい場合(例:actionのURL指定を追加したい場合)
テンプレートファイル、およびmessageOptionsで指定可能なメッセージのオプションの一覧を以下に示します。
- 134 -
定義名 対応する各プッ
シュサービスの
オプション
意味・用途 型 対象(プッシュ種別)
IMAPS
APNs GCM WNS
message message(IMAPS)、body(APNs)、message(GCM) 、message(WNS)
通知するメッセージ情報
※テンプレートファイルのみ指定
可能。リクエストのボディの
messageで指定するため、
messageOptionsでは指定不可。
String
○ ○ ○ ○
fjp_title title 通知領域に表示するタイトル String
○ - - -
fjp_ticker ticker 通知バーに表示するメッセージ String
○ - - -
fjp_message_arg message_arg メッセージに渡す引数 String
○ - - -
fjp_action action 通知するメッセージ情報 String
○ - - -
fjp_sound sound 通知音 String
○ - - -
fjp_led_color led_color イルミネーション色 String
○ - - -
fjp_led_pattern led_pattern イルミネーションパターン String
○ - - -
fjp_vib vib バイブレーション String
○ - - -
apns_expiration expiration(header)
APNsストレージに保持されるメッ
セージの期間
int - ○ - -
apns_loc-key loc-key 通知センターに表示するメッセー
ジ(messageより優先される)
String
- ○ - -
apns_loc-args loc-args loc-keyに渡す引数(複数ある場
合、カンマ区切りで指定)String
- ○ - -
apns_launch-image launch-image 起動画面 String
- ○ - -
apns_action-loc-key action-loc-key ボタンのローカライズ文字列 String
- ○ - -
apns_badge badge バッジ int - ○ - -
apns_sound sound 通知音 String
- ○ - -
apns_category category カテゴリ指定 String
- ○ - -
apns_action action 通知領域のタップ時のアクション String
- ○ - -
apns_content-available content-available
バックグラウンドのアプリケーショ
ンダウンロード設定
int - ○ - -
gcm_collapse_key collapse_key グループでの折畳み String
- - ○ -
- 135 -
定義名 対応する各プッ
シュサービスの
オプション
意味・用途 型 対象(プッシュ種別)
IMAPS
APNs GCM WNS
gcm_delay_while_idle delay_while_idle
デバイスのアクティブ確認後に送
信
boolean
- - ○ -
gcm_time_to_live time_to_live GCMストレージに保持されるメッ
セージの期間
int - - ○ -
gcm_restricted_package_name restricted_package_name
クライアントアプリケーションのパ
ッケージ名でメッセージ送信を制
限
String
- - ○ -
gcm_dry_run dry_run メッセージ送信しない(デバッグ
用)
boolean
- - ○ -
gcm_title title 通知領域に表示するタイトル String
- - ○ -
gcm_ticker ticker 通知バーに表示するメッセージ String
- - ○ -
gcm_message_arg message_arg メッセージに渡す引数 String
- - ○ -
gcm_action action 通知領域のタップ時のアクション String
- - ○ -
gcm_sound sound 通知音 String
- - ○ -
gcm_led_color led_color イルミネーション色 String
- - ○ -
gcm_led_pattern led_pattern イルミネーションパターン String
- - ○ -
gcm_vib vib バイブレーション String
- - ○ -
wns_toast_launch toast要素の
launch属性
トースト通知クリック時のアクショ
ン
String
- - - ○
wns_toast_duration toast要素の
duration属性
トースト通知の表示時間 String
- - - ○
wns_toast_visual_version toast-visual要素のversion属
性
トースト通知のXMLスキーマのバ
ージョン
integer
- - - ○
wns_toast_visual_lang toast-visual要素のlang属性
ロケール文字列 String
- - - ○
wns_toast_visual_addImageQuery
toast-visual要素の
addImageQuery属性
言語、倍率、コントラスト設定クエ
リパラメータの付与フラグ
boolean
- - - ○
wns_toast_visual_baseUri toast-visual要素のbaseUri属性
ベースURI anyURI
- - - ○
wns_toast_visual_branding toast-visual要素のbranding属性
商標指定 String
- - - ○
- 136 -
定義名 対応する各プッ
シュサービスの
オプション
意味・用途 型 対象(プッシュ種別)
IMAPS
APNs GCM WNS
wns_toast_visual_bindings
- toast-visual-binding要素
binding要素で指定できるオプシ
ョンをJSONオブジェクトの配列
([{"template":"ToastText01","lang":"ja-JP"}]の型)で指定
array - - - ○
template toast-visual-binding要素の
template属性
トースト通知のテンプレート String
- - - ○
fallback toast-visual-binding要素の
fallback属性
templateオプションで指定したテ
ンプレートが存在しない場合に使
用されるテンプレート
String
- - - ○
lang toast-visual-binding要素の
lang属性
ロケール文字列 String
- - - ○
addImageQuery
toast-visual-binding要素の
addImageQuery属性
言語、倍率、コントラスト設定クエ
リパラメーターの付与フラグ
boolean
- - - ○
baseUri toast-visual-binding要素の
baseUri属性
ベースURI anyURI
- - - ○
branding toast-visual-binding要素の
branding属性
商標指定(未使用) String
- - - ○
images
- toast-visual-binding-image要素
image要素で指定できるオプショ
ンをJSONオブジェクトの配列
([{"src":"sample.jpg","addImageQuery":"true"}]の型)で指定
array - - - ○
src toast-visual-binding-image要素のsrc属性
イメージのURL String
- - - ○
alt toast-visual-binding-image要素のalt属性
イメージの説明 String
- - - ○
addImageQuery
toast-visual-binding-image要素の
addImageQuery属性
言語、倍率、コントラスト設定クエ
リパラメータの付与フラグ
boolean
- - - ○
texts - toast-visual-binding-text要素
text要素で指定できるオプション
をJSONオブジェクトの配列
([{"message":"message01","lang":"ja-JP"},{"message":"message02","lang":"ja-JP"}]の型)で指定
array - - - ○
message
toast-visual-binding-text要素のコンテンツ
メッセージ文字列 String
- - - ○
- 137 -
定義名 対応する各プッ
シュサービスの
オプション
意味・用途 型 対象(プッシュ種別)
IMAPS
APNs GCM WNS
lang toast-visual-binding-text要素のlang属性
ロケール文字列 String
- - - ○
wns_toast_audio_src toast-audio要
素のsrc属性
トースト通知音 String
- - - ○
wns_toast_audio_loop toast-audio要
素のloop属性
トースト通知音をループするか否
か
boolean
- - - ○
wns_toast_audio_silent toast-audio要
素のsilent属性
トースト通知音をサイレントにする
か否か
boolean
- - - ○
wns_toast_commands_scenario toast-commands要素のscenario属性
トースト通知の使用目的 String
- - - ○
wns_toast_commands_commands
- toast-commands-command要素
command要素で指定できるオプ
ションをJSONオブジェクトの配列
([{"id":"snooze","arguments":"ABC"}]の型)で指定
array - - - ○
id toast-commands-command要素
のid属性
ユーザが実行できるアクション String
- - - ○
arguments toast-commands-command要素
のarguments属性
ユーザがアクションを実行した時
に返される文字列
String
- - - ○
wns_badge_value badge要素の
value属性
バッジ通知で表示する情報 String
- - - ○
wns_badge_version badge要素の
version属性
バッジ通知のXMLスキーマのバ
ージョン
integer
- - - ○
wns_tile_visual_version tile-visual要素
のversion属性
タイル通知のXMLスキーマのバ
ージョン
integer
- - - ○
wns_tile_visual_lang tile-visual要素
のlang属性
ロケール文字列 String
- - - ○
wns_tile_visual_addImageQuery tile-visual要素
の
addImageQuery属性
言語、倍率、コントラスト設定クエ
リパラメータの付与フラグ
boolean
- - - ○
wns_tile_visual_baseUri tile-visual要素
のbaseUri属性
ベースURI anyURI
- - - ○
wns_tile_visual_branding tile-visual要素
のbranding属
性
商標指定 String
- - - ○
wns_tile_visual_contentId tile-visual要素
のcontentId属
性
通知のコンテンツを一意に識別
するための送信者が定義する文
字列
String
- - - ○
- 138 -
定義名 対応する各プッ
シュサービスの
オプション
意味・用途 型 対象(プッシュ種別)
IMAPS
APNs GCM WNS
wns_tile_visual_bindings
- tile-visual-binding要素
binding要素で指定できるオプシ
ョンをJSONオブジェクトの配列
([{"template":"TileSquareBlock","lang":"ja-JP"}]の型)で指定
array - - - ○
template tile-visual-binding要素の
template属性
タイル通知テンプレート String
- - - ○
fallback tile-visual-binding要素の
fallback属性
templateオプションで指定したテ
ンプレートが存在しない場合に使
用されるテンプレート
String
- - - ○
lang tile-visual-binding要素の
lang属性
ロケール文字列 String
- - - ○
addImageQuery
tile-visual-binding要素の
addImageQuery属性
言語、倍率、コントラスト設定クエ
リパラメータの付与フラグ
boolean
- - - ○
baseUri tile-visual-binding要素の
baseUri属性
ベースURI anyURI
- - - ○
branding tile-visual-binding要素の
branding属性
商標指定 String
- - - ○
contentId tile-visual-binding要素の
contentId属性
通知のコンテンツを一意に識別
するための送信者側で定義する
文字列
String
- - - ○
images
- tile-visual-binding-image要素
image要素で指定できるオプショ
ンをJSONオブジェクトの配列
([{"src":"sample.jpg","addImageQuery":"true"}]の型)で指定
array - - - ○
src tile-visual-binding-image要素のsrc属性
イメージのURL String
- - - ○
alt tile-visual-binding-image要素のalt属性
イメージの説明 String
- - - ○
addImageQuery
tile-visual-binding-image要素の
addImageQuery属性
言語、倍率、コントラスト設定クエ
リパラメータの付与フラグ
boolean
- - - ○
texts - tile-visual-binding-text要素
text要素で指定できるオプション
をJSONオブジェクトの配列
([{"message":"message01","lang":"ja-JP"},{"message":"message02","lang":"ja-JP"}]の型)で指定
array - - - ○
- 139 -
定義名 対応する各プッ
シュサービスの
オプション
意味・用途 型 対象(プッシュ種別)
IMAPS
APNs GCM WNS
message
tile-visual-binding-text要素のコンテンツ
メッセージ文字列 String
- - - ○
lang tile-visual-binding-text要素のlang属性
ロケール文字列 String
- - - ○
wns_badge_tile_only 無し true:トースト通知を行わない、
false:トースト通知を行う
boolean
- - - ○
注意
・ テンプレートファイル、およびmessageOptionsで指定する値は、クライアントアプリケーションにバンドルしたリソースに、前もって定
義が必要なものがあります。詳細は、6.2 受信したメッセージの表示の各プッシュのPayload仕様を参照してください。
・ リクエストボディのmessageとテンプレートファイルのmessage両方が指定された場合は、リクエストボディのmessageに設定したものが
優先されます。
・ テンプレートファイルとmessageOptionsの両方に値が設定されている場合は、messageOptionsの値が優先されます。
・ WNSのtile通知では、messageで指定する値は表示されません。リクエストボディのmessageOptions、またはテンプレートファイルの
wns_tile_visual_bindingsの値を指定してください。
・ WNSでtile通知のみを行いたい場合、wns_badge_tile_onlyをtrueに指定することで、message指定が不要になります。
6.6.1.1 テンプレートファイルを指定
・ テンプレートファイル
各プッシュサービスへ送信するメッセージのオプションを、プロパティファイル形式(定義名=指定値)で設定できるファイルです。
・ テンプレートファイルの格納先
定義ファイル(impush.properties)のテンプレートファイルの格納先ディレクトリ(fj_push_template_file_dir)で、テンプレートファイルの
格納先を指定します。
・ APIの指定方法
リクエストボディの変数名"templateFile"に、格納先にあるファイル名を指定します。
・ 文字コード
UTF-8で指定します。
・ 指定可能な定義名
6.6.1 共通メッセージ送信アプリケーションの開発を参照してください。
・ 実装例
以下はテンプレートファイルを指定した場合の例です。
HttpClientBuilder httpclient = HttpClientBuilder.create();
String b64_authval = "1234567890abcdefghijklmnop==";
String url = "https://ホスト名:ポート/pushidmng/notifyCommon";
StringBuilder sb = new StringBuilder();
sb.append("{");
sb.append(" \"message\": \"テストメッセージです。\",");
sb.append(" \"templateFile\": \"templateEmployer001\",");
sb.append(" \"regIDs\": [");
- 140 -
sb.append(" \"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\"");
sb.append(" ]"); sb.append("}");
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("IMAPS-Authorization", "Basic " + b64_authval);
httpPost.setHeader("Content-Type", "application/json; charset=UTF-8");
httpPost.setEntity(new StringEntity(sb.toString(),"UTF-8"));
im_response = httpclient.build().execute(httpPost);
上記の例では、Apache HttpClientのOSSを使用しています。
6.6.1.2 messageOptionsを指定
共通メッセージ送信のリクエストボディに変数値"messageOptions"を指定することで、各プッシュサービスのオプションを指定できます。
指定可能な定義名は、6.6.1 共通メッセージ送信アプリケーションの開発を参照してください。
以下はmessageOptionsを指定した場合の例です。
HttpClientBuilder httpclient = HttpClientBuilder.create();
String b64_authval = "1234567890abcdefghijklmnop==";
String url = "https://ホスト名:ポート/pushidmng/notifyCommon";
StringBuilder sb = new StringBuilder();
sb.append("{");
sb.append(" \"message\": \"テストメッセージです。\",");
sb.append(" \"messageOptions\": {");
sb.append(" \"gcm_title\":\"タイトル006\",");
sb.append(" \"apns_action\":\"http://jp.fujitsu.com/\"");
sb.append(" },");
sb.append(" \"extData\": [");
sb.append(" \"apnsExtData001\",\"gcmExtData001\",\"fjpExtData001\"");
sb.append(" ]"); sb.append("}");
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("IMAPS-Authorization", "Basic " + b64_authval);
httpPost.setHeader("Content-Type", "application/json; charset=UTF-8");
httpPost.setEntity(new StringEntity(sb.toString(),"UTF-8"));
im_response = httpclient.build().execute(httpPost);
上記の例では、Apache HttpClientのOSSを使用しています。
6.6.2 メッセージ送信アプリケーションの開発
メッセージ送信APIを利用することで、各プッシュサービスへ別々のメッセージを送信できます。
以下はメッセージ送信APIを呼び出す例です。
HttpClientBuilder httpclient = HttpClientBuilder.create();
String b64_authval = "1234567890abcdefghijklmnop==";
String url = "https://ホスト名:ポート/pushidmng/notify";
StringBuilder sb = new StringBuilder();
sb.append("{");
sb.append(" \"APNs\": {");
sb.append(" \"aps\": {");
sb.append(" \"alert\": \"test\",");
sb.append(" \"sound\": \"bingbong.aiff\",");
sb.append(" \"badge\": 7");
sb.append(" }");
sb.append(" },");
- 141 -
sb.append(" \"FJP\": {\"message\": \"fjp_message001\"},");
sb.append(" \"regIDs\": [");
sb.append(" \"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\",");
sb.append(" \"12345678901234567890abc\"");
sb.append(" ]"); sb.append("}");
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("IMAPS-Authorization", "Basic " + b64_authval);
httpPost.setHeader("Content-Type", "application/json; charset=UTF-8");
httpPost.setEntity(new StringEntity(sb.toString(),"UTF-8"));
im_response = httpclient.build().execute(httpPost);
上記の例では、Apache HttpClientのOSSを使用しています。
- 142 -
第7章 双方向通信サービスを利用したアプリケーション
本章では、双方向通信サービスを利用して、複数のクライアント間で情報共有を行うアプリケーションの開発方法について説明します。
7.1 概要
双方向通信サービスは、クライアントが双方向でリアルタイムに通信する機能を提供します。サーバのルームと呼ぶ共通領域に接続
(ジョイン)することで、クライアント双方間で通信ができます。
注意
・ 双方向通信サービスは、クライアントのWindows向けハイブリッドアプリケーションとネイティブアプリケーションに対応していませ
ん。
・ 双方向通信サービスは、認証機能、SSL通信機能、ログ機能を備えていないため、利用シーンに合わせてアプリケーションでのセ
キュリティ対策を検討してください。
・ 双方向通信サービスにイントラネット以外から接続する場合は、VPNを使用して接続してください。
・ 双方向通信サービスは、冗長構成にできません。
・ クライアントのアプリケーションの画面に大量のメッセージ等を表示すると、クライアント側のアプリケーションやブラウザのメモリを圧
迫し、パフォーマンスの低下が発生する可能性があります。アプリケーションの画面設計時には、表示する情報量が過度にならな
いように設計をしてください。
ルームは複数作成できます。
ここでは、双方向通信サービスを利用するアプリケーションを、「双方向通信アプリケーション」と記載します。
双方向通信サービスの概要
- 143 -
7.2 API次に例示しているAPIを使って、双方向通信アプリケーションを開発できます。
・ 双方向通信サービスとのコネクション確立
・ メッセージ送受信
アプリケーションは、はじめにコネクション確立をし、メッセージ送信/受信します。
サーバ側のAPIはJavaで提供しており、業務アプリケーション(Java EE/Java EE 6アプリケーション)で使用できます。クライアント側のAPIはJavaScript、Java、Objective-Cで提供しており、Webアプリケーション、ハイブリッドアプリケーション、ネイティブアプリケーションで使
用できます。アプリケーションは、APIのパラメーターに指定された[イベント名]を判断し、それぞれの処理をJavaScript、Java、Objective-Cで実装します。
詳細は、"APIリファレンス"の"双方向通信サービス機能のAPI"を参照してください。
注意
JavaScriptのAPIを利用し、ハイブリッドアプリケーションを作成する場合は、devicereadyイベントのコールバック関数の中に以下の処理を入れてください。
・ io.connect()
・ socket.on()
7.3 イベント
双方向通信アプリケーションは、以下のイベントを双方向通信サービスと送受信することで動作します。
アプリケーションが送信
するイベント名
アプリケーションが受信
するイベント名
内容
connect 双方向通信サービスとのコネクション確立時にアプリケーションへ通知。
join ルームへのジョイン依頼。
→ join ジョイン成功。依頼したクライアントが受信するイベント。
→ coming 他のクライアントがジョイン。依頼したクライアント以外が受信するイベント。
send ルーム内の参加者全員、または指定した参加者にメッセージを送信。他のルー
ムの参加者へ送信。
→ receive メッセージを受信。
list ルーム名の一覧、または指定したルーム内の参加者リストを依頼。
→ list ルーム名の一覧、または参加者リストを受信。
leave ルームからの退室時に送信。
→ leave ルーム参加者の退室時に受信。
disconnect ルーム参加者の接続が切断、またはサーバがダウン時に受信。
7.4 作成例
付録F 双方向通信アプリケーションのサンプルを参照してください。
- 144 -
第8章 認証
本章では、IMAPSで認証機能を利用する方法を説明します。
IMAPSサーバに認証機能を組み込むには、以下の作業をします。
・ 外部DB(IMAPS-DB以外)を使用する場合
ユーザーのパスワードをリポジトリに保管する値に変換するクラスを開発
・ ActiveDirectory以外のLDAPサーバを使用し、パスワードを保管する属性がuserPasswordでない場合
パスワードの変更を行うクラスを開発
上記以外の場合は、認証組み込み時のクラスの開発は不要です。また、IMAPSサーバに認証機能を組み込む場合、以下の機能も開
発できます。
・ 認証したユーザーの情報取得
・ 認証タイムアウトの検出
8.1 ユーザーのパスワードをリポジトリに保管する値に変換するクラスの開発
ログインで指定するパスワードの文字列を元に、データベースに登録しているパスワードに変換するクラスを、以下の手順で作成しま
す。
1. 8.1.1 必要なメソッドを実装する
2. 8.1.2 「認証定義」を作成する
3. 8.1.3 作成したクラスと「認証定義」を設定し登録する
このクラスは平文のパスワードを、使用するデータベースに保管している形式(暗号化やハッシュ化した値)に変換した値を返すように
実装します。このクラスが返した値はログイン時のパスワードの照合やパスワード変更でデータベースにパスワードを保管する際に使
用します。
8.1.1 必要なメソッドを実装する
1. 以下のクラスを継承して必要なメソッドを実装します。
com.fujitsu.imaps.account.models.AbstractPassword
クラスには、java.util.Map<String, String>のパラメーターを持つコンストラクタを実装します。以下のメソッドを実装してください。
/**
* 指定されたパスワードをリポジトリに保管する値に変換します。
* @param password 指定された値
* @return 変換したパスワード
* @throws Exception エラーが発生した場合
*/
public byte[] create(String password) throws Exception;
認証定義に設定したパラメーターは以下のメソッドで取得できます。
/**
* 認証定義の値を取得します。
* @param name 項目名
* @return 値
*/
public String getParameter(String name)
実装例:
- 145 -
package com.xxx;
import com.fujitsu.imaps.account.models.AbstractPassword;
public class CreatePasswordXXX extends AbstractPassword {
/**
* コンストラクタ
*/
public CreatePasswordXXX(Map<String, String> params) {
super(params);
}
@Override
public byte[] create(String password) throws Exception {
// パスワードの生成ロジックを実装。
}
・・・以下、略
2. 次のjarファイルを使って作成したクラスをコンパイルします。
<製品インストールフォルダー>\lib\imauth.jar
/opt/FJSVimaps/lib/imauth.jar
8.1.2 「認証定義」を作成する
1. 次のファイルをコピーします。
<製品インストールフォルダー>\bin\conf\sample\db\authdef.properties
/opt/FJSVimaps/bin/conf/sample/db/authdef.properties
2. コピーしたファイルの以下の項目に値を設定します。
項目 値
password-class 作成したパスワード変換クラスのクラス名を指定します。
例:
password-class=com.xxx.CreatePasswordXXX
8.1.3 作成したクラスと「認証定義」を設定し登録する
1. 作成したクラスをJARファイルにします。
2. 前項のJARファイルを、imadmin auth setコマンドの-jarオプションに指定します。「認証定義」はimadmin auth setの-fileオプション
に指定します。詳細は、"運用ガイド"を参照してください。
3. imadmin auth importでサーバアプリケーションに登録します。詳細は、"運用ガイド"を参照してください。
8.2 パスワードの変更を行うクラスの開発
ログインユーザーのパスワードを変更するクラスを、次の手順で作成します。
1. 8.2.1 必要なメソッドを実装する
2. 8.2.2 「認証定義」を作成する
3. 8.2.3 作成したクラスと「認証定義」を設定し登録する
- 146 -
8.2.1 必要なメソッドを実装する
1. 次のクラスを継承して必要なメソッドを実装します。
com.fujitsu.imaps.account.AbstractChangePassword
クラスには、パラメーターを持たないコンストラクタを実装します。次のメソッドを実装してください。
/**
* パスワードを変更します。
* @param userid ユーザーID
* @param oldPassword 現在のパスワード
* @param newPassword 変更するパスワード
* @return true:パスワードの変更に成功、false:パスワードの変更に失敗
* @throws Exception エラーが発生した場合
*/
public boolean changePassword(String userid, String oldPassword, String newPassword) throws Exception;
認証定義のパラメーターは以下のメソッドで取得します。
/**
* 認証定義の値を取得します。
* @param name 項目名
* @return 値
*/
public String getParameter(String name)
実装例:
package com.xxx;
import com.fujitsu.imaps.account.AbstractChangePassword;
public class ChangePasswordXXX extends AbstractChangePassword {
/**
* コンストラクタ
*/
public ChangePasswordXXX() {
}
@Override
public boolean changePassword(String userid, String oldPassword, String newPassword)
throws Exception {
// パスワードの変更ロジックを実装。
}
・・・以下、略
2. 次のjarファイルを使って作成したクラスをコンパイルします。
<製品インストールフォルダー>\lib\imauth.jar
/opt/FJSVimaps/lib/imauth.jar
8.2.2 「認証定義」を作成する
1. 次のファイルをコピーします。
<製品インストールフォルダー>\bin\conf\sample\db\authdef.properties
/opt/FJSVimaps/bin/conf/sample/db/authdef.properties
- 147 -
2. コピーしたファイルの以下の項目に値を設定します
項目 値
change-password-class ユーザーのパスワードを変更するクラスを指定します。
例:
change-password-class=com.xxx.ChangePasswordXXX
8.2.3 作成したクラスと「認証定義」を設定し登録する
1. 作成したクラスをJARファイルにします。
2. 前項のJARファイルは、imadmin auth setの-jarオプションに指定します。「認証定義」はimadmin auth setの-fileオプションに指定
します。詳細は、"運用ガイド"を参照してください。詳細は、"運用ガイド"を参照してください。
3. imadmin auth importでサーバアプリケーションに登録します。詳細は、"運用ガイド"を参照してください。
8.3 認証したユーザーの情報取得
IMAPS業務サーバで動作する業務アプリに以下の処理を記述すると、認証したユーザー情報を取得できます。取得可能な情報は以
下のとおりです。
・ ユーザーID
・ 氏名
・ ロール名
ユーザーIDはjavax.servlet.http.HttpServletRequestのgetUserPrincipalメソッドで取得できます。
実装例:
public void doPost(HttpServletRequest req, HttpServletResponse) throws ServletException, IOException {
Principal principal = req.getUserPrincipal();
String name = principal.getName(); // ユーザー IDを取得
・・・
}
氏名とロール名はjavax.servlet.ServletRequestのgetAttributeメソッドで取得できます。値がない場合はnullを返します。
値 属性名 型
氏名 com.fujitsu.imaps.auth.userName String
ロール名 com.fujitsu.imaps.auth.roleNames String[]
ロール名についてはjavax.servlet.http.HttpServletRequestのisUserInRoleメソッドでも確認できます。
実装例:
public void doPost(HttpServletRequest req, HttpServletResponse) throws ServletException, IOException {
if(req.isUserInRole(ロール名)) {
// ログインユーザーは引数に指定したロールを持っている
} else {
// ログインユーザーは引数に指定したロールを持っていない
}
・・・
}
8.4 認証タイムアウトの検出
クライアントからサーバに一定期間アクセスがなかった( 大アイドル時間を超えた場合)後にサーバにアクセスした場合、ステータスコ
ード:401で復帰します。
- 148 -
8.4.1 任意のコンテンツを返す方法
タイムアウト時に任意のサーバから任意のコンテンツを返す場合は、サーバアプリケーションのweb.xmlに以下のようにタイムアウト時に
クライアントに返すコンテンツを定義します。クライアントに返すコンテンツで、ステータスコードを200に変更することで任意のコンテン
ツをクライアントで表示できます。
<error-page>
<exception-type>com.fujitsu.imaps.auth.IMAPSTimeoutException</exception-type>
<location>クライアントに返すコンテンツのURL</location>
</error-page>
8.4.2 IMAPSクライアントAPIに通知する方法
IMAPSクライアントAPIにタイムアウトを通知するにはクライアントに返すコンテンツで以下のヘッダーを返します。
X-IMAPS-TIMEOUT: true
この場合も任意のコンテンツを返す方法と同様にステータスコード:200を返すようにしてください。
この場合、IMAPSクライアントのタイムアウト判定API(checkServerTimeout)を利用することで、タイムアウトを検知できます。
サポート対象
Android
・ java.net.HttpURLConnection
・ org.apache.http.HttpResponse
iOS
・ NSURLResponse
Windows
・ Windows.Web.Http.HttpClient
JavaScript
・ XMLHttpRequest
8.4.3 例
web.xmlの定義例
<web-app version="3.0" xmlns=http://java.sun.com/xml/ns/javaee
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
・・・
<error-page>
<exception-type>com.fujitsu.imaps.auth.IMAPSTimeoutException</exception-type>
<location>/timeout/timeout.jsp</location>
</error-page>
</web-app>
タイムアウトを通知するサーバアプリケーションのコンテンツの実装例(timeout/timeout.jsp)
<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" %>
<%
response.setHeader("X-IMAPS-TIMEOUT", "true");
response.setStatus(200);
%>
<html>
<head>
<title>401 Unauthorized</title>
</head>
- 149 -
<body>
<b>401 Unauthorized</b><br>
</body>
</html>
Androidでの実装例
private void connection() {
new AsyncConnectTask(接続URL).execute();
}
class AsyncConnectTask extends AsyncTask<String, String, String> {
LoginManager mLoginManager = null;
String mURL = null;
・・・・
public AsyncConnectTask(String url) {
mLoginManager = new LoginManager(getApplicationContext());
mURL = url;
・・・・
}
protected String doInBackground(String... params) {
try{
URL url = new URL(mURL);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
・・・
mLoginManager.setRequestAuth(httpPost, httpClient);
HttpResponse response = httpClient.execute(httpPost);
mLoginManager.checkServerTimeout(response);
・・・
mLoginManager.saveResponseAuth(url, httpClient);
・・・
} catch (IMAPSAuthTimeOutException e) {
// ログアウト処理の実装を行うことを推奨します。
} catch (例外キャッチ) {
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
}
iOSでの実装例
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
IMALoginManager *loginManager = [[IMALoginManager alloc] init];
NSError *anError = nil;
BOOL result = [loginManager checkServerTimeout:response error:&anError];
if(result == NO) {
// それぞれのエラーの実装.
}
}
Windowsでの実装例
private async void connection(string url)
{
try {
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri(url));
LoginManager lm = new LoginManager();
lm.setRequestAuth(request);
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.SendRequestAsync(request);
// サーバータイムアウトの検出.
lm.checkServerTimeout(response);
- 150 -
・・・
} catch (IMAPSAuthTimeOutException e) {
// ログアウト処理の実装を行うことを推奨します。
} catch (例外キャッチ) {
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}
JavaScriptでの実装例
function getContent(url) {
var xmlHttp;
xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", url, false);
imaps.auth.setRequestHeader(resultHandler, errorHandler, xmlHttp);
}
function resultHandler(result) {
xmlHttp.send(null);
if(imaps.auth.checkResponseHeader(xmlHttp)) {
alert("SERVER TIME OUT");
} else {
alert(xmlHttp.responseText);
}
}
function errorHandler(error) {
alert("Error: \r\n"+error );
}
8.5 Web画面上からイベントとして受信する方法
Web画面上からタイムアウトをイベントとして受信できます。 イベントを受け取ることで、タイムアウト発生時にネイティブアプリケーション
側で必要な後処理ができます。
注意
Web画面上からタイムアウトをイベントとして受信する方法は、AndroidとiOSに対応しています。
実装方法
サーバアプリケーション
・ Cordova APIを使用してコンテンツの読み込み時にタイムアウトのイベントを通知するコンテンツを返すように実装します。この場
合も任意のコンテンツを返す方法と同様にステータスコード:200を返すようにしてください。
Android
・ CordovaActivityクラスのonMessageメソッド内で"IMAPS_EVENT_AUTH_TIMEOUT_ERROR"イベントを受け取るよう実装しま
す。
iOS
・ IMAAuthViewControllerを継承し、IMAAuthViewControllerDelegateのdidFailLoadWithErrorメソッドを実装します。
以下サーバアプリケーションのコンテンツの配置例です。
Timeout
+-- timeout.jsp
+-- js
+-- android
+-- cordova.js
+-- ios
+-- cordova.js
- 151 -
cordova.jsは以下に保管されているものをコピーしてサーバアプリケーションに含めます。
また、cordova.jsの配置先には認証が有効にならないようにimadmin auth importコマンドで設定します。
Android
<製品インストールフォルダー>\development\android\cordovajs\cordova.js
/opt/FJSVimsrv/development/android/cordovajs/cordova.js
iOS
<製品インストールフォルダー>\development\ios\cordovajs\cordova.js
/opt/FJSVimsrv/development/ios/cordovajs/cordova.js
上記ディレクトリからcordova.jsをコピーします。
タイムアウトを通知するサーバアプリケーションのコンテンツの実装例(timeout/timeout.jsp)
<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" %>
<%
response.setHeader("X-IMAPS-TIMEOUT", "true");
response.setStatus(200);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>401 Unauthorized</title>
<script type="text/javascript">
var require;
if(/Android/i.test(navigator.userAgent)){
require = "<%=request.getContextPath()%>\/timeout\/js\/android\/cordova.js";
} else {
require = "<%=request.getContextPath()%>\/timeout\/js\/ios\/cordova.js";
}
document.write('<scr'+'ipt type="text/javascript" src="'+require+'" onload="onLoad()"><\/scr'+'ipt>');
function onLoad() {
document.addEventListener("deviceready",
function () {
cordova.exec(false, false, "AuthPlugin", "unauthorized", []);
}, false);
}
</script>
</head>
<body>
<b>401 Unauthorized</b><br>
</body>
</html>
Androidでの実装例
public class WebViewActivity extends CordovaActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Config.init(this);
init();
super.loadUrl(Config.getStartUrl());
}
@Override
public Object onMessage(String id, Object data) {
if(id.equals("IMAPS_EVENT_AUTH_TIMEOUT_ERROR")) {
new AlertDialog.Builder(this)
- 152 -
.setTitle("Timeout")
.setMessage("タイムアウトが発生しました")
.setPositiveButton("OK", null)
.create()
.show();
}
return super.onMessage(id, data);
}
}
iOSでの実装例
#pragma mark IMAAuthViewControllerDelegate implementation
- (void) didFailLoadWithError:(NSError *)anError
{
NSString *message = [self getErrorMsg:anError];
NSLog(@"didFailLoadWithError %@", message);
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Timeout"
message:@"タイムアウトが発生しました"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
- 153 -
付録A プッシュWeb APIプッシュ通知が提供するプッシュWeb APIについて説明します。
プッシュWeb APIの呼び出し形式は以下のとおりです。
http(s)://<IMAPSサーバ>:<ポート番号>/pushidmng/機能パス
※ポート番号はデフォルトでは8153番です。
APIが返却するステータスコードは、 表A.1 APIが返却するステータスコード に示すとおりです。○は返却される値です。
表A.1 APIが返却するステータスコード
コード 意味
(W3C)本APIでの意味
登録ID情
報取得
登録IDの
一覧取得
登録IDの削除
メッセー
ジ送信
蓄積メッセ
ージ参照
共通メッセ
ージ送信
登録IDの検索
IMAPSプッシュ
ID更新
デバイスト
ークン登
録/更新
registrationID登
録/更新
200 OK 処理成
功
○ ○ ○ ○ ○ ○ ○ ○ - -
201 Created 生成処
理成功
- - - - - - - - ○ ○
400 BadRequest
リクエスト
違反
○ ○ ○ ○ ○ ○ ○ ○ ○ ○
404 NotFound
リソース
がない
○ ○ ○ ○ ○ ○ ○ ○ ○ ○
500 InternalServerError
そのほ
かのエラ
ー
○ ○ ○ ○ ○ ○ ○ ○ ○ ○
表A.2 APIが返却するステータスコード
コード 意味
(W3C)本APIでの意味
チャネルURI登録/更新
メッセージIDから
のメッセージ情報
の取得
登録IDからのメッ
セージ情報の取
得
既読件数の取得
200 OK 処理成
功
- ○ ○ ○
201 Created 生成処
理成功
○ - - -
400 BadRequest
リクエスト
違反
○ ○ ○ ○
404 NotFound
リソース
がない
○ ○ ○ ○
500 InternalServerError
そのほ
かのエラ
ー
○ ○ ○ ○
メッセージの内容は以下のとおりです。
・ コードが200番台 :空文字
・ コードが200番台以外:プッシュのエラーコード、メッセージ
ステータスコードへの対処方法は以下のとおりです。
コード 対処方法
200(注) 処理成功です。特に対処は必要ありません。
201 生成処理成功です。特に対処は必要ありません。
400 ・ パラメーターが誤っています。レスポンスのメッセージを元に、メッセージ集を参照して対処を実施してください。
- 154 -
コード 対処方法
・ メッセージログ(im_msg.log)を参照し、Web APIを実行した時間帯にメッセージが出力されていないか確認してくださ
い。
404 ・ 正しいURLを指定しているか確認してください。
・ レスポンスのメッセージを元に、メッセージ集を参照して対処を実施してください。
・ メッセージログ(im_msg.log)を参照し、Web APIを実行した時間帯にメッセージが出力されていないか確認してくださ
い。
500 ・ レスポンスのメッセージを元に、メッセージ集を参照して対処を実施してください。
・ メッセージログ(im_msg.log)を参照し、Web APIを実行した時間帯にメッセージが出力されていないか確認してくださ
い。
注)A.14 メッセージの送信(非推奨) の場合、ステータスコード、メッセージの他、各登録IDのステータスコード、メッセージがレスポン
スとして返ります。ステータスコードが200の場合であっても、各登録IDのステータスコード、メッセージを確認する必要があります。
注意
・ プッシュWeb APIは、AndroidとiOS、Windowsに対応しています。
・ レスポンス(JSON形式)の出力順は、マニュアルの形式と異なることがあります。
・ プッシュWeb APIのリクエストボディに同様の変数名を複数指定した場合は、 後に指定したものが有効となります。
A.1 登録ID情報の取得
指定した登録IDについての詳細情報を取得します。登録IDには、IMAPSプッシュの場合はIMAPSプッシュID、APNsの場合はデバイ
ストークン、GCMの場合はregistrationID、WNSの場合はチャネルURIを設定してください。
A.1.1 リクエスト
メソッド
POST
機能パス
/regID
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"regID":"登録ID"
}
変数名 説明 省略 型 指定値、または例
regID 登録ID
・ IMAPSプッシュの場合、IMAPSプッシュID
・ APNsの場合、デバイストークン
・ GCMの場合、registrationID
不可 String
- 155 -
変数名 説明 省略 型 指定値、または例
・ WNSの場合、チャネルURI
A.1.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response":{
"code":"ステータスコード",
"message":"メッセージ"
},
"pushKind": プッシュ種別",
"appName": "アプリケーション名",
"extData": "拡張データ",
"sandboxFlag":"サンドボックスフラグ"
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
pushKind プッシュ種別(WNS、APNs、GCM、FJPのいずれか) String
appName アプリケーション名 String
extData 拡張データ String
sandboxFlag ・ サンドボックスフラグ
・ APNsの場合
true:sandbox版
false:release版
・ IMAPSプッシュ、GCM、WNSの場合
空文字
String
注意
取得対象の登録IDが存在しない場合でも、レスポンスとして処理成功(ステータスコードが200)を返します。この場合、pushKind、
appName、extData、sandboxFlagはすべて空文字となります。
A.1.3 使用例
登録ID(reg12345678901234567890)の情報を取得する場合
https://(server):(port)/pushidmng/regID
{"regID":"BIzaSyCljf_wbiDcPcYX2QqknssYefUPPBZJ0rA"}
- 156 -
レスポンス例
{"response":{"code":"200","message":""},"pushKind": GCM","appName": "apl001","extData": "extData0000","sandboxFlag":""}
A.2 登録IDの一覧取得
登録IDの一覧を取得します。検索条件を指定することで取得する一覧を絞り込むことができます。
A.2.1 リクエスト
メソッド
POST
機能パス
/regIDs
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"pushKind":"プッシュ種別",
"appName":"アプリケーション名",
"sandboxFlag":"サンドボックスフラグ",
"getExtFlag":"拡張データ通知",
"offset":"取得開始件数",
"maxCount":"取得最大件数"
}
変数名 説明 省略 型 指定値、または例
pushKind プッシュ種別 可 String ・ デフォルト:全プッシュ種別を対象
・ WNS、APNs、GCM、FJPのいずれかを指
定
appName アプリケーション名 不可 String ・ 文字種:半角英数字+記号
・ 大サイズ:1024byte
sandboxFlag サンドボックスフラグ
APNsのデバイストークンが含まれる
場合に有効
可 boolean ・ デフォルト:false
true:sandbox版
false:release版
getExtFlag 拡張データ通知 可 boolean ・ デフォルト:false
true:拡張データを含む
false:拡張データを含まない
offset 取得開始件数 可 int ・ デフォルト:1
・ 指定範囲:1以上の値
maxCount 取得 大件数 可 int ・ デフォルト:定義ファイル(impush.properties)の同時指定可能な 大登録ID数
(fj_push_max_num_for_address)
・ 指定範囲:1以上の値
- 157 -
注意
・ 取得開始件数が指定された場合は、検索条件に一致するデータのうち、取得開始件数以降のデータを返却します。検索結果
が取得開始件数未満の場合、データは返却されません。
・ 取得 大件数が指定された場合は、検索条件に一致するデータのうち、取得 大件数分のデータを返却します。指定値が0
以下、または、定義ファイル(impush.properties)の同時指定可能な 大登録ID数(fj_push_max_num_for_address)を超えている
場合はエラーとします。
A.2.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": " ステータスコード",
"message": "メッセージ"
},
"dataCount": {
"totalCount": "全件数",
"currentCount": "通知件数"
},
"regIDs": [
{
"regID": "登録ID",
"extData":"拡張データ"
},
{
"regID": "登録ID",
"extData":"拡張データ"
},
{
"regID": "登録ID",
"extData":"拡張データ"
},
...
]
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
dataCount 件数 -
totalCount 条件に一致する全件数 int
currentCount レスポンスに含まれる件数 int
regIDs 登録IDのリスト 配列
regID 登録ID String
- 158 -
変数名 説明 型
extData 拡張データ String
注意
一覧取得処理中に登録IDが削除されると、以下の不整合が発生する場合があります。登録IDの削除業務との同時実行は行わな
いようにしてください。
・ 全件数が通知件数より少ない。
・ 削除された登録ID以降の数件のデータが通知されない。
A.2.3 使用例
すべてのプッシュ種別(IMAPSプッシュ、APNs、GCM、WNS)、アプリケーション名(app001)の登録IDの一覧を取得する場合
https://(server):(port)/pushidmng/regIDs
{"appName":"app001"}
プッシュ種別FJP、アプリケーション名(app001)の登録ID一覧を取得する場合
https://(server):(port)/pushidmng/regIDs
{"pushKind":"FJP","appName":"app001"}
プッシュ種別FJPのアプリケーション名(app001)の登録IDの1件目から100件の一覧を取得する場合
https://(server):(port)/pushidmng/regIDs
{"pushKind":"FJP","appName":"app001","offset":1,"maxCount:100}
レスポンス例(getExtFlag=falseの場合)
{"response":{"code":"200","message":""},"dataCount":{"totalCount":"2","currentCount":"2"},
"regIDs":[{"regID":"9983cd8368330cf800620350d609925153d43119f5e4d607fea362356e11668a","extData":""},
{"regID":"qPudDDVCLfYuD6FoouRVJpi","extData":""}]}
A.3 登録IDの検索
拡張データを検索条件として、登録IDを検索します。
A.3.1 リクエスト
メソッド
POST
機能パス
/findRegID
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"extData":"拡張データ",
- 159 -
"exactFlag":"検索方法"
}
変数名 説明 省略 型 指定値、または例
extData 拡張データ(検索条件) 不可 String ・ 文字種:半角英数字+記号
・ 大サイズ:1024byte
exactFlag 検索方法フラグ 可 boolean ・ デフォルト:true
true:完全一致
false:部分一致
注意
・ extDataに空文字を指定した場合、エラーとなります。
A.3.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": "ステータスコード",
"message": "メッセージ"
},
"regIDs":
[
{
"regID": "登録ID",
"extData": "拡張データ"
},
{
"regID": "登録ID",
"extData": "拡張データ"
},
...
]
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
regIDs 登録IDのリスト 配列
regID 登録ID String
extData 拡張データ String
- 160 -
注意
検索対象となる登録IDが存在しない場合でも、レスポンスとして処理成功(ステータスコードが200)を返します。
A.3.3 使用例
例1-1) 拡張データ"extData001"を指定して、登録IDを検索する場合
http(s)://(server):(port)/pushidmng/findRegID
{
"extData":"extData001"
}
例1-2) レスポンス例
{
"response":{
"code":"200",
"message":""
},
"regIDs":[
"extData":"extData001",
"regID":"regID001"
]
}
例2-1) 存在しない拡張データ"extData002"を指定して、登録IDを検索する場合
http(s)://(server):(port)/pushidmng/findRegID
{
"extData":"extData002"
}
例2-2) レスポンス例
{
"response":{
"code":"200",
"message":""
},
"regIDs": []
}
A.4 登録IDの削除
指定した登録IDを削除します。登録IDには、IMAPSプッシュの場合はIMAPSプッシュID、APNsの場合はデバイストークン、GCMの場
合はregistrationID、WNSの場合はチャネルURIを設定してください。
A.4.1 リクエスト
メソッド
POST
機能パス
/delRegIDs
引数
なし
- 161 -
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"regIDs":["登録ID","登録ID",…]
}
変数名 説明 省略 型 指定値、または例
regIDs 登録IDのリスト
・ IMAPSプッシュの場合、IMAPSプッシュID
・ APNsの場合、デバイストークン
・ GCMの場合、registrationID
・ WNSの場合、チャネルURI
不可 String
注意
・ 登録IDを削除した場合、「メッセージIDからのメッセージ情報の取得」、「登録IDからのメッセージ情報の取得」を行っても、削除し
た登録IDに関連する情報は取得できなくなります。
A.4.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": "ステータスコード",
"message": "メッセージ"
}
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
注意
削除対象の登録IDが存在しない場合でも、レスポンスとして処理成功(ステータスコードが200)を返します。
A.4.3 使用例
登録ID(BIzaSyCljf_wbiDcPcYX2QqknssYefUPPBZJ0rA、qPudDDVCLfYuD6FoouRVJpi)を削除する場合
- 162 -
https://(server):(port)/pushidmng/delRegIDs
{
"regIDs":["BIzaSyCljf_wbiDcPcYX2QqknssYefUPPBZJ0rA","qPudDDVCLfYuD6FoouRVJpi"]
}
レスポンス例
{"response":{"code":"200","message":""}}
A.5 IMAPSプッシュIDの更新
IMAPSプッシュID、アプリケーション名を条件として、拡張データを更新します。
A.5.1 リクエスト
メソッド
POST
機能パス
/fjpRegID
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"appName":"アプリケーション名",
"extData":"拡張データ",
"regID":"登録ID"
}
変数名 説明 省略 型 指定値、または例
appName アプリケーション名 不可 String ・ 文字種:半角英数字+記号
・ 大サイズ:1024byte
extData 拡張データ 可 String ・ 文字種:半角英数字+記号
・ 大サイズ:1024byte
regID 登録ID 不可 String
注意
・ 業務サーバのデータベースで管理しているIDを拡張データとして登録している場合、業務データベースと同時にIMAPSプッシュ
IDの拡張データを更新してください。
・ 本APIでは、IMAPSプッシュIDを新規に登録できません。新規登録の詳細は、6.5 クライアントのアプリケーションの開発を参照し
てください。
A.5.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
- 163 -
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": "ステータスコード",
"message": "メッセージ"
}
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
A.5.3 使用例
登録ID(qPudDDVCLfYuD6FoouRVJpi)、アプリケーション名(appName001)の拡張データを、"extData001"に更新する場合
http(s)://(server):(port)/pushidmng/fjpRegID
{
"appName":"appName001",
"regID":"qPudDDVCLfYuD6FoouRVJpi",
"extData":"extData001"
}
レスポンス例
{
"response":
{
"code":"200",
"message":""
}
}
A.6 APNsのデバイストークン登録、更新
本APIでは、初めて指定するAPNsのデバイストークンの場合は登録し、登録済の場合は更新します。
更新では、登録済のAPNsのデバイストークン、サンドボックス、アプリケーション名を条件として、拡張データを更新します。
A.6.1 リクエスト
メソッド
POST
機能パス
/apnsRegID
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
- 164 -
ボディ
以下の形式です。
{
"deviceToken":"デバイストークン",
"appName":"APNsのアプリケーション名",
"sandboxFlag":"サンドボックス",
"extData":"拡張データ"
}
変数名 説明 省略 型 指定値、または例
deviceToken APNsのデバイストークン 不可 String
appName APNsのアプリケーション名 不可 String ・ 文字種:半角英数字+記号
・ 大サイズ:1024byte
sandboxFlag サンドボックス 可 boolean ・ デフォルト:false
true:sandbox版
false:release版
extData 拡張データ 可 String ・ 文字種:半角英数字+記号
・ 大サイズ:1024byte
注意
業務サーバのデータベースで管理しているIDを拡張データとして登録している場合、業務データベースと同時にIMAPSプッシュIDの拡張データを更新してください。
A.6.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": "ステータスコード",
"message": "メッセージ"
}
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
A.6.3 使用例
release版のデバイストークン (9983cd8368330cf800620350d609925153d43119f5e4d607fea362356e11668a)、アプリケーション名
(appName002)の拡張データを、"extData002"に更新する場合
- 165 -
http(s)://(server):(port)/pushidmng/apnsRegID
{
"appName":"appName002",
"deviceToken":"9983cd8368330cf800620350d609925153d43119f5e4d607fea362356e11668a",
"extData":"extData002"
}
レスポンス例
{
"response":
{
"code":"201",
"message":""
}
}
A.7 GCMのregistrationID登録、更新
本APIでは、初めて指定するGCMのregistrationIDの場合は登録し、登録済の場合は更新します。
更新では、登録済のGCMのregistrationID、アプリケーション名を条件として、拡張データを更新します。
A.7.1 リクエスト
メソッド
POST
機能パス
/gcmRegID
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"registrationID":"レジストレーションID",
"appName":"GCMのアプリケーション名",
"extData":"拡張データ"
}
変数名 説明 省略 型 指定値、または例
registrationID GCMのレジストレーションID 不可 String
appName GCMのアプリケーション名 不可 String ・ 文字種:半角英数字+記号
・ 大サイズ:1024byte
extData 拡張データ 可 String ・ 文字種:半角英数字+記号
・ 大サイズ:1024byte
注意
業務サーバのデータベースで管理しているIDを拡張データとして登録している場合、業務データベースと同時にIMAPSプッシュIDの拡張データを更新してください。
- 166 -
A.7.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": "ステータスコード",
"message": "メッセージ"
}
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
A.7.3 使用例
registrationID(registrationID001)、アプリケーション名(appName003)の拡張データを、"extData003"に更新する場合
http(s)://(server):(port)/pushidmng/gcmRegID
{
"appName":"appName003",
"registrationID":"registrationID001",
"extData":"extData003"
}
レスポンス例
{
"response":
{
"code":"201",
"message":""
}
}
A.8 WNSのチャネルURI登録、更新
本APIでは、初めて指定するWNSのチャネルURIの場合は登録し、登録済の場合は更新します。
更新では、登録済のWNSのチャネルURI、アプリケーション名を条件として、拡張データを更新します。
A.8.1 リクエスト
メソッド
POST
機能パス
/wnsRegID
- 167 -
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"channelUri":"チャネルURI",
"appName":"アプリケーション名",
"extData":"拡張データ"
}
変数名 説明 省略 型 指定値、または例
channelUri チャネルURI 不可 String 大2048文字
appName WNSのアプリケーション名 不可 String ・ 文字種:半角英数字+記号
・ 大サイズ:1024byte
extData 拡張データ 可 String ・ 文字種:半角英数字+記号
・ 大サイズ:1024byte
注意
業務サーバのデータベースで管理しているIDを拡張データとして登録している場合、業務データベースと同時にIMAPSプッシュIDの拡張データを更新してください。
A.8.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": "コード",
"message": "メッセージ"
}
}
変数名 説明 型
response レスポンス String ASCII
code コード int
message メッセージ String ASCII
A.8.3 使用例
新規にWNSの情報を登録する場合
- 168 -
https://(server):(port)/pushidreg/wnsRegID
{
"channelUri":"https://sin.notify.windows.com/?token=1234567890",
"appName":"app001"
}
レスポンス例
{
"response":
{
"code":"200",
"message":""
}
}
A.9 共通メッセージの送信
指定した宛先に共通のメッセージを送信します。
A.9.1 リクエスト
メソッド
POST
機能パス
/notifyCommon
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"message":"メッセージ",
"replace":{"置換変数名":"置換文字列",…}(JSON形式),
"templateFile":"テンプレートファイル名",
"messageOptions":メッセージオプション(JSON形式),
"regIDs":["登録ID",...],
"extData":["拡張データ",...]
}
変数名 説明 省略 型 指定値、または例
message 送信する共通のメッセージ 可 String ・ replaceを使用する場合の例
"message":"%%name%%さん、%%age%%歳の誕生日おめでとうございます"
・ %%は文字列として使用不可
・ 「\」を表記するときは「\\」と指定
・ テンプレートファイルのmessageも同時指定
した際は、当指定値が優先して設定される
replace ・ 置換変数名:置換文字列の
JSON形式で指定
可 String ・ {"name":"富士通太郎","age":"30"}
- 169 -
変数名 説明 省略 型 指定値、または例
・ message内の「%%」で囲まれた
文字列(置換変数名)を、置換文
字列に置き換える
・ messageで「%%」で囲まれた文字列がある
場合は省略不可
templateFile テンプレートファイル名 可 String ・ 定義ファイル(impush.properties)のテンプ
レートファイルの格納先ディレクトリ
(fj_push_template_file_dir)に格納されてい
るファイルが対象
・ ファイルが存在しない場合はエラー
・ テンプレートファイルの記述内容は、6.6.1.1テンプレートファイルを指定を参照
messageOptions 送信メッセージのオプション 可 String ・ GCM,APNs,FJP,WNSのメッセージに関す
るオプションを指定
・ 指定可能なオプションは、6.6.1.2messageOptionsを指定を参照
regIDs メッセージ送信先として登録IDをリ
ストで指定
・ IMAPSプッシュの場合、IMAPSプッシュID
・ APNsの場合、デバイストークン
・ GCMの場合、registrationID
・ WNSの場合、チャネルURI
可 Stringの配
列
・ 大件数:定義ファイル(impush.properties)の同時指定可能な 大登録ID数
(fj_push_max_num_for_address)
・ extDataと排他
extData メッセージ送信先として拡張データ
をリストで指定
可 Stringの配
列
・ 大件数:定義ファイル(impush.properties)の同時指定可能な 大登録ID数
(fj_push_max_num_for_address)
・ regIDsと排他
注意
・ FJP,APNs,WNSは1件ごと(シリアル)に情報送信を行うため時間がかかります。APNs経由でメッセージを送信する時は、1件送
信するごとにインターバルを設定するため、GCMやFJPと比べると特に時間がかかります。
・ APNsにメッセージ送信する際は、フィードバック情報も取得し、ログに出力します。
・ regIDsに同じ登録IDを複数件指定した場合、対象の登録IDを1件指定した場合と同じ動作になります。
・ スマートデバイスからプッシュ基盤サーバへの初回の接続前には、メッセージ送信を行ってもメッセージの受信、蓄積は行われ
ませんが、レスポンスはメッセージ送信成功が返ります。
・ 大登録ID数(fj_push_max_num_for_address)の 大値(1000件)より多くの登録IDに送信したい場合は、呼び出し元でメッセ
ージの送信APIを繰り返すことになります。
・ リクエストボディにregIDsを指定した場合、レスポンスのextDataは空文字が返ります。
・ リクエストボディにextDataを指定した場合、レスポンスはextDataとそれに紐付くregID情報が返ります。
・ extDataに同じ拡張データを複数件指定した場合、対象の拡張データを1件指定した場合と同じ動作になります。
・ リクエストボディにextDataを指定した場合、指定したextData、またはextDataに紐付く登録IDの件数の合計が定義ファイル
(impush.properties)の 大登録ID数(fj_push_max_num_for_address)の値を超えるとエラーとなります。
・ msgIDは、responseのcodeが200の場合で、かつsuccessが1件以上ある場合にメッセージIDが返されます。条件を満たさない場
合は空文字が返されます。
・ msgIDの情報が送信メッセージに付加されるため、既読機能を使用する場合は送信可能メッセージサイズが72Byte少なくなり
ます。
- 170 -
・ メッセージサイズの上限チェックはmessageおよびreplace、messageOptions、テンプレートファイルで指定した情報に基づいて生
成されたPayload情報が対象となります。上限を超えた場合はエラーとなります。 上限値については下記のとおりです。
- FJP: 4096byte (FJPのPayloadがチェック対象となります)
- APNs: 2048byte (APNsのPayloadがチェック対象となります)
- GCM: 4096byte (GCMのPayloadのうち"data"部分がチェック対象となります)
- WNS: 5119byte (WNSのPayloadがチェック対象となります)
・ messageOptionsで指定する型が異なっている場合、エラーとなり、1件もメッセージを送信されません。指定可能な型は、6.6.1共通メッセージ送信アプリケーションの開発を参照してください。
・ messageOptionsで指定するキーが未定義の場合、指定した情報は処理されません(パラメータエラーとならずクライアントにも配
信されません)。指定可能な定義名は、6.6.1 共通メッセージ送信アプリケーションの開発を参照してください。
このため、プッシュのPayload仕様をユーザーアプリ側で拡張するような使い方はできません。
・ テンプレートファイルとmessageOptionsの両方に値が設定されている場合は、messageOptionsの値が優先されます。ただし、テ
ンプレートファイルに異なる型が指定されるとエラーとなります。
A.9.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": "ステータスコード",
"message": "メッセージ"
}
"success": 成功数,
"failure": 失敗数,
"msgID":"メッセージID",
"responses": [
{
"regID": "登録ID",
"extData": "拡張データ",
"response": {
"code": "各登録IDのステータスコード",
"message": "各登録IDのメッセージ"
}
},
...
]
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
success 成功数 int
failure 失敗数 int
- 171 -
変数名 説明 型
msgID メッセージID String
responses 送信結果 配列
regID 登録ID String
extData 拡張データ String
response レスポンス -
code 各登録IDのステータスコード int
message 各登録IDのメッセージ String
各登録IDのステータスコードについて
返却するステータスコードは以下のとおりです。○は返却される値です。
コード 意味(W3C) 本APIでの意味 IMAPSプッシュ APNs GCM WNS
200 OK 処理成功 ○ ○ ○ ○
400 Bad Request リクエスト違反 ○ ○ ○ ○
404 Not Found リソースがない ○ ○ ○ ○
500 Internal ServerError
そのほかのエラー ○ ○ ○ ○
メッセージの内容は以下のとおりです。
コードが200番台:空文字
コードが200番台以外:プッシュのエラーコード、メッセージ
メッセージが最大サイズを超えた場合の振る舞い
定義ファイル情報(impush.properties)のfj_push_message_fail_send_exitのステータスがtrueの場合、送信メッセージの形式に誤り
があると指定した登録IDへ1件もメッセージを送りません。falseの場合は、送信可能な登録IDへはメッセージを送ります。
APNs、GCM、WNSへの送信に失敗した場合
・ APNsへのメッセージ送信に失敗した場合は、APNsの公式サイトやマニュアルを確認してください。
・ GCMへのメッセージ送信に失敗した場合は、GCMの公式サイトやマニュアルを確認してください。
・ WNSへのメッセージ送信に失敗した場合は、WNSの公式サイトやマニュアルを確認してください。
リクエストの内容に問題があった場合の振る舞い
以下の場合、レスポンスで返ってくるsuccess,failureそれぞれの値は0となります。
・ リクエストのボディやFJP,APNs,GCM,WNSの送信メッセージがJSON形式でない場合
・ リクエストのボディにregIDsの変数名が存在しない又は宛先数が0件の場合
A.9.3 使用例
使用する登録ID、拡張データの一覧表
プッシュ種別 登録ID 拡張データ
IMAPSプッシュ fjpRegID001 fjpExtData001
APNs abc001 apnsExtData001
GCM gcmRegID001 gcmExtData001
GCM gcmRegID002 gcmExtData00
GCM gcmRegID003 gcmExtData00
WNS wnsRegID001 wnsExtData001
- 172 -
使用するテンプレートファイルの内容
message=%%replace%%message
gcm_collapse_key=abcde
gcm_time_to_live=10000
gcm_delay_while_idle=false
gcm_title=default_title
apns_sound=bingbong.aiff
apns_badge=1
fjp_action= http://example.com/
例1-1) IMAPSプッシュの登録ID(fjpRegID001)、APNsの登録ID(abc001)、GCM(gcmRegID001)、WNS(wndRegID001)にテンプレー
トファイル名を指定して同一のメッセージを送信する場合
http(s)://(server):(port)/pushidmng/notifyCommon
{
"message":"メッセージ001",
"templateFile":"exampleTmp.template",
"regIDs":["fjpRegID001","abc001","gcmRegID001","wnsRegID001"]
}
例1-2) 実際に送信されるメッセージ情報
- IMAPSプッシュ
{
"message":"メッセージ001",
"action":"http://example.com/"
}
- APNs
{
"aps":{
"alert":{
"body":"メッセージ001"
},
"sound":"bingbong.aiff",
"badge":1
}
}
- GCM
{
"collapse_key":"abcde",
"time_to_live":10000,
"delay_while_idle":"false",
"data":{
"title":"default_title"
"message":"メッセージ001"
},
"registration_ids":["gcmRegID001"]
}
- WNS
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wns>
<toast>
<visual>
<binding template="ToastText01">
<text id="1">メッセージ001</text>
</binding>
</visual>
</toast>
</wns>
- 173 -
例1-3) レスポンス例
{
"response": {"code": "200", "message": ""},
"success": 4,
"failure": 0,
"msgID":"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
"responses": [
{ "regID":"fjpRegID001","extData":"","response": {"code": "200", "message": ""}},
{ "regID":"abc001","extData":"","response": {"code": "200", "message": ""}},
{ "regID":"gcmRegID001","extData":"","response": {"code": "200", "message": ""}},
{ "regID": "wnsRegID001","response": {"code": 200, "message": ""}},
]
}
例2-1) IMAPSプッシュの拡張データ(fjpExtData001)、APNsの拡張データ(apnsExtData001)、GCMの拡張データ(gcmExtData001)、
WNSの拡張データ(wnsExtData001)にメッセージを送信し、messageOptionsも合わせて指定する場合
http(s)://(server):(port)/pushidmng/notifyCommon
{
"message":"メッセージ002",
"messageOptions":{
"gcm_title":"タイトル002",
"apns_action":"http://example.com/",
"apns_badge":5
},
"extData":["fjpExtData001","apnsExtData001","gcmExtData001","wnsExtData001"]
}
例2-2) 実際に送信されるメッセージ情報
- IMAPSプッシュ
{
"message":"メッセージ002"
}
- APNs
{
"aps":{
"alert":{
"body":"メッセージ002"
},
"badge":5
},
"action":"http://example.com/"
}
- GCM
{
"data":{
"title":"タイトル002",
"message":"メッセージ002"
},
"registration_ids":["gcmRegID001"]
}
- WNS
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wns>
<toast>
<visual>
<binding template="ToastText01">
<text id="1">メッセージ002</text>
</binding>
- 174 -
</visual>
</toast>
</wns>
例2-3) レスポンス例
{
"response": {"code": "200", "message": ""},
"success": 4,
"failure": 0,
"msgID":"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
"responses": [
{ "regID":"fjpRegID001","extData":"fjpExtData001","response": {"code": "200", "message": ""}},
{ "regID":"abc001","extData":"apnsExtData001","response": {"code": "200", "message": ""}},
{ "regID":"gcmRegID001","extData":"gcmExtData001","response": {"code": "200", "message": ""}},
{ "regID":"wnsRegID001","extData":"wnsExtData001","response": {"code": "200", "message": ""}}
]
}
例3-1) IMAPSプッシュの登録ID(fjpRegID001)、APNsの登録ID(abc001)、GCM(gcmRegID001)、WNS(wnsRegID001)にテンプレー
トファイルを指定し、置換文字列を指定してメッセージを送信する場合
http(s)://(server):(port)/pushidmng/notifyCommon
{
"message":"%%replaceStr%%メッセージ003",
"replace":{"replaceStr":"ExampleMsg"},
"templateFile":" exampleTmp.template ",
"regIDs":["fjpRegID001","abc001","gcmRegID001","wnsRegID001"]
}
例3-2) 実際に送信されるメッセージ情報
- IMAPSプッシュ
{
"message":"ExampleMsgメッセージ003",
"action":"http://example.com/"
}
- APNs
{
"aps":{
"alert":{
"body":"ExampleMsgメッセージ003"
},
"sound":"bingbong.aiff",
"badge":1
}
}
- GCM
{
"collapse_key":"abcde",
"time_to_live":10000,
"delay_while_idle":"false",
"data":{
"title":"default_title"
"message":"ExampleMsgメッセージ003"
},
"registration_ids":["gcmRegID001"]
}
- WNS
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wns>
- 175 -
<toast>
<visual>
<binding template="ToastText01">
<text id="1">ExampleMsgメッセージ003</text>
</binding>
</visual>
</toast>
</wns>
例3-3) レスポンス例
{
"response": {"code": "200", "message": ""},
"success": 4,
"failure": 0,
"msgID":"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
"responses": [
{ "regID":"fjpRegID001","extData":"","response": {"code": "200", "message": ""}},
{ "regID":"abc001","extData":"","response": {"code": "200", "message": ""}},
{ "regID":"gcmRegID001","extData":"","response": {"code": "200", "message": ""}},
{ "regID":"wnsRegID001","extData":"","response": {"code": "200", "message": ""}}
]
}
A.10 蓄積メッセージ参照
サーバに蓄積しているメッセージを参照します。メッセージ送信APIを使用してクライアント端末にメッセージを通知する場合、端末が
未接続の状態だとプッシュサーバにメッセージが蓄積します。
A.10.1 リクエスト
メソッド
GET
機能パス
/refSvrMsg
引数
変数名 説明 省略 型 指定値、または例
regID 登録ID 可 String 省略:蓄積されたすべてのメッセージを取得
detailFlag 詳細フラグ 可 boolean ・ デフォルト:false
true:メッセージ内容を出力する
false:メッセージ内容を出力しない
・ regID指定時だけ有効
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
なし
注意
・ 登録IDを指定しない場合は、detailFlagを指定できません。指定した場合はエラーになります。
- 176 -
・ regIDで空文字、プッシュ基盤サーバに存在しないIMAPSプッシュID、有効期限が切れたIMAPSプッシュIDを指定した場合はエ
ラーになります。
A.10.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": "ステータスコード",
"message": "メッセージ"
},
"regIDs":
[
{
"regID": "登録ID",
"count": "蓄積数",
"messages": [
{"message":送信メッセージ(JSON形式),"timestamp":"送信日時"}
{"message":送信メッセージ(JSON形式),"timestamp":"送信日時"}
]
},
{
"regID": "登録ID",
"count": "蓄積数",
"messages": [
{"message":送信メッセージ(JSON形式),"timestamp":"送信日時"}
{"message":送信メッセージ(JSON形式),"timestamp":"送信日時"}
]
},
...
]
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
regIDs 登録IDのリスト 配列
regID 登録ID String
count 蓄積数 int
messages メッセージ内容のリスト 配列
message メッセージ内容 String
timestamp 送信日時 timestamp
- 177 -
注意
・ 蓄積メッセージの一覧取得(regIDを指定しない場合)は、未接続のIMAPSプッシュIDの情報が取得できます。プッシュ基盤サー
バに接続しているIMAPSプッシュIDの情報は取得できません。
・ メッセージが蓄積していない登録IDもレスポンス対象であり、蓄積数が0("count":0)として返ります。
A.10.3 使用例
それぞれの登録IDに、以下の蓄積メッセージがあるとした場合の例です。
登録ID regID001
蓄積メッセージ {"title":"title_A","message":"regID001_message_A"}{"title":"title_B","message":"regID001_message_B"}
登録ID regID002
蓄積メッセージ {"title":"title_C","message":"regID002_message_C"}
登録ID(regID001)の蓄積しているメッセージ内容を含めた情報を参照する場合
https://(server):(port)/pushidmng/refSvrMsg?regID=regID001&detailFlag=true
レスポンス例
{"response":{"code":"200","message":""},"regIDs":[{"regID":"regID001","count":"2","messages":[
{"message":{"title":"title_A","message":"regID001_message_A"},"timestamp":"2014-04-15T08:53:39+09:00"},
{"message":{"title":"title_B","message":"regID001_message_B"},"timestamp":"2014-04-15T08:55:59+09:00"}]}]}
メッセージが蓄積しているすべての登録IDについて、蓄積メッセージ件数だけ取得したい場合
https://(server):(port)/pushidmng/refSvrMsg
レスポンス例
{"response":{"code":"200","message":""},"regIDs":[{"regID":"regID001","count":"2","messages":[]},
{"regID":"regID002","count":"1","messages":[]}]}
A.11 メッセージIDからのメッセージ情報の取得
メッセージIDが示すメッセージ情報を取得します。
A.11.1 リクエスト
メソッド
POST
機能パス
/getMsgByMsgID
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
- 178 -
{
"msgID":"メッセージID",
"getReadKind":"未読/既読の取得方法",
"getReqFlag":"送信リクエストボディの取得有無",
"getExtFlag":"拡張データの取得有無"
}
変数名 説明 省略 型 指定値、または例
msgID メッセージID 不可 String 64byte固定
半角英数字+記号
getReadKind 未読/既読の取得方法 可 String デフォルト値:"unread"
"unread":未読だけ取得
"read":既読だけ取得
"all":未読+既読の取得
getReqFlag 送信リクエストボディの取得有無 可 boolean デフォルト値:false
true:取得する
false:取得しない
getExtFlag 拡張データの取得有無 可 boolean デフォルト値:false
true:拡張データも取得
false:登録IDだけ取得
注意
・ リクエストのボディに指定されたメッセージIDがプッシュデータベースに存在しない場合でも、レスポンスとして処理成功(ステー
タスコードが200)を返します。この場合、dataCountはすべて0、sendRequest、unreadRegIDs、readRegIDsは、すべて空文字に
なります。
・ 定義ファイル(impush.properties)の既読機能の設定(fj_push_read_mode)に既読機能を全て利用する(all)以外が指定されてい
る状態で、リクエストのボディに指定された“送信リクエストボディの取得有無”が“true”だった場合、パラメタエラーとなります。
A.11.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": "ステータス",
"message": "メッセージ"
},
"refCount": {
"unreadCount": "未読件数",
"readCount": "既読件数"
},
"sendRequest": {
以下の2つのAPIで指定されたリクエストボディの内容
(注:リクエストボディに含まれる登録IDと拡張データは除く)
- 179 -
・メッセージ送信API(/notify)
・共通メッセージ送信API(/notifyCommon)
},
"unreadRegIDs": [
{
"regID": "登録ID",
"extData": "拡張データ"
},
{
"regID": "登録ID",
"extData": "拡張データ"
},
・・・
],
"readRegIDs": [
{
"regID": "登録ID",
"extData": "拡張データ"
},
{
"regID": "登録ID",
"extData": "拡張データ"
},
・・・
]
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
refCount 未読/既読内訳件数 -
unreadCount 未読件数 int
readCount 既読件数 int
sendRequest メッセージ送信時のリクエストボディ情報 JSON
unreadRegIDs 未読状態のメッセージがある登録IDのリスト 配列
regID 未読状態の登録ID String
extData 未読状態の拡張データ String
readRegIDs 既読状態のメッセージがある登録IDのリスト 配列
regID 未読状態の登録ID String
extData 既読状態の拡張データ String
A.11.3 使用例
例1-1) メッセージID"ba7816bf8f ・・・ 61f20015ad"(実際は64byte)に紐付いている未読状態のメッセージが存在する登録IDだけを取
得する場合
http(s)://(server):(port)/pushidmng/getMsgByMsgID
{
"msgID":"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
}
例1-2) レスポンス例
- 180 -
{
"response":{
"code":200,
"message":""
},
"refCount":{
"unreadCount":15,
"readCount":0
},
"sendRequest":{
},
"unreadRegIDs":[
{"regID":"FJP_1234567890","extData":""},
{"regID":"APNs_1234567890","extData":""},
{"regID":"GCM_1234567890","extData":""},
{"regID":"WNS_1234567890","extData":""}
:
],
"readRegIDs":[
]
}
例2-1) メッセージID"ba7816bf8f ・・・ 61f20015ad"(実際は64byte)に紐付いている未読状態と既読状態のメッセージが存在する登録
IDと拡張データとリクエストボディを取得する場合
http(s)://(server):(port)/pushidmng/getMsgByMsgID
{
"msgID":"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
"getReadKind":"all",
"getReqFlag":"true",
"getExtFlag":"true"
}
例2-2) レスポンス例
{
"response":{
"code":"200",
"message":""
},
"refCount":{
"unreadCount":15,
"readCount":12
},
"sendRequest":{
"message":"メッセージ002",
"messageOptions":{
"fjp_title":"タイトル002",
"gcm_title":"タイトル002",
"apns_action":"http://example.com/",
"apns_badge":2,
"wns_toast_launch":"http://example.com/",
"wns_badge_value":"10",
"wns_tile_visual_version":2,
}
},
"unreadRegIDs":[
{"regID":"FJP_1234567890","extData":"FJP_ExtData001"},
{"regID":"APNs_1234567890","extData":"APNs_ExtData001"},
{"regID":"GCM_1234567890","extData":"GCM_ExtData001"},
{"regID":"WNS_1234567890","extData":"WNS_ExtData001"},
:
],
- 181 -
"readRegIDs":[
{"regID":"FJP_9876543210","extData":"FJP_ExtData009"},
{"regID":"APNs_9876543210","extData":"APNs_ExtData009"},
{"regID":"GCM_9876543210","extData":"GCM_ExtData009"},
{"regID":"WNS_9876543210","extData":"WNS_ExtData009"},
:
]
}
A.12 登録IDからのメッセージ情報の取得
登録IDが示すメッセージ情報を取得します。
A.12.1 リクエスト
メソッド
POST
機能パス
/getMsgByRegID
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"regID":"登録ID",
"startDate":"取得対象開始日",
"endDate":"取得対象終了日",
"getReadKind":"未読/既読の取得方法",
"getReqFlag":"送信リクエストボディの取得有無"
}
変数名 説明 省略 型 指定値、または例
regID 登録ID 不可 String 大4096byte
半角英数字+記号
startDate 取得対象開始日 可 String "YYYY-MM-DD"の形式で指定する。
指定が省略された場合、現在のシステム日付
とする。
endDate 取得対象終了日 可 String "YYYY-MM-DD"の形式で指定する。
指定が省略された場合、現在のシステム日付
とする。
getReadKind 未読/既読の取得方法 可 String デフォルト値:"unread"
"unread":未読だけ取得
"read":既読だけ取得
"all":未読+既読の取得
getReqFlag 送信リクエストボディの取得有無 可 boolean デフォルト値:false
true:取得する
- 182 -
変数名 説明 省略 型 指定値、または例
false:取得しない
注意
・ リクエストのボディに指定された登録IDがプッシュデータベースに存在しない場合でも、レスポンスとして処理成功(ステータス
コードが200)を返します。
・ 定義ファイル(impush.properties)の既読機能の設定(fj_push_read_mode)に既読機能を全て利用する(all)以外が指定されてい
る状態で、リクエストのボディに指定された“送信リクエストボディの取得有無”が“true”だった場合、パラメタエラーとなります。
A.12.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response": {
"code": "ステータス",
"message": "メッセージ"
},
"refCount": {
"unreadCount": "未読件数",
"readCount": "既読件数"
},
"unreadMsgs": [
{
"msgID":"メッセージID",
"refDate": {
"requestDate":"送信日時",
"readDate":""
},
"sendRequest":{
以下の2つのAPIで指定された既読状態のリクエストボディの内容
(注:リクエストボディに含まれる登録IDと拡張データは除く)
・メッセージ送信API(/notify)
・共通メッセージ送信API(/notifyCommon)
}
},
:
],
"readMsgs": [
{
"msgID":"メッセージID",
"refDate": {
"requestDate":"送信日時",
"readDate":"既読日時"
},
"sendRequest":{
以下の2つのAPIで指定された既読状態のリクエストボディの内容
(注:リクエストボディに含まれる登録IDと拡張データは除く)
・メッセージ送信API(/notify)
・共通メッセージ送信API(/notifyCommon)
}
- 183 -
},
:
]
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
refCount 未読/既読内訳件数 -
unreadCount 未読件数 int
readCount 既読件数 int
unreadMsgs 未読状態のメッセージ情報のリスト 配列
msgID 未読状態のメッセージID String
refDate メッセージの送信日時と既読日時 -
requestDate 送信日時 timestamp
readDate 何もセットしない。
sendRequest メッセージ送信時のリクエストボディ情報 JSON
readMsgs 既読状態のメッセージ情報のリスト 配列
msgID 既読状態のメッセージID String
refDate メッセージの送信日時と既読日時 -
requestDate 送信日時 timestamp
readDate 既読日時 timestamp
sendRequest メッセージ送信時のリクエストボディ情報 -
A.12.3 使用例
例1-1) 登録ID"reg12345678901234567890"に送信した全てのメッセージの中から、現在のシステム日付に送信したメッセージで未読
状態のメッセージIDと件数を取得する場合
http(s)://(server):(port)/pushidmng/getMsgByRegID
{
"reqID":"reg12345678901234567890"
}
例1-2) レスポンス例
{
"response":{
"code":200,
"message":""
},
"refCount":{
"unreadCount":15,
"readCount":"0"
},
"unreadMsgs":[
{
"msgID":"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
"refDate":{
"requestDate":"2015-01-26T12:18:51+09:00",
"readDate":""
},
- 184 -
"sendRequest": {}
},
{
"msgID":"f8baba140414ad1dee225da2967f01c816fe177a9cb410ff3b01af0363615200",
"refDate":{
"requestDate":"2015-01-26T14:28:46+09:00",
"readDate":""
},
"sendRequest": {}
},
:
],
"readMsgs":[
]
}
例2-1) 登録ID"reg12345678901234567890"に送信した全てのメッセージの中から、2015年1月27日~現在のシステム日付の期間に送
信したメッセージで、未読状態と既読状態のメッセージID、件数、リクエストボディの情報を取得する場合
http(s)://(server):(port)/pushidmng/getMsgByRegID
{
"regID":"reg12345678901234567890",
"startDate":"2015-01-27",
"getReadKind":"all",
"getReqFlag":"true"
}
例2-2) レスポンス例
{
"response":{
"code":200,
"message":""
},
"refCount":{
"unreadCount":4,
"readCount":13
},
"unreadMsgs":[
{
"msgID":"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
"refDate":{
"requestDate":"2015-01-27T04:18:46+09:00",
"readDate":""
},
"sendRequest": {
"message":"メッセージ001",
"messageOptions":{
"fjp_title":"タイトル001",
"gcm_title":"タイトル001",
"apns_action":"http://example.com/",
"apns_badge":1
"wns_toast_launch":"http://example.com/",
"wns_badge_value":"10",
"wns_tile_visual_version":2,
}
}
},
{
"msgID":"96177a9c1d78161cfbf8f04140de5daea41e23ff661223b015ad0a3b4101f200",
"refDate":{
"requestDate":"2015-01-28T12:27:35+09:00",
"readDate":""
},
- 185 -
"sendRequest": {
"FJP":{"message":"fjp_message002"},
"APNs":{"aps":{"alert":"aps_message002","sound":"bingbong.aiff","badge":2}},
"GCM":{"data":{"message":"gcm_message002"},"registration_ids":""}
"WNS":{"wns_toast_visual_binding":{"text":{"message":"wns_message002","lang":"ja-JP"}}}
}
},
:
],
"readMsgs":[
{
"msgID":"c1d78ea41e2a9cf16a19617740de5df663f1223b018f0bf4b4101f20015ad0a3",
"refDate":{
"requestDate":"2015-01-28T12:27:35+09:00",
"readDate":"2015-01-30T07:19:49+09:00"
},
"sendRequest": {
"FJP":{"message":"fjp_message003"},
"APNs":{"aps":{"alert":"aps_message003","sound":"bingbong.aiff","badge":3}},
"GCM":{"data":{"message":"gcm_message003"},"registration_ids":""}
"WNS":{"wns_toast_visual_binding":{"text":{"message":"wns_message003","lang":"ja-JP"}}}
}
},
{
"msgID":"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
"refDate":{
"requestDate":"2015-01-28T14:38:41+09:00",
"readDate":"2015-01-29T09:20:51+09:00"
},
"sendRequest": {
"message":"メッセージ004",
"messageOptions":{
"fjp_title":"タイトル004",
"gcm_title":"タイトル004",
"apns_action":"http://example.com/",
"apns_badge":4
"wns_toast_launch":"http://example.com/",
"wns_badge_value":"10",
"wns_tile_visual_version":2,
}
}
},
:
]
}
A.13 既読件数の取得
送信済のメッセージの総件数と既読件数を取得します。
A.13.1 リクエスト
メソッド
POST
機能パス
/readCount
引数
なし
- 186 -
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"pushKind":"プッシュ種別",
"appName":"アプリケーション名",
"startDate":"取得対象開始日",
"endDate":"取得対象終了日"
}
変数名 説明 省略 型 指定値、または例
pushKind プッシュ種別 可 String "APNs"、"GCM"、"FJP"、"WNS"
指定が省略された場合、全プッシュ種別を検
索対象とする。
appName アプリケーション名 可 String 大1024byte
半角英数字+記号
startDate 取得対象開始日 可 String "YYYY-MM-DD"の形式で指定する。
指定が省略された場合、現在のシステム日付
とする。
endDate 取得対象終了日 可 String "YYYY-MM-DD"の形式で指定する。
指定が省略された場合、現在のシステム日付
とする。
注意
・ リクエストのボディに指定された条件に合致するメッセージ情報が存在しない場合でも、レスポンスとして処理成功(ステータス
コードが200)を返します。
A.13.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"response":{
"code":"ステータスコード",
"message":"メッセージ"
},
"messageCount": {
{
"totalCount": "全件数",
"readCount": "既読件数"
}
}
}
- 187 -
変数名 説明 型
response レスポンス -
code レスポンスコード int
message レスポンスメッセージ String
messageCount メッセージ件数 -
totalCount 全件数 int
readCount 既読件数 int
A.13.3 使用例
例1-1) 全てのプッシュ種別(APNs、GCM、FJP、WNS)でアプリケーション名が"app001"に紐付く登録IDに送信したメッセージの中で、
現在のシステム日付に送信されたメッセージの全件数と既読件数を取得する場合
http(s)://(server):(port)/pushidreg/readCount
{
"appName":"app001"
}
例1-2) レスポンス例
{
"response":{
"code":200,
"message":""
},
"messageCount":{
"totalCount":253,
"readCount":189
}
}
例2-1) プッシュ種別が"GCM"でアプリケーション名が"app001"に紐付く登録IDに送信したメッセージの中で、2015年3月1日から現在
のシステム日付の期間に送信されたメッセージの全件数と既読件数を取得する場合
http(s)://(server):(port)/pushidreg/readCount
{
"pushKind":"GCM",
"appName":"app001",
"startDate":"2015-03-01",
}
例2-2) レスポンス例
{
"response":{
"code":200,
"message":""
},
"messageCount":{
"totalCount":1876,
"readCount":1543
}
}
例3-1) 本日中に送信したメッセージの全件数と既読件数を取得する場合
http(s)://(server):(port)/pushidreg/readCount
{
}
- 188 -
例3-2) レスポンス例
{
"response":{
"code":200,
"message":""
},
"messageCount":{
"totalCount":103,
"readCount":87
}
}
A.14 メッセージの送信(非推奨)
指定した宛先にメッセージを送信します。
注意
本APIは非推奨化されました。メッセージの送信を行う場合は、A.9 共通メッセージの送信 をご利用ください。
A.14.1 リクエスト
メソッド
POST
機能パス
/notify
引数
なし
ヘッダー
Content-Type: application/json; charset=UTF-8
ボディ
以下の形式です。
{
"FJP":送信メッセージ(JSON形式) ,
"APNs":送信メッセージ(JSON形式) ,
"GCM":送信メッセージ(JSON形式) ,
"regIDs":["登録ID",...],
"extData":["拡張データ",...]
}
プッシュ部品を利用している場合の送信メッセージの形式は、6.2 受信したメッセージの表示の各プッシュのPayload仕様を参照し
てください。
変数名 説明 省略 型 指定値、または例
FJP IMAPSプッシュに送信するメッセー
ジ
可 String 大サイズ:4096byte
APNs APNsに送信するメッセージ 可 String 大サイズ:2048byte
GCM GCMに送信するメッセージ 可 String 大サイズ:4096byte
regIDs メッセージ送信先として登録IDをリ
ストで指定
可 Stringの配
列
・ 大件数:定義ファイル(impush.properties)の同時指定可能な 大登録ID数
(fj_push_max_num_for_address)
- 189 -
変数名 説明 省略 型 指定値、または例
・ IMAPSプッシュの場合、IMAPSプッシュID
・ APNsの場合、デバイストークン
・ GCMの場合、registrationID
・ extDataと排他
extData メッセージ送信先として拡張データ
をリストで指定
可 Stringの配
列
・ 大件数:定義ファイル(impush.properties)の同時指定可能な 大登録ID数
(fj_push_max_num_for_address)
・ regIDsと排他
注意
・ FJP,APNsは1件ごと(シリアル)情報送信を行うため時間がかかります。APNs経由でメッセージを送信する時は、1件送信するご
とにインターバルを設定するため、GCMやFJPと比べると特に時間がかかります。
・ APNsにメッセージ送信する際は、フィードバック情報も取得し、ログに出力します。
・ regIDsに同じ登録IDを複数件指定した場合、対象の登録IDを1件指定した場合と同じ動作になります。
・ GCMの場合、通常は、registrationIDはJSON形式のメッセージ内の"registration_ids"変数に指定しますが、本APIでは使用で
きません。GCM送信メッセージ内にあるregistration_IDsの要素は、空にするか、または要素を指定せず、登録IDはregIDs変数
に指定してください。
・ スマートデバイスからプッシュ基盤サーバへの初回の接続前は、メッセージ送信を行ってもメッセージの受信、蓄積は行われま
せんが、レスポンスはメッセージ送信成功が返ります。
・ 大登録ID数(fj_push_max_num_for_address)の 大値(1000件)より多くの登録IDに送信したい場合は、呼び出し元でメッセ
ージの送信APIを繰り返すことになります。
・ FJPのメッセージbyte数の上限チェックは、FJPの送信メッセージ部分が対象となります。
・ APNsのメッセージbyte数の上限チェックは、APNsの送信メッセージ部分が対象となります。
・ GCMメッセージ文字数の上限チェックは、送信メッセージの内の変数名"data"部分が対象となります。
・ リクエストボディにregIDsを指定した場合、レスポンスのextDataは空文字が返ります。
・ リクエストボディにextDataを指定した場合、レスポンスはextDataとそれに紐付くregID情報が返ります。
・ extDataに同じ拡張データを複数件指定した場合、対象の拡張データを1件指定した場合と同じ動作になります。
・ リクエストボディにextDataを指定した場合、指定したextData、またはextDataに紐付く登録IDの件数の合計が定義ファイル
(impush.properties)の 大登録ID数(fj_push_max_num_for_address)の値を超えるとエラーになります。
・ msgIDは、responseのcodeが200の場合で、かつsuccessが1件以上ある場合にメッセージIDが返されます。条件を満たさない場
合は空文字が返されます。
・ msgIDの情報が送信メッセージに付加されるため、既読機能を使用する場合は送信可能メッセージサイズが72Byte少なくなり
ます。
・ 本APIは、WNSへのメッセージ送信に対応しておりません。WNSへのメッセージ送信を行う場合はA.9 共通メッセージの送信
のAPIをご利用ください。
A.14.2 レスポンス
ステータスコード
表A.1 APIが返却するステータスコードを参照してください。
ヘッダー
Content-Type: application/json; charset=UTF-8
- 190 -
ボディ
以下の形式です。
{
"response": {
"code": "ステータスコード",
"message": "メッセージ"
}
"success": 成功数,
"failure": 失敗数,
"msgID":"メッセージID",
"responses": [
{
"regID": "登録ID",
"extData": "拡張データ",
"response": {
"code": "各登録IDのステータスコード",
"message": "各登録IDのメッセージ"
}
},
...
]
}
変数名 説明 型
response レスポンス -
code ステータスコード int
message メッセージ String
success 成功数 int
failure 失敗数 int
responses 送信結果 配列
msgID メッセージID String
regID 登録ID String
extData 拡張データ String
response レスポンス -
code 各登録IDのステータスコード int
message 各登録IDのメッセージ String
各登録IDのステータスコードについて
返却するステータスコードは以下のとおりです。○は返却される値です。
コード 意味(W3C) 本APIでの意味 IMAPSプッシュ APNs GCM
200 OK 処理成功 ○ ○ ○
400 Bad Request リクエスト違反 ○ ○ ○
404 Not Found リソースがない ○ ○ ○
500 Internal ServerError
そのほかのエラー ○ ○ ○
メッセージの内容は以下のとおりです。
コードが200番台 :空文字
コードが200番台以外:プッシュのエラーコード、メッセージ
- 191 -
メッセージが最大サイズを超えた場合の振る舞い
定義ファイル情報(impush.properties)のfj_push_message_fail_send_exitのステータスがtrueの場合、送信メッセージの形式に誤り
があると指定した登録IDへ1件もメッセージを送りません。falseの場合は、送信可能な登録IDへはメッセージを送ります。
APNs、GCMへの送信に失敗した場合
・ APNsへのメッセージ送信に失敗した場合は、APNsの公式サイトやマニュアルを確認してください。
・ GCMへのメッセージ送信に失敗した場合は、GCMの公式サイトやマニュアルを確認してください。
リクエストの内容に問題があった場合の振る舞い
以下の場合、レスポンスで返ってくるsuccess,failureそれぞれの値は0となります。
・ リクエストのボディやFJP,APNs,GCMの送信メッセージがJSON形式でない場合
・ リクエストのボディにregIDsの変数名が存在しない又は宛先数が0件の場合
A.14.3 使用例
例1) FJPの登録ID(reg12345678901234567890、reg1234567890123456789a)にメッセージを送信する場合
https://(server):(port)/pushidmng/notify
{"FJP":{"message":"test"},"regIDs":["reg12345678901234567890","reg1234567890123456789a"]}
例2) FJPの登録ID(FJP_12345678901234567890)、APNsの登録ID(APNs_1234567890123456789a)に別のメッセージを送信する場合
https://(server):(port)/pushidmng/notify
{
"FJP":{"message":"test"},
"APNs":{"aps":{"alert":"aps_message001","sound":"bingbong.aiff","badge":7}},
"regIDs":["FJP_12345678901234567890","APNs_1234567890123456789a"]
}
例3-1) FJP,APNs,GCMにメッセージを送信する場合
https://(server):(port)/pushidmng/notify
{
"FJP": {"message": "fjp_message001"},
"APNs": {"aps": {"alert": "aps_message001","sound": "bingbong.aiff","badge": 7}},
"GCM": {"data": {"message": "gcm_message001"}, "registration_ids":"" },
"regIDs":["FJP_regID_001","FJP_regID_002",
"APNs_regID_001","APNs_regID_002",
"GCM_regID_001","GCM_regID_002"]
}
例3-2) レスポンス例
{
"response": {"code": "200", "message": ""},
"success": 4,
"failure": 2,
"msgID":"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
"responses": [
{ "regID": " FJP_regID_001","extData": "","response": {"code": "200", "message": ""}},
{ "regID": " FJP_regID_002","extData": "","response": {"code": "500", "message": "PUSH: 45299: An internal error
occurred."}},
{ "regID": " APNs_regID_001","extData": "","response": {"code": "200", "message": ""}},
{ "regID": " APNs_regID_002","extData": "","response": {"code": "200", "message": ""}},
{ "regID": " GCM_regID_001","extData": "","response": {"code": "200", "message": ""}},
{ "regID": " GCM_regID_002","extData": "","response": {"code": "400", "message": "PUSH: 45201: Incorrect parameter.
Param=regID cause=notExistDB"}}
]
}
例4-1) FJP,APNs,GCMにextDataを指定してメッセージを送信する場合
- 192 -
https://(server):(port)/pushidmng/notify
{
"FJP": {"message": "fjp_message001"},
"APNs": {"aps": {"alert": "aps_message001","sound": "bingbong.aiff","badge": 7}},
"GCM": {"data": {"message": "gcm_message001"}, "registration_ids":"" },
"extData":["fjpExtData001","fjpExtData002",
"apnsExtData001","apnsExtData002",
"gcmExtData001","gcmExtData002"]
}
例4-2) レスポンス例
{
"response": {"code": "200", "message": ""},
"success": 4,
"failure": 2,
"msgID":"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
"responses": [
{ "regID": " FJP_regID_001","extData": "fjpExtData001","response": {"code": "200", "message": ""}},
{ "regID": " FJP_regID_002","extData": "fjpExtData002","response": {"code": "500", "message": PUSH: 45299: An
internal error occurred."}},
{ "regID": " APNs_regID_001","extData": "apnsExtData001","response": {"code": "200", "message": ""}},
{ "regID": " APNs_regID_002","extData": "apnsExtData002","response": {"code": "400", "message": "PUSH: 45201:
Incorrect parameter. Param=regID cause=notExistDB"}},
{ "regID": " GCM_regID_001","extData": "gcmExtData001","response": {"code": "200", "message": ""}},
{ "regID": " GCM_regID_002","extData": "gcmExtData002","response": {"code": "200", "message": ""}}
]
}
- 193 -
付録B プッシュ通知のクライアントアプリケーションのサンプル
注意
プッシュ通知のクライアントアプリケーションは、Android、iOS、Windowsに対応しています。
B.1 サンプルの概要
プッシュ通知を受け取るクライアントのサンプルとして、IMAPSプッシュ(Android)、GCM(Android)、APNs(iOS)、WNS(Windows)それ
ぞれのネイティブアプリケーションのプロジェクトを提供しています。
サンプルのプロジェクトは以下に格納されています。
IMAPSプッシュ
<DVD-ROMドライブ>\development\android\push\native_sample_imaps
GCM
<DVD-ROMドライブ>\development\android\push\native_sample_gcm
APNs
<DVD-ROMドライブ>\development\ios\push\native_sample_apns
WNS
<DVD-ROMドライブ>\development\windows\push\native_sample_wns
IMAPSプッシュ
<DVD-ROMマウントディレクトリ>/development/android/push/native_sample_imaps
GCM
<DVD-ROMマウントディレクトリ>/development/android/push/native_sample_gcm
APNs
<DVD-ROMマウントディレクトリ>/development/ios/push/native_sample_apns
WNS
<DVD-ROMマウントディレクトリ>/development/windows/push/native_sample_wns
このサンプルでは、IMAPSの認証API(オンライン認証)による情報を用いてIMAPSサーバと連携しています。
プッシュ通知機能を使用する場合の認証の設定は6.5.7 認証クラスの定義を、ネイティブアプリケーションのオンライン認証の詳細は、
Android版は3.3.3.2 ログイン、iOS版は3.4.4.2 ログイン、Windows版は3.5.3.2 ログインを参照してください。
ユーザーのID/パスワードの入力による認証のほか、管理情報を使用してアプリケーションを作成できます。管理情報は、Android版は
3.3.3.5 管理情報の設定、iOS版は3.4.4.5 管理情報の設定、Windows版は3.5.3.5 管理情報の設定を参照してください。
サンプルアプリケーションの処理の概要は、サンプルのソースコードのコメントを参照してください。
注意
プッシュメッセージを送信するためには、メッセージを送信するサーバアプリケーションやツールなどが別途必要です。
B.2 サンプルアプリの準備
- 194 -
B.2.1 IMAPSプッシュ(Android)のサンプルを準備する
1. 3.3.1 開発環境の準備を参照し、開発環境を準備します。
2. IMAPSサーバ上のサンプルのプロジェクトを、開発端末上に配置します。
3. Android Studio で、既存プロジェクトとしてサンプルプロジェクトをインポートします。
4. 以下配下のmoduleを開発端末上に配置し、Android Studioのmoduleとしてインポートします。
プッシュ通知機能のmodule
<DVD-ROMドライブ>\development\android\push\native
<DVD-ROMマウントディレクトリ>/development/android/push/native
6.5.2 IMAPSプッシュ通知を利用するネイティブアプリケーションの開発を参考にしてください。
5. 以下のライブラリを、サンプルプロジェクトのlibsディレクトリ配下に格納します。
・ SLS API
・ imaps.jar
・ log4j-1.2.17.jar
・ httpmime-4.2.5.jar
第3章 ネイティブアプリケーションおよび3.3 Androidアプリケーションの開発を参考にしてください。
6. マニフェストファイルの設定値を確認します。
IMAPSプッシュ通知の利用に必要な設定は、1.マニフェストファイルの修正を参照してください。
また、認証機能に必要な設定として以下のパーミッションが必要です。
<uses-permission android:name="android.permission.INTERNET" />
※サンプルプロジェクトには設定済みです。
7. 接続先のIMAPSサーバのアドレスなどの設定を行います。
プロジェクト内の以下を設定します。
・ assets/imaps/properties/imaps.properties
imapsServerAddress=IMAPSサーバのアドレス:ポート
・ assets/push/properties/push.properties
push.ServerAddress=IMAPSサーバのアドレス:ポート
push.SelfCertificate=true
push.AuthClassName=com.fujitsu.imaps.plugin.push.PushExtAuthImpl
定義値については付録C クライアント設定ファイルおよび付録D プッシュクライアント設定ファイルを参照してください。
8. パッケージングします。開発環境のビルド方法に従ってください。
9. 配布します。
配布方法については、"運用ガイド"の"ハイブリッドアプリケーション/ネイティブアプリケーション"を参照してください。
B.2.2 GCM(Android)のサンプルを準備する
1. 3.3.1 開発環境の準備を参照し、開発環境を準備します。
2. GCMプッシュ通知を利用するネイティブアプリケーションを開発するための事前準備を参照して、API Key、および、
Project_Number(SENDER_ID)を準備します。
3. IMAPSサーバ上のサンプルのプロジェクトを、開発端末上に配置します。
4. Android Studioで、既存プロジェクトとしてサンプルプロジェクトをインポートします。
- 195 -
5. 以下配下のmoduleを開発端末上に配置し、Android Studioのmoduleとしてインポートします。
・ プッシュ通知機能のmodule
<DVD-ROMドライブ>\development\android\push\native
<DVD-ROMマウントディレクトリ>/development/android/push/native
6.5.3 GCMプッシュ通知を利用するネイティブアプリケーションの開発を参考にしてください。
6. 以下のライブラリを、サンプルプロジェクトのlibsディレクトリ配下に格納します。
・ SLS API
・ imaps.jar
・ log4j-1.2.17.jar
・ httpmime-4.2.5.jar
第3章 ネイティブアプリケーションおよび3.3 Androidアプリケーションの開発を参考にしてください。
7. マニフェストファイルの設定値を確認します。
IMAPSプッシュ通知の利用に必要な設定は、1. マニフェストファイルの修正を参照してください。
※サンプルプロジェクトには設定済みです。
8. 接続先のIMAPSサーバのアドレスなどを設定します。
プロジェクト内の以下を設定します。
・ assets/imaps/properties/imaps.properties
imapsServerAddress=IMAPSサーバのアドレス:ポート
・ assets/push/properties/push.properties
push.ServerAddress=IMAPSサーバのアドレス:ポート
push.SelfCertificate=true
push.gcm.NotificationMode=true
push.gcm.SenderID=SENDER_ID ※
push.AuthClassName=com.fujitsu.imaps.plugin.push.PushExtAuthImpl
※)SENDER_IDは、2.で取得した「Project Number」を指定します。他の定義値については付録C クライアント設定ファイルおよび
付録D プッシュクライアント設定ファイルを参照してください。
9. パッケージングします。
開発環境のビルド方法に従ってください。
10. 配布します。
配布方法は、"運用ガイド"の" ハイブリッドアプリケーション/ネイティブアプリケーション"を参照してください。
B.2.3 APNs(iOS)のサンプルを準備する
1. 3.4.1 開発環境の準備を参照して、開発環境を準備します。
2. IMAPSサーバ上のサンプルのプロジェクトを、開発端末上に展開します。
プロジェクトは、IMAPSサーバにzip形式で格納されています。
3. フレームワークとして提供している以下のライブラリを、サンプルプロジェクトのIMAPSAPNSSample/Frameworks 配下に格納しま
す。
・ プッシュ通知機能のライブラリ(FJPHandlerLib)
zip形式で格納されています。IMAPSAPNSSample/Frameworks 配下で展開してください。
- 196 -
・ IMAPS提供フレームワーク(IMAPSCore.framework、IMAPSPush.framework、Cordova.framework、ZipArchive.framework)
第3章 ネイティブアプリケーション、3.4 iOSアプリケーションの開発、および6.5.4 APNsプッシュ通知を利用するネイティブアプリ
ケーションの開発を参考にしてください。
4. APNsを利用するための準備をします。
6.5.4 APNsプッシュ通知を利用するネイティブアプリケーションの開発を参照し、以下のファイルを用意します。
・ PKCS#12形式の証明書
・ プロビジョニングファイル(Provisioning Profiles)
5. Xcodeを起動し、OpenOtherを選択、展開したプロジェクトを指定し、読み込みます。
6. 接続先のIMAPSサーバのアドレスを設定します。
プロジェクト内の以下で設定します。
・ IMAPSAPNSSample/props/imaps.plist
「imapsServerAddress」の設定
・ IMAPSAPNSSample/props/push.plist
「push.Address」の設定
定義値は、付録C クライアント設定ファイルおよび付録D プッシュクライアント設定ファイルを参照してください。
7. パッケージングします。
Xcodeで、手順5で用意したプロビジョニングファイル(Provisioning Profiles)を指定してビルドします。
8. 配布します。
配布方法は、"運用ガイド"の" ハイブリッドアプリケーション/ネイティブアプリケーション"を参照してください。
B.2.4 WNS(Windows)のサンプルを準備する
1. 3.5.1 開発環境の準備を参照し、開発環境を準備します。
2. サンプルプロジェクトをVisual Studio で開きます。
3. 以下配下のCom.Fujitsu.Imaps.Push.winmdファイル、ImapsPushEx.dllファイルを参照設定で追加します。
プッシュ通知機能のファイル
<DVD-ROMドライブ>\development\windows\push
<DVD-ROMマウントディレクトリ>/development/windows/push
6.5.5 WNSプッシュ通知を利用するネイティブアプリケーションの開発を参考にしてください。
4. 以下のライブラリを、サンプルプロジェクトの参照設定に追加します。
・ ImapsNativeLibrary.dll
・ SQLite for Windows Runtime
第3章 ネイティブアプリケーションおよび3.5 Windowsアプリケーションの開発を参考にしてください。
5. マニフェストファイルの設定値を確認します。
WNS通知の利用に必要な設定は、1. マニフェストファイルの修正を参照してください。
6. 接続先のIMAPSサーバのアドレスなどの設定を行います。
プロジェクト内の以下を設定します。
・ ImapsProperties/imaps.xml
<imapsServerAddress>IMAPSサーバのアドレス:ポート</imapsServerAddress>
・ PushProperties/push.xml
<pushServerAddress>IMAPSサーバのアドレス:ポート</pushServerAddress>
- 197 -
<pushSelfCertificate>true</pushSelfCertificate>
定義値については付録C クライアント設定ファイルおよび付録D プッシュクライアント設定ファイルを参照してください。
7. WNSを利用するネイティブアプリケーションを開発するための事前準備を参照して、「パッケージSID」、「クライアントシークレット」、
「アプリケーションID」を取得し、アプリケーションをストアと関連付けします。
8. パッケージングします。開発環境のビルド方法に従ってください。
9. 配布します。
配布方法については、"運用ガイド"の"ハイブリッドアプリケーション/ネイティブアプリケーション"を参照してください。
B.3 サーバ環境の準備をする 導入ガイド、および、運用ガイドに従いサーバ環境を構築します。
使用するプッシュサービスの種別によって、 プッシュ通知機能を利用する設定が異なります。
詳細は、"運用ガイド"の"プッシュ通知機能"を参照してください。以下では、運用の準備("運用ガイド"の"運用の準備")まで完了した
環境を元に説明します。
1. IMAPSサーバでimadmin user createコマンドでユーザーを作成します。
例)
imadmin user create -userid sampleuser -password samplepassword
2. プッシュ通知を利用できるようにするため、アプリケーション情報をIMAPSサーバに登録します。
■ 例)IMAPSプッシュのサンプルの場合
imadmin pushfjp create -name com.fujitsu.imaps.sample.imaps_pushsample
■ 例)GCMサンプルの場合
imadmin pushgcm create -key key -name com.fujitsu.imaps.sample.imaps_gcmsample
keyには、サンプルアプリの準備で取得した、API Keyを指定します。
■ 例)APNsのサンプルの場合
imadmin pushapns create -certFile certFile -password password [-sandbox] -name
com.fujitsu.imaps.sample.imapsapnssample
certFileには、APNsのPKCS#12形式の証明書ファイルのパスを指定します。
passwordにはcertFileのパスワードを指定します。
アプリケーションがsandbox版である場合は「-sandbox」を指定します。
■ 例)WNSサンプルの場合
imadmin pushwns create -sid sid [-clientSecret clientSecret] -name name
sidには、サンプルアプリの準備で取得した、セキュリティIDを指定します。
clientSecretには、サンプルアプリの準備で取得した、クライアントシークレットを指定します。
nameには、サンプルアプリの準備で構築したプロジェクトのマニフェストに設定されているパッケージ名を指定します。
B.4 サンプルアプリの操作方法
B.4.1 IMAPSプッシュ(Android)のサンプルを起動する
1. サンプルアプリ「IMAPS_PUSHSample」を起動します。
2. IMAPSサーバで作成済みのユーザーIDとパスワードを入力し、[Login]ボタンをタップします。
→ 結果が画面下部の[Login Result]に表示されます。
- 198 -
ログインに成功すると、プッシュ通知の初期化が行われます。初期化が完了すると、[Login Result]に[プッシュ基盤サーバと
の接続に成功しました。]が表示され、IMAPSプッシュメッセージが受信可能になります。
[ログインに失敗しました。]が表示された場合は、Wi-Fi接続になっていることを確認し、再度[Login]ボタンをタップします。
B.4.2 GCM(Android)のサンプルを起動する
1. サンプルアプリ「IMAPS_GCMSample」を起動します。
2. IMAPSサーバで作成済みのユーザーIDとパスワードを入力し、[Login]ボタンをタップします。
→ 結果が画面下部の[Login Result]に表示されます。
ログインに成功すると、プッシュ通知の初期化が行われます。
初期化が完了すると、[Login Result]に[IDの登録に成功しました。]が表示され、GCMプッシュメッセージが受信可能になりま
す。
[ログインに失敗しました。]が表示された場合は、Wi-Fi接続になっていることを確認し、再度[Login]ボタンをタップします。
B.4.3 APNs(iOS)のサンプルを起動する
1. サンプルアプリ「IMAPSAPNSSample」を起動します。
2. IMAPSサーバで作成済みのユーザーIDとパスワードを入力し、[IMAPSログイン]ボタンをタップします。
→ ログインに成功すると、プッシュ通知の初期化が行われます。
3. [デバイストークンがIMAPSサーバに登録され、メッセージ受信が可能になりました]と表示されたら、[ログアウトして戻る]タップし
ます。
→ 以降、APNsプッシュメッセージが受信可能になります。
B.4.4 WNS(Windows)のサンプルを起動する
1. サンプルアプリ「IMAPS_PUSHWNSSample」を起動します。
2. IMAPSサーバで作成済みのユーザーIDとパスワードを入力し、[Login]ボタンをタップします。
→ ログインに成功すると、プッシュ通知の初期化が行われ、[チャネルURIの登録に成功]が表示されます。以降、WNSプッシュ
メッセージが受信可能になります。
B.5 メッセージの送信
プッシュメッセージは、IMAPSサーバのプッシュWeb APIを使用して送信します。
登録IDの一覧取得のAPIにより、登録ID(メッセージの通知先)の情報を取得します。
メッセージの送信のAPIでメッセージと登録IDを指定して、メッセージを通知します。
詳細は6.4.1 サーバ側のAPI、6.6 サーバ側のアプリケーションの開発、および付録A プッシュWeb APIを参照してください。
- 199 -
付録C クライアント設定ファイル
ハイブリッドアプリケーションおよびネイティブアプリケーションは、クライアント設定ファイルをアプリケーション内に取り込む事で、アプ
リケーションの動作をカスタマイズできます。
本節では、クライアント設定ファイルについて説明します。
C.1 ファイル形式
クライアント設定ファイルは、Android版ではJavaのプロパティファイル形式、iOS版ではplist形式、Windows版ではXML形式です。
プロパティファイル形式では、キー名とそれに対応した設定値の組で1つのエントリが構成され、以下のような形式になっています。
キー名 = 設定値
キー名 = 設定値
:
:
行頭に"#"がついている行はコメントとして扱われます。
改行コードはCR、LF、CR+LFのいずれも使用可能です。
plist形式では、以下のようなxmlで値を指定します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist>
<plist version="1.0">
<array>
<dict>
<key>key</key>
<string>キー名</string>
<key>value</key>
<string>設定値</string>
</dict>
<dict>
<key>key</key>
<string>キー名</string>
<key>value</key>
<string>設定値</string>
</dict>
:
:
</array>
</plist>
クライアント設定ファイルに定義するプロパティの型は文字列型です。
XML形式では、以下のようなxmlで値を指定します。
<?xml version="1.0" encoding="UTF-8"?>
<properties>
<キー名>設定値</キー名>
<キー名>設定値</キー名>
:
:
</properties>
存在しないプロパティのキー名は無効です。記述しても利用されません。
C.2 サンプルファイルの配置場所
IMAPSではサンプルファイルを提供しています。サンプルファイルは以下の場所に配置されています。
- 200 -
ハイブリッドアプリケーションの場合
クライアント設定ファイルの保管場所は、2.3.28.1 各機能の設定を参照してください。
ネイティブアプリケーションの場合
<DVD-ROMドライブ>\development\conf\imaps
<DVD-ROMマウントディレクトリ>/development/conf/imaps
Android用はimaps.properties、iOS用はimaps.plist、Windows用はimaps.xmlです。
C.3 配置場所
クライアント設定ファイルは、以下の場所に配置します。
Android
prjRoot/assets/imaps/properties/imaps.properties
iOS
prjRoot/Application Files/imaps/properties/imaps.plist
Windows
prjRoot/ImapsProperties/imaps.xml
prjRootは、クライアントアプリケーションのプロジェクトファイルの 上位ディレクトリを指します。
注意
・ XcodeでApplication Files内に資産を入れる場合、ファイル追加のダイアログで[Create groups]を選択してください。
・ Visual Studioでプロジェクト内に資産を入れる場合、ファイルを選択して、[プロジェクト] > [プロジェクトに含める]を選択してくださ
い。
プロジェクトに含めたファイルのプロパティで、以下を設定します。
- 出力ディレクトリにコピー:コピーしない
C.4 定義例
以下に製品提供ののクライアント設定ファイルの内容を示します。
Android
idleTimeout = 15
imapsServerAddress =
log.level = INFO
log.maxFileSize = 10
log.rotateCount = 1
offlineAuthTryMaxCount = 5
server.connectionTimeout = 10000
server.responseTimeout = 10000
sls.maxDatabaseSize = 2048
ssl.noVerify = false
appmgr.strictPolicyMode = true
iOS
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist>
- 201 -
<plist version="1.0">
<array>
<dict>
<key>key</key>
<string>idleTimeout</string>
<key>value</key>
<string>15</string>
</dict>
<dict>
<key>key</key>
<string>imapsServerAddress</string>
<key>value</key>
<string></string>
</dict>
<dict>
<key>key</key>
<string>log.level</string>
<key>value</key>
<string>INFO</string>
</dict>
<dict>
<key>key</key>
<string>log.maxFileSize</string>
<key>value</key>
<string>10</string>
</dict>
<dict>
<key>key</key>
<string>log.rotateCount</string>
<key>value</key>
<string>1</string>
</dict>
<dict>
<key>key</key>
<string>offlineAuthTryMaxCount</string>
<key>value</key>
<string>5</string>
</dict>
<dict>
<key>key</key>
<string>server.connectionTimeout</string>
<key>value</key>
<string>10000</string>
</dict>
<dict>
<key>key</key>
<string>server.responseTimeout</string>
<key>value</key>
<string>10000</string>
</dict>
<dict>
<key>key</key>
<string>sls.maxDatabaseSize</string>
<key>value</key>
<string>2048</string>
</dict>
<dict>
<key>key</key>
<string>ssl.noVerify</string>
<key>value</key>
<string>false</string>
</dict>
<dict>
- 202 -
<key>key</key>
<string>appmgr.strictPolicyMode</string>
<key>value</key>
<string>true</string>
</dict>
</array>
</plist>
Windows
<?xml version="1.0" encoding="UTF-8"?>
<properties>
<auth.loginMode>all</auth.loginMode>
<idleTimeout>15</idleTimeout>
<imapsServerAddress></imapsServerAddress>
<log.level>INFO</log.level>
<log.maxFileSize>10</log.maxFileSize>
<log.rotateCount>1</log.rotateCount>
<offlineAuthTryMaxCount>5</offlineAuthTryMaxCount>
<sls.maxDatabaseSize>2048</sls.maxDatabaseSize>
<ssl.noVerify>false</ssl.noVerify>
<appmgr.strictPolicyMode>true</appmgr.strictPolicyMode>
</properties>
C.5 定義項目
本節では、クライアント設定ファイルに設定可能なキーとそれらに設定可能な値について説明します。各項目は以下の形式で説明し
ます。
キー名
クライアント設定ファイルに設定可能なキーの名前を示します。大文字・小文字は区別します。
説明
キーの説明です。
設定可能な値
キーに対応した値が取りうる値を説明します。
デフォルト値
値が「設定可能な値」の範囲外(未設定や空白を含む)であるか、またはプロパティ自体の記述がない場合に用いられる値を説明
します。
読み込みのタイミング
値が読み込まれるタイミングを説明します。
備考
補足です。
C.5.1 auth.loginModeキー名
auth.loginMode
説明
ログイン/ログアウトを許可する呼び元のアプリケーション形態を指定します。
設定可能な値
native(ネイティブコードからだけ)、javascript(javascriptからだけ)、all(すべてのアプリケーション)
- 203 -
デフォルト値
all
読み込みのタイミング
認証プラグインのログイン/ログアウト呼び出し時
C.5.2 idleTimeoutキー名
idleTimeout
説明
端末のアイドルタイムアウト時間を指定します。
設定可能な値
1~1140(単位:分)
デフォルト値
15
読み込みのタイミング
アプリケーション起動時
C.5.3 imapsServerAddressキー名
imapsServerAddress
説明
IMAPSサーバのURLを設定します。
ポート番号には、IMAPSサーバで使用するWebサーバのポート番号を設定してください。
設定可能な値
http[s]://サーバアドレス[:ポート番号]
1024文字目まで有効
デフォルト値
なし
読み込みのタイミング
IMAPSサーバへの接続開始時
C.5.4 log.levelキー名
log.level
説明
ログの出力レベルを指定します。
設定可能な値
ERROR、WARN、INFO、DEBUG
デフォルト値
INFO
- 204 -
読み込みのタイミング
アプリケーション起動時
C.5.5 log.maxFileSizeキー名
log.maxFileSize
説明
ログファイルの 大値を指定します。
設定可能な値
1~20(単位:MB)
デフォルト値
10
読み込みのタイミング
アプリケーション起動時
C.5.6 log.rotateCountキー名
log.rotateCount
説明
ログのバックアップ世代数を指定します。
設定可能な値
0~5
デフォルト値
1
読み込みのタイミング
アプリケーション起動時
C.5.7 offlineAuthTryMaxCountキー名
offlineAuthTryMaxCount
説明
オフライン認証のトライ回数上限値を指定します。
設定可能な値
1~16
デフォルト値
5
読み込みのタイミング
オフラインログイン実行時/パスワード変更時
- 205 -
C.5.8 server.connectionTimeoutキー名
server.connectionTimeout
説明
IMAPSプラグインのIMAPSサーバ接続時のタイムアウト値です。
設定可能な値
0~600000(単位:ミリ秒)0を指定するとタイムアウトは発生しません。
デフォルト値
10000
読み込みのタイミング
IMAPSサーバへの接続開始時
備考
Windowsアプリでは通信のタイムアウトは規定の値が使用されるため、クライアント設定ファイルで動作をカスタマイズできません。
規定では接続のタイムアウト値は 60 秒、接続が確立された後は 30 秒です。詳細は、Windows デベロッパーセンター
Windows.Web.Http.HttpClientのタイムアウト情報を参照してください。
C.5.9 server.responseTimeoutキー名
server.responseTimeout
説明
IMAPSプラグインのIMAPSサーバからのレスポンスタイムアウト値です。
設定可能な値
0~600000(単位:ミリ秒) 0を指定するとタイムアウトは発生しません。
デフォルト値
10000
読み込みのタイミング
IMAPSサーバへの接続開始時
備考
Windowsアプリでは通信のタイムアウトは規定の値が使用されるため、クライアント設定ファイルで動作をカスタマイズできません。
規定では接続のタイムアウト値は 60 秒、接続が確立された後は 30 秒です。詳細は、Windows デベロッパーセンター
Windows.Web.Http.HttpClientのタイムアウト情報を参照してください。
C.5.10 sls.maxDatabaseSizeキー名
sls.maxDatabaseSize
説明
SLS格納領域の上限値です。
設定可能な値
1~2048(単位:MB)
デフォルト値
2048
- 206 -
読み込みのタイミング
SLSのオープン時
C.5.11 ssl.noVerifyキー名
ssl.noVerify
説明
SSL通信時にサーバ証明書を検証するか否かを指定します。trueの場合、サーバ証明書を検証しません。falseの場合、サーバ証
明書を検証し、正しくない場合サーバとの接続に失敗します。
設定可能な値
trueまたはfalse
デフォルト値
false
読み込みのタイミング
SSL通信開始時
C.5.12 appmgr.strictPolicyModeキー名
appmgr.strictPolicyMode
説明
新のポリシー設定ファイルを使用するかどうかと、現在時刻の取得方法を指定します。各値の動作を下記の表で示します。 falseの場合は、端末がオフラインでポリシー設定ファイルが更新されない場合や、クライアントの時刻が間違っている場合は、設定した
時間外にアプリケーションが利用可能になる場合があります。 これを防止するためには値をtrueにします。
値がtrueの場合 値がfalseの場合
現在時刻の取得先 IMAPSサーバ クライアント
オンラインの場合 新のポリシー設定ファイルを使用 新のポリシー設定ファイルを使用
オフラインの場合 APIの呼び出し時にエラー クライアントに保存したポリシー設定ファイルを使用
設定可能な値
trueまたはfalse
デフォルト値
true
読み込みのタイミング
利用時間制御のAPIの呼び出し時
- 207 -
付録D プッシュクライアント設定ファイル
プッシュ通知を受信するクライアントアプリケーションは、プッシュクライアント設定ファイルをアプリケーション内に取り込む事により、ア
プリケーションの動作をカスタマイズする事ができます。
本節では、プッシュクライアント設定ファイルについて説明します。
注意
プッシュクライアント設定ファイルは、Android、iOS、Windowsに対応しています。
D.1 ファイル形式
プッシュクライアント設定ファイルは、Android版ではJavaのプロパティファイル形式、iOS版ではplist形式、Windows版ではxml形式で
す。クライアント設定ファイルと同形式となりますので、詳細は付録C クライアント設定ファイルのC.1 ファイル形式を参照してください。
D.2 配置場所
プッシュクライアント設定ファイルは、以下の場所に配置します。
ハイブリッドアプリケーションの場合
クライアント設定ファイルの保管場所は、6.5.1 ハイブリッドアプリケーション向けのAPIの開発を参照してください。
ネイティブアプリケーションの場合
Android
prjRoot/assets/push/properties/push.properties
プッシュクライアント設定ファイルのパスを、アプリケーションのDefaultプリファレンスの設定で切り替えられます。
キー名 デフォルト 型 説明
key_push_properties_path(PushDefine.KEY_PUSH_PROPERTIES_PATH)>
(*) String プッシュクライアント設定ファイルのファイルパスを指
定(ファイル名まで含む絶対パス指定)
(*) 値が設定されない場合、アプリケーションの /assets/push/properties/push.properties にファイルが格納されているとみなして動作
します。
iOS
アプリケーションのmainBundle直下のpush.plistに配置します。
なお、プッシュクライアント設定ファイルの配置パスは、アプリケーションの[NSUserDefaults sharedUserDefaults]で取得できる共有
オブジェクトへの設定で切り替えることができます。
キー名 デフォルト 型 説明
key_push_properties_path(FJPAppDelegate.hに定数定義)
(*) String plist形式のプッシュクライアント設定ファイルのファイル
パスを指定(ファイル名まで含む絶対パス指定とする)
(*) 値が設定されない場合、アプリケーションの mainBundle直下のpush.plistにプッシュクライアント設定ファイルが配置されている
とみなして動作します。
Windows
prjRoot/PushProperties/push.xml
プッシュクライアント設定ファイルのパスを、プッシュ部品の設定ファイルパス切り替え用メソッドで切り替えられます。
- 208 -
「C:\Users\{ユーザ名}\AppData\Local\Packages\{パッケージファミリ名}\LocalState」フォルダ内ではユーザ指定の設定ファイル
を配置することが可能です。(Windowsアプリでは参照できるディレクトリに制限があるため上記フォルダ内での配置を可能としてい
ます。)
設定方法は、上記フォルダ内にユーザ指定の設定ファイルを配置し、上記フォルダから配置した設定ファイルまでの相対パスを
PushPropertiesクラスのsetUserSettingRelativePath()で設定します。設定する値は¥マーク区切りにて設定してください。
例:PushProperties.setUserSettingRelativePath(“SampleFolder1\SampleFolder2\push.xml”);
(*) 値が設定されない場合、アプリケーションの /PushProperties にファイルが格納されているとみなして動作します。
上 記 の 例 の 場 合 「 C:\Users\{ ユ ー ザ 名 }\AppData\Local\Packages\{ パ ッ ケ ー ジ フ ァ ミ リ 名 }\LocalState\SampleFolder1\SampleFolder2\push.xml」の設定ファイルを指定することになります。
ユーザ指定の設定ファイルが指定されている場合はユーザ指定の設定ファイルを参照します。
また、PushPropertiesクラスのsetUserSettingRelativePath()で設定した内容は、アプリ起動後、
PushProperties.getProperty()実行時または、WNSRegister.getInstance()実行時に参照されます。
PushProperties.getProperty()実行後または、WNSRegister.getInstance()実行後に設定しても即時反映されずアプリ再起動後に反映
されます。
注意
・ PushPropertiesクラスのsetUserSettingRelativePath()で設定したユーザ指定のファイルパスは、アプリケーション固有領域の
ApplicationData.Current.LocalSettingsに格納されます。
その際、ApplicationData.Current.LocalSettingsへの参照キーとして“PushPropertyFileRelativePath”をプッシュ部品側で使用し
ているためアプリ実装時はApplicationData.Current.LocalSettingsへの参照キーとして使用しないでください。
・ PushPropertiesクラスのsetProperty()で設定したプロパティは、アプリケーション固有領域のApplicationData.Current.LocalSettingsに格納されます。
その際、ApplicationData.Current.LocalSettingsへの参照キーとして“PushProperties”をプッシュ部品側で使用しているためアプ
リ実装時はApplicationData.Current.LocalSettingsへの参照キーとして使用しないでください。
D.3 定義例
以下に製品提供のプッシュクライアント設定ファイルの内容を示します。
Android
push.ServerConnectTimeout=1000
push.ServerDataReadTimeout=1000
push.ServerAddress=https://example.com:8100
push.SelfCertificate=true
push.RingtoneUri=android.resource://com.package/raw/bell
push.LedSet=true
push.LedColor=#ffff0000
push.LedOntime=500
push.LedOfftime=500
push.VibPattern=1000,1000,1000,1000
push.NotificationAppName=app_name
push.NotificationMainClassName=com.fujitsu.imaps.push.example
push.NotificationIconID=ic_launcher
push.gcm.NotificationMode=true
push.gcm.SenderID=1234567890
push.LogClassName=com.fujitsu.imaps.plugin.push.PushLogImpl
push.AuthClassName=com.fujitsu.imaps.plugin.push.PushExtAuthImpl
push.ExtensionData=userid:user001
push.ServerConnectRetryCount=0
push.ServerConnectRetryWait=0
- 209 -
iOS
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>push.SandboxFlg</key>
<false/>
<key>push.ConnectionInfo</key>
<dict>
<key>push.Address</key>
<string>https://example.com:8443</string>
<key>push.SslForceFlg</key>
<true/>
</dict>
<key>push.RetryWaitTime</key>
<integer>60</integer>
<key>push.LowerUpdateTime</key>
<integer>-1</integer>
<key>push.RetryCount</key>
<integer>0</integer>
</dict>
</plist>
Windows
<?xml version="1.0" encoding="utf-8" ?>
<pushproperties>
<push.ServerAddress>https://pushserver001.com</push.ServerAddress>
<push.SelfCertificate>true</push.SelfCertificate>
<push.wns.NotificationMode>true</push.wns.NotificationMode>
<push.LogClassNameSpace>PushTest.Impl</push.LogClassNameSpace>
<push.LogClassName>PushTest.Impl.PushLogImpl</push.LogClassName>
<push.AuthClassNameSpace>PushTest.Impl</push.AuthClassNameSpace>
<push.AuthClassName>PushTest.Impl.PushExtAuthImpl</push.AuthClassName>
<push.ExtensionData>extData</push.ExtensionData>
<push.ServerConnectRetryCount>0</push.ServerConnectRetryCount>
<push.ServerConnectRetryWait>0</push.ServerConnectRetryWait>
<push.BackGroundTaskErrorLogFileName>err.log</push.BackGroundTaskErrorLogFileName>
</pushproperties>
D.4 定義項目(IMAPSおよびGCMプッシュ通知)本節では、IMAPSおよびGCMプッシュ通知を受信するアプリケーションの、プッシュクライアント設定ファイルに設定可能なキーとそれ
らに設定可能な値について説明します。各項目は以下の形式で説明します。Javaのプロパティファイルであるため型はすべてStringで
す。
キー名
プッシュクライアント設定ファイルに設定可能なキーの名前を示します。
PushDefineクラスの定義名
PushDefineクラスの定義名を説明します。
デフォルト
キーの省略値を説明します。
省略可否
省略可能か否かを説明します。
説明
キーの説明です。
- 210 -
D.4.1 push.ServerConnectTimeoutキー名
push.ServerConnectTimeout
PushDefineクラスの定義名
SERVER_CONNECT_TIMEOUT
デフォルト
10000
省略可否
可
設定可能な値
0~2147483647 0を指定するとタイムアウトは発生しません。
説明
IMAPSサーバ、プッシュ基盤サーバとの接続にかかるタイムアウト時間(ms)を設定します。
D.4.2 push.ServerDataReadTimeoutキー名
push.ServerDataReadTimeout
PushDefineクラスの定義名
SERVER_DATA_READ_TIMEOUT
デフォルト
10000
省略可否
可
設定可能な値
0~2147483647 0を指定するとタイムアウトは発生しません。
説明
IMAPSサーバからデータを取得するのにかかるタイムアウト時間(ms)を設定します。
D.4.3 push.ServerAddressキー名
push.ServerAddress
PushDefineクラスの定義名
KEY_REGIST_URL
デフォルト
なし
省略可否
不可
設定可能な値
http[s]:サーバアドレス[:ポート番号]
1024文字目まで有効
- 211 -
説明
IMAPSサーバのURLを設定します。
ポート番号には、IMAPSサーバで使用するWebサーバのポート番号を設定してください。
D.4.4 push.SelfCertificateキー名
push.SelfCertificte
PushDefineクラスの定義名
SELF_CERTIFICATE
デフォルト
false
省略可否
可
設定可能な値
trueまたはfalse
説明
自己証明書を信頼するかどうかを設定します。true:信頼する、false:信頼しない。
D.4.5 push.RingtoneUriキー名
push.RingtoneUri
PushDefineクラスの定義名
KEY_NOTIFICATION_RINGTONE_URI
デフォルト値
省略した場合はpayloadの値が有効になります。
省略可否
可
設定可能な値
android.net.Uriで有効なサウンドURI
説明
NotificationのサウンドURIを設定します。
D.4.6 push.LedSetキー名
push.LedSet
PushDefineクラスの定義名
KEY_NOTIFICATION_LED_SET
デフォルト値
false
省略可否
可
- 212 -
設定可能な値
trueまたはfalse
説明
プッシュクライアント設定ファイル側のイルミネーション設定を有効化します。true:有効、false:無効。
D.4.7 push.LedColorキー名
push.LedColor
PushDefineクラスの定義名
KEY_NOTIFICATION_LED_COLOR
デフォルト値
省略した場合はpayloadの値が有効になります。
省略可否
可
設定可能な値
色(#RRGGBB または #AARRGGBBの形式)
説明
Notificationのイルミネーションの色を設定します。RGB値をHEX文字列形式で指定します。
#RRGGBB または #AARRGGBBの形式が有効です。RR: 赤、GG: 緑、BB: 青、AA: アルファチャンネル。
D.4.8 push.LedOntimeキー名
push.LedOntime
PushDefineクラスの定義名
KEY_NOTIFICATION_LED_ONTIME
デフォルト値
省略した場合はpayloadの値が有効になります。
省略可否
可
設定可能な値
0~2147483647
説明
Notificationによりイルミネーションが発光している時間(ms)を設定します。push.LedOffTimeが省略された場合は、点灯し続けま
す。
D.4.9 push.LedOfftimeキー名
push.LedOfftime
PushDefineクラスの定義名
KEY_NOTIFICATION_LED_OFFTIME
- 213 -
デフォルト値
省略した場合はpayloadの値が有効になります。
省略可否
可
設定可能な値
0~2147483647
説明
Notificationによりイルミネーションが発光をしない時間(ms)を設定します。push.LedOnTimeとの組み合わせで点滅させることがで
きます。
D.4.10 push.VibPatternキー名
push.VibPattern
PushDefineクラスの定義名
KEY_NOTIFICATION_VIB_PATTERN
デフォルト値
省略した場合はpayloadの値が有効になります。
省略可否
可
設定可能な値
0~2147483647
説明
Notificationのバイブパターンをミリ秒で設定します。[待機時間],[鳴動時間],...の繰り返しです。
D.4.11 push.NotificationAppNameキー名
push.NotificationAppName
PushDefineクラスの定義名
KEY_NOTIFICATION_APPNAMEID
デフォルト値
なし
省略可否
不可
設定可能な値
Androidアプリケーションの文字列のリソースID
説明
通知されたpayloadにtitleが含まれなかった場合にタイトルとして表示する文字列を示すリソースIDを指定します。payloadにtitleが
省略され、さらに本設定も省略された場合、通知領域へのタイトルには何も表示されません。
- 214 -
D.4.12 push.NotificationMainClassNameキー名
push.NotificationMainClassName
PushDefineクラスの定義名
KEY_NOTIFICATION_MAIN_CLASS_NAME
デフォルト値
なし
省略可否
不可
設定可能な値
存在するActivityクラス名
説明
payloadのactionで""(空文字)が指定された場合に起動するActivityクラスを設定します。Activityクラスには、android.app.Activityの派生クラスでかつアプリケーションのマニフェストファイルで<activity>宣言しているクラスを指定してください。省略された場合や
存在しないクラスを指定した場合、payloadのactionは機能しません。
D.4.13 push.NotificationIconIDキー名
push.NotificationIconID
PushDefineクラスの定義名
KEY_NOTIFICATION_ICON_ID
デフォルト値
なし
省略可否
不可
設定可能な値
Androidアプリケーションアイコン画像のリソースID
説明
プッシュ通知時に表示するアイコン画像のリソースIDを設定します。設定が省略された場合や存在しないリソースIDの場合、プッシ
ュ通知を受けても通知領域には何も表示されません。
D.4.14 push.gcm.NotificationModeキー名
push.gcm.NotificationMode
PushDefineクラスの定義名
PREFKEY_NOTIFICATION_MODE
デフォルト値
true
省略可否
可
- 215 -
設定可能な値
trueまたはfalse
説明
GCMの表示モードを設定します。true:GCMプッシュの表示, false:非表示
D.4.15 push.gcm.SenderIDキー名
push.gcm.SenderID
PushDefineクラスの定義名
KEY_GCM_SENDERID
デフォルト値
なし
省略可否
GCMプッシュを利用する場合は省略不可、利用しない場合は不要
設定可能な値
Googleの開発者向けのWebサイトから入手したSENDER ID
説明
GCM: GCMを用いるためのSENDER IDを設定します。SENDER ID は、Googleの開発者向けのWebサイトで入手します。
D.4.16 push.LogClassNameキー名
push.LogClassName
PushDefineクラスの定義名
KEY_LOG_CLASS_NAME
デフォルト値
なし
省略可否
不可
設定可能な値
com.fujitsu.imaps.push.customize.PushLogの派生クラス名
説明
ログクラス名を設定します。”com.fujitsu.imaps.plugin.push.PushLogImpl”を設定すると、ログファイルがログ送信の対象となり、IMAPSサーバ側でログを収集できます。
D.4.17 push.AuthClassNameキー名
push.AuthClassName
PushDefineクラスの定義名
KEY_AUTH_CLASS_NAME
デフォルト値
なし
- 216 -
省略可否
不可
設定可能な値
com.fujitsu.imaps.push.customize.PushExtAuthの派生クラス名
説明
認証クラス名を設定します。”com.fujitsu.imaps.plugin.push.PushExtAuthImpl”を設定することで、IMAPSの認証機能を利用するこ
とができます。
D.4.18 push.ExtensionDataキー名
push.ExtensionData
PushDefineクラスの定義名
KEY_EXTENSION_DATA
デフォルト値
省略した場合、かつ6.5.8 拡張データの指定に示した拡張データの設定を行わない場合、IMAPSサーバに拡張データは登録され
ません。
省略可否
可
設定可能な値
任意の文字列
説明
拡張データを設定します。
任意の値を設定します。この値はIMAPSサーバに通知され、登録IDと関連付けて管理されます。
プッシュWeb APIで取得し、送信先の情報として利用できます。
D.4.19 push.ServerConnectRetryCountキー名
push.ServerConnectRetryCount
PushDefineクラスの定義名
KEY_SERVER_CONNECT_RETRY_COUNT
デフォルト値
0(リトライしない)
省略可否
可
設定可能な値
0~2147483647
説明
IMAPSサーバとの通信に失敗した場合にリトライする回数を設定します。省略した場合、0(リトライしない)となります。
※開発中の動作確認用の定義です。
- 217 -
D.4.20 push.ServerConnectRetryWaitキー名
push.ServerConnectRetryWait
PushDefineクラスの定義名
KEY_SERVER_CONNECT_RETRY_WAIT
デフォルト値
0(待ち合わせ時間なしでリトライします)
省略可否
可
設定可能な値
0~2147483647
説明
IMAPSサーバとの通信に失敗した場合にリトライするまでの待ち合わせ時間(秒)を設定します。省略した場合、0(待ち合わせ時間
なしでリトライします)となります。
※開発中の動作確認用の定義です。
注意
極端に小さな値を指定するとリトライが頻繁に発生するため、バッテリ消費が激しくなり発熱する恐れがあります。
D.5 定義項目(APNsプッシュ通知)本節では、APNsプッシュ通知を受信するアプリケーションの、プッシュクライアント設定ファイルに設定可能なキーとそれらに設定可能
な値について説明します。各項目は以下の形式で説明します。
キー名
プッシュクライアント設定ファイルに設定可能なキーの名前を示します。
デフォルト
キーの省略値を説明します。
省略可否
省略可能か否かを説明します。
型
キーの型を説明します。
説明
キーの説明です。
D.5.1 push.SandboxFlgキー名
push.SandBoxFlg
デフォルト
false
省略可否
可
- 218 -
型
Boolean
設定可能な値
trueまたはfalse
説明
プッシュ通知で利用するAPNsが開発用かリリース用かを指定します。true:開発用、false:リリース用。
D.5.2 push.Addressキー名
push.Address
デフォルト
なし
省略可否
不可
型
String
設定可能な値
http[s]:サーバアドレス[:ポート番号]
1024文字目まで有効
説明
IMAPSサーバのURLを設定します。
ポート番号には、IMAPSサーバで使用するWebサーバのポート番号を設定してください。
D.5.3 push.SslForceFlgキー名
push.SslForceFlg
デフォルト
false
省略可否
可
型
Boolean
設定可能な値
trueまたはfalse
説明
RESTサービスとSSL認証する際に、証明書の厳密なチェックを省略するかを設定します。
true
証明書検証を行わない。
false
OSのキーチェーンサービスに登録されたCA証明書で署名検証を実施する 。
- 219 -
D.5.4 push.RetryWaitTimeキー名
push.RetryWaitTime
デフォルト
60
省略可否
可
型
Number
設定可能な値
0~2147483647
説明
IMAPSサーバへデバイストークン登録の接続に失敗した場合にリトライする待機時間(秒)を設定します。
注意
・ 極端に小さな値を指定するとリトライが頻繁に発生するため、バッテリ消費が激しくなり発熱する恐れがあります。
D.5.5 push.LowerUpdateTimeキー名
push.LowerUpateTime
デフォルト
-1
省略可否
可
型
Number
設定可能な値
-1~2147483647
説明
IMAPSサーバに対してデバイストークンを再登録する時間の下限値(秒)を設定します。-1の場合は再登録を行いません。
注意
極端に小さな値を指定するとリトライが頻繁に発生するため、バッテリ消費が激しくなり発熱する恐れがあります。
D.5.6 push.RetryCountキー名
push.RetryCount
デフォルト
0
- 220 -
省略可否
可
型
Number
設定可能な値
0~2147483647
説明
既読通知において、IMAPSサーバへの通信に失敗した場合に、リトライする回数を設定します。
D.6 定義項目(WNSプッシュ通知)本節では、WNSプッシュ通知を受信するアプリケーションの、プッシュクライアント設定ファイルに設定可能なキーとそれらに設定可能
な値について説明します。各項目は以下の形式で説明します。
キー名
プッシュクライアント設定ファイルに設定可能なキーの名前を示します。
デフォルト値
キーの省略値を説明します。
省略可否
省略可能か否かを説明します。
設定可能な値
キーの型を説明します。
説明
キーの説明です。
D.6.1 push.ServerAddressキー名
push.ServerAddress
デフォルト
なし
省略可否
不可
設定可能な値
http[s]:サーバアドレス[:ポート番号]
1024文字目まで有効
説明
IMAPSサーバのURLを設定します。
ポート番号には、IMAPSサーバで使用するWebサーバのポート番号を設定してください。
D.6.2 push.SelfCertificateキー名
push.SelfCertificate
- 221 -
デフォルト
false
省略可否
可
設定可能な値
trueまたはfalse
説明
自己証明書の署名検証を無視するかどうかを設定します。true:検証を無視する、false:検証する。
D.6.3 push.wns.NotificationModeキー名
push.wns.NotificationMode
デフォルト
true
省略可否
可
設定可能な値
trueまたはfalse
説明
WNSの表示モードを設定します。true:WNSプッシュの表示, false:非表示
D.6.4 push.LogClassNameSpaceキー名
push.LogClassNameSpace
デフォルト
なし
省略可否
可
設定可能な値
PushLogの派生クラスの名前空間名
説明
PushLogの派生クラスの名前空間名を設定します。
D.6.5 push.LogClassNameキー名
push.LogClassName
デフォルト
なし
省略可否
可
- 222 -
設定可能な値
PushLogの派生クラス名
説明
ログクラス名を設定します。
D.6.6 push.AuthClassNameSpaceキー名
push.AuthClassNameSpace
デフォルト
なし
省略可否
可
設定可能な値
PushExtAuthの派生クラスの名前空間名(DLLアセンブリ名)
説明
PushExtAuthの派生クラスの名前空間名(DLLアセンブリ名)を設定します。
D.6.7 push.AuthClassNameキー名
push.AuthClassName
デフォルト
なし
省略可否
可
設定可能な値
PushExtAuthの派生クラス名
説明
認証クラス名を設定します。
D.6.8 push.ExtensionDataキー名
push.ExtensionData
デフォルト
なし
省略可否
可
設定可能な値
任意の文字列
説明
拡張データを設定します。
任意の値を設定します。この値はIMAPSサーバに通知され、チャネルURIと関連付けて管理されます。
- 223 -
プッシュWeb APIで取得し、送信先の情報として利用できます。
D.6.9 push.ServerConnectRetryCountキー名
push.ServerConnectRetryCount
デフォルト
0(リトライしない)
省略可否
可
設定可能な値
-2147483648~2147483647
説明
IMAPSサーバとの通信に失敗した場合にリトライする回数を設定します。省略した場合、0(リトライしない)となります。
-1以下:リトライし続ける
0:リトライしない
1以上:指定回数リトライする
D.6.10 push.ServerConnectRetryWaitキー名
push.ServerConnectRetryWait
デフォルト
0(待ち合わせ時間なしでリトライします)
省略可否
可
設定可能な値
0~2147483647
説明
IMAPSサーバとの通信に失敗した場合にリトライするまでの待ち合わせ時間(秒)を設定します。省略した場合、0(待ち合わせ時間
なしでリトライします)となります。
D.6.11 push.BackGroundTaskErrorLogFileNameキー名
push.BackGroundTaskErrorLogFileName
デフォルト
なし
省略可否
可
設定可能な値
ログ出力用の外部ファイル名
説明
バックグラウンドタスク実行時のエラーを外部ファイルへログ出力する際のファイル名を設定します。
- 224 -
ファイル名の設定なし:エラー内容を外部ファイルに出力しない。
ファイル名の設定あり:エラー内容を設定したファイル名で出力します。
- 225 -
付録E Cordova CLI本製品ではCordova CLIの以下のコマンドをサポートします。
コマンド 説明
cordova create 新しいCordovaプロジェクトを作成します
cordova help Cordova CLIのヘルプを出力します
cordova info 各プラットフォーム用のSDKのバージョンや現在インストールされているプラットフォームな
どの情報を出力します
cordova requirements 指定したプラットフォームの前提条件が揃っているかを確認します
cordova platform Cordovaプロジェクトが対応するプラットフォームを操作します
cordova plugin Cordovaプロジェクトが使用するプラグインを操作します
cordova prepare 対象のプラットフォームのビルドに必要なファイルをコピーします
cordova compile 対象のプラットフォームをビルドします
cordova clean 指定したプラットフォームのビルド生成物を削除します
cordova run 対象デバイスにアプリケーションを配備します
cordova build cordova prepareとcompileを実行します
cordova emulate cordova run --emulatorを実行します
E.1 cordova create
形式
cordova create <PATH> [ID [NAME]] [options]
説明
新しいCordovaプロジェクトを作成します。
PATH
Cordovaプロジェクトを作成する場所を指定します。
ID
逆ドメイン形式のプロジェクトIDを指定します。この値が、アプリケーションのパッケージ名になります。
省略した場合、io.cordova.hellocordovaが使用されます。
作成後に変更する場合は、<プロジェクトルート>/config.xmlのwidget要素のid属性の値を変更し、cordova prepareコマンドを実行
してください。 また、変更前のリソースは、必要に応じて削除してください。
変更前の値が、io.cordova.hellocordovaの場合
<プロジェクトルート>/platforms/android/src/io/cordova/hellocordova
NAME
アプリケーションの名前を指定します。この値がアプリケーションの表示名になります。
省略した場合、HelloCordovaが使用されます。
作成後に変更する場合は、<プロジェクトルート>/config.xmlのname要素の値を変更し、cordova prepareコマンドを実行してくださ
い。
- 226 -
注意
・ 先頭に数字は使用できません。
オプション
--template=<PATH|NPM PACKAGE|GIT URL>
指定したカスタムテンプレートを使用してプロジェクトを作成します。
--link-to=<PATH>
すでに存在しているwww資産を参照したプロジェクトを作成します。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cordova create hello
> cordova create hello com.fujitsu.imaps HelloWorld --template=c:\templates\cordova-custom-template
E.2 cordova help
形式
cordova help [コマンド]
説明
Cordova CLIのヘルプを表示します。
コマンド
指定したコマンドのヘルプを表示します。
省略した場合は、コマンドの一覧と概要を表示します。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cordova help create
E.3 cordova info
- 227 -
形式
cordova info
説明
標準出力とCordovaプロジェクトのルートフォルダーに、トラブル調査などに役立つ情報(info.txt)を生成します。カレントディレクトリ
をCordovaプロジェクトの配下に移動してから実行してください。
以下の情報を出力します。
・ Node.jsのバージョン
・ Cordovaのバージョン
・ プロジェクト設定ファイルの内容
・ 使用中のプラグインの情報
・ 使用中のプラットフォームの情報
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova info
E.4 cordova requirements
形式
cordova requirements [PLATFORM...]
説明
指定したプラットフォームの前提条件がそろっているかを確認します。
PLATFORM
対象のプラットフォームを指定します。
複数のプラットフォームを一度に指定するには、半角スペースで区切って指定します。
省略すると、プロジェクトに追加されているすべてのプラットフォームを対象にします。
戻り値
0
前提条件がそろっている場合
1
前提条件が十分でない場合
実行例
以下のように実行します。
- 228 -
> cd <Cordovaプロジェクトのディレクトリ>
> cordova requirements android
E.5 cordova platform add
形式
cordova platform add <plat-spec> [--link]
説明
Cordovaプロジェクトが対応するプラットフォームを追加します。
開発環境のOSによって、開発可能なプラットフォームが決まっています。
各開発環境のOSで開発可能なプラットフォームは以下のとおりです。
開発環境のOS 開発可能なプラットフォーム
Windows Android、Windows
Mac OS Android、iOS
<plat-spec> : <platform[@<version>]|path|url[#<commit-ish>]>
platform
本製品で提供するプラットフォームは、android、ios、windows、browserです。android、ios、windows、browserのどれかを指定し
ます。
本製品で提供していないプラットフォームを指定した場合は、外部のリポジトリから取得します。
複数のプラットフォームを一度に指定するには、半角スペースで区切って指定します。
本製品が提供するプラットフォームを使用する場合は、platformのみ指定してください。
version
バージョンを指定します。major.minor.patch形式
path
追加するプラットフォームのパスを指定します。
url
追加するプラットフォームのgitリポジトリのURLを指定します。
commit-ish
コミット/タグ/ブランチのどれかを指定します。省略した場合は、masterを選択します。
オプション
--link
ローカル環境に存在するプラットフォームを参照して使用します。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
- 229 -
> cd <Cordovaプロジェクトのディレクトリ>
> cordova platform add android
E.6 cordova platform remove
形式
cordova platform remove <platform>
説明
Cordovaプロジェクトから指定したプラットフォームを削除します。
platform
android、ios、windows、browserのどれかを指定します。
複数のプラットフォームを一度に指定するには、半角スペースで区切って指定します。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova platform remove android
E.7 cordova platform list
形式
cordova platform list
説明
Cordovaプロジェクトに追加したプラットフォームと使用可能なプラットフォームの一覧を表示します。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova platform list
- 230 -
E.8 cordova platform check
形式
cordova platform check
説明
IMAPSDev/plugins内の更新可能なプラットフォーム一覧を出力します。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova platform check
E.9 cordova plugin add
形式
cordova plugin add <plugin-spec> [--searchpath] [--link] [--browserify] [--force]
説明
CordovaプロジェクトにCordovaプラグインを追加します。
<plugin-spec> : <pluginid>[@<version>]|<directory>|<url>[#<commit-ish>][subdir]
pluginid
追加するCordovaプラグインのIDを指定します。
本製品が提供するCordovaプラグインのIDは、cordova plugin searchコマンドで確認できます。
本製品で提供していないCordovaプラグインのIDを指定した場合は、外部のリポジトリから取得します。
本製品が提供するCordovaプラグインを使用する場合は、pluginidのみ指定してください。
version
バージョンを指定します。major.minor.patch形式
directory
追加するCordovaプラグインのパスを指定します。
url
追加するCordovaプラグインのgitリポジトリのURLを指定します。
commit-ish
コミット/タグ/ブランチのどれかを指定します。省略した場合は、masterを選択します。
subdir
指定したプラグインのplugin.xmlがあるサブディレクトリを指定します。
- 231 -
オプション
--searchpath
ローカル環境にあるプラグインフォルダー内を検索します。複数のフォルダーを同時に指定できます。 その場合はWindowsではセミコロン(;)、Mac OS Xではコロン(:)で間を区切ります。
--link
ローカル環境にあるCordovaプラグインを追加する際に、参照して使用します。
--browserify
cordova prepareコマンド実行時に自動生成されるcordova.jsのサイズを縮小し、アプリ起動時間・実行時間を改善します。
--force
すでにプロジェクト内に同名のファイルが存在しても追加するプラグインのファイルで上書きします。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova plugin add imaps-plugin-core
E.10 cordova plugin remove
形式
cordova plugin remove <pluginid>
説明
Cordovaプロジェクトから指定したCordovaプラグインを削除します。
pluginid
削除するCordovaプラグインのIDを指定します。複数のCordovaプラグインを一度に削除する場合は、半角スペースで区切って指
定します。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova plugin remove imaps-plugin-core
- 232 -
E.11 cordova plugin list
形式
cordova plugin list
説明
Cordovaプロジェクトに追加したCordovaプラグインの一覧を表示します。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova plugin list
E.12 cordova plugin search
形式
cordova plugin search
説明
使用可能なCordovaプラグインの一覧を表示します。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova plugin search
E.13 cordova prepare
形式
cordova prepare [PLATFORM...] [--browserify]
説明
対象のプラットフォームのビルドに必要なファイルをコピーします。
- 233 -
PLATFORM
対象のプラットフォームを指定します。
複数のプラットフォームを一度に指定するには、半角スペースで区切って指定します。
省略すると、プロジェクトに追加されているすべてのプラットフォームを対象にします。
オプション
--browserify
JavaScriptファイルを実行時ではなく、ビルド時にbrowserifyを使ってコンパイルします。
browserifyオプションを有効にすることで、自動生成されるcordova.jsのサイズが縮小します。また、アプリ起動時間・実行時間が
改善します。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova prepare android
E.14 cordova compile
形式
cordova compile [--debug|--release] [--device|--emulator|--target=<targetid>] [PLATFORM...] [-- platformOpts]
説明
対象のプラットフォームをビルドします。
PLATFORM
対象のプラットフォームを指定します。
複数のプラットフォームを一度に指定するには、半角スペースで区切って指定します。
省略すると、プロジェクトに追加されているすべてのプラットフォームを対象にします。
オプション
--debug
アプリケーションをデバッグ用にビルドします。
--debugと--releaseのどちらも指定しない場合はデバッグ用にビルドします。
Cordovaプロジェクトのルートディレクトリの下にパッケージを作成します。
表E.1 パッケージを作成する場所
プラットフォー
ム
場所
Android platforms/android/build/outputs/apk/android-debug.apk
iOS platforms/ios/biuld/device/<アプリケーション名>.ipa
Windows platforms/windows/AppPackages/CordovaApp.Windows_<バージョン>_<archs>_debug_Test
- 234 -
--release
アプリケーションをリリース用にビルドします。
Cordovaプロジェクトのルートディレクトリの下にパッケージを作成します。
表E.2 パッケージを作成する場所
プラットフォー
ム
場所
Android platforms/android/outputs/apk/android-release.apk
iOS platforms/ios/biuld/device/<アプリケーション名>.ipa
Windows platforms/windows/AppPackages/CordovaApp.Windows_<バージョン>_<archs>_Test
リリースモードでビルドする方法は、各プラットフォームベンダーの情報、および、 2.2.4 パッケージングの説明を参照してくださ
い。
プラットフォー
ム
参考URL
Android http://cordova.apache.org/docs/en/6.x/guide/platforms/android/index.html
http://developer.android.com/tools/publishing/app-signing.html
iOS http://cordova.apache.org/docs/en/6.x/guide/platforms/ios/index.html
https://developer.apple.com/jp/documentation/AppDistributionGuide.pdf
Windows http://cordova.apache.org/docs/en/6.x/guide/platforms/win8/index.html
--device
USB接続しているスマートデバイスに配備します。
--device、--emulator、--targetのいずれも指定しない場合は、USB接続された端末があればそれに配備し、なければ起動してい
るエミュレータ/シミュレータに配備します。
配備可能なエミュレータが無い場合はプラットフォームによって動作が異なります。
プラットフォーム 動作
Android エミュレータの導入を促すメッセージを表示する
iOS シミュレータが起動する
Windows Windowsマシンに配備する
--emulator
エミュレータに配備します。
--target
指定したスマートデバイスに配備します。
targetidは、cordova run --listコマンドで確認してください。
--buildConfig <config file>|--buildConfig=<config file>
署名オプションを定義したファイルを指定します。
build.jsonファイルをCordovaプロジェクトのルートディレクトリに配置することで、本オプションを省略できます。
指定する内容は、2.2.4 パッケージングを参照してください。
platformOpts
ハイフン二つ「--」の後に空白を開けた後ろに、リリースビルド用の署名オプションやプラットフォーム固有の設定を指定します。
--buildConfigと本オプションを同時に使用した場合は、本オプションに指定した値が優先されます。
指定する内容は、2.2.4 パッケージングを参照してください。
- 235 -
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova compile --release
E.15 cordova clean
形式
cordova clean [PLATFORM...]
説明
指定したプラットフォームのビルド生産物を削除します。
PLATFORM
対象のプラットフォームを指定します。
複数のプラットフォームを一度に指定するには、半角スペースで区切って指定します。
省略すると、プロジェクトに追加されているすべてのプラットフォームを対象にします。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova clean android
E.16 cordova run
形式
cordova run [--list|--nobuild] [--debug|--release] [--device|--emulator|--target=<targetid>] [--browserify] [--
archs=<architecture>] [--buildConfig] [PLATFORM...] [-- platformOpts]
説明
cordova prepare, cordova compileを実行し、対象のスマートデバイスにアプリケーションを配備します。
PLATFORM
対象のプラットフォームを指定します。
- 236 -
複数のプラットフォームを一度に指定するには、半角スペースで区切って指定します。
省略すると、プロジェクトに追加されているすべてのプラットフォームを対象にします。
オプション
--list
利用可能なスマートデバイスの一覧を表示します。
--nobuild
ビルドをスキップしてアプリケーションを配備します。
--debug
アプリケーションをデバッグ用にビルドします。
--debugと--releaseのどちらも指定しない場合はデバッグ用にビルドします。
Cordovaプロジェクトのルートディレクトリの下にパッケージを作成します。
表E.3 パッケージを作成する場所
プラットフォー
ム
場所
Android platforms/android/build/outputs/apk/android-debug.apk
iOS platforms/ios/biuld/device/<アプリケーション名>.ipa
Windows platforms/windows/AppPackages/CordovaApp.Windows_<バージョン>_<archs>_debug_Test
--release
アプリケーションをリリース用にビルドします。
Cordovaプロジェクトのルートディレクトリの下にパッケージを作成します。
表E.4 パッケージを作成する場所
プラットフォー
ム
場所
Android platforms/android/outputs/apk/android-release.apk
iOS platforms/ios/biuld/device/<アプリケーション名>.ipa
Windows platforms/windows/AppPackages/CordovaApp.Windows_<バージョン>_<archs>_Test
リリースモードでビルドする方法は、各プラットフォームベンダーの情報、および、 2.2.4 パッケージングの説明を参照してくださ
い。
プラットフォー
ム
参考URL
Android http://cordova.apache.org/docs/en/6.x/guide/platforms/android/index.html
http://developer.android.com/tools/publishing/app-signing.html
iOS http://cordova.apache.org/docs/en/6.x/guide/platforms/ios/index.html
https://developer.apple.com/jp/documentation/AppDistributionGuide.pdf
Windows http://cordova.apache.org/docs/en/6.x/guide/platforms/win8/index.html
--device
USB接続しているスマートデバイスに配備します。
--device、--emulator、--targetのいずれも指定しない場合は、USB接続された端末があればそれに配備し、なければ起動してい
るエミュレータ/シミュレータに配備します。
配備可能なエミュレータが無い場合はプラットフォームによって動作が異なります。
- 237 -
プラットフォーム 動作
Android エミュレータの導入を促すメッセージを表示する
iOS シミュレータが起動する
Windows Windowsマシンに配備する
--emulator
エミュレータに配備します。
--target
指定したスマートデバイスに配備します。
targetidは、cordova run --listコマンドで確認してください。
--browserify
JavaScriptファイルを実行時ではなく、ビルド時にbrowserifyを使ってコンパイルします。
browserifyフラグを有効にすることで、自動生成されるcordova.jsのサイズが縮小します。また、アプリ起動時間・実行時間が改
善します。
--archs
ビルドターゲットとなるプロセッサアーキテクチャーを指定します。 複数の値を指定する場合は、半角空白で区切って指定しま
す。 例:--archs="x86 x64" 省略した場合は、anycpuです。 指定できる値は、以下のとおりです。
値 説明
anycpu すべてのプロセッサ用にビルドします。
x86 x86用にビルドします。
x64 x64用にビルドします。
arm armプロセッサ用にビルドします。
--buildConfig <config file>|--buildConfig=<config file>
署名オプションを定義したファイルを指定します。
build.jsonファイルをCordovaプロジェクトのルートディレクトリに配置することで、本オプションを省略できます。
指定する内容は、2.2.4 パッケージングを参照してください。
platformOpts
ハイフン二つ「--」の後に空白を開けた後ろに、リリースビルド用の署名オプションやプラットフォーム固有の設定を指定します。
--buildConfigと本オプションを同時に使用した場合は、本オプションに指定した値が優先されます。
指定する内容は、2.2.4 パッケージングを参照してください。
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova run --release
- 238 -
E.17 cordova build
形式
cordova build [--debug|--release] [--device|--emulator|--target=<targetid>] [PLATFORM...] [--browserify] [--
archs<architecture>] [-- platformOpts]
説明
対象のプラットフォームをビルドします。
PLATFORM
対象のプラットフォームを指定します。
複数のプラットフォームを一度に指定するには、半角スペースで区切って指定します。
省略すると、プロジェクトに追加されているすべてのプラットフォームを対象にします。
オプション
--debug
アプリケーションをデバッグ用にビルドします。
--debugと--releaseのどちらも指定しない場合はデバッグ用にビルドします。
Cordovaプロジェクトのルートディレクトリの下にパッケージを作成します。
表E.5 パッケージを作成する場所
プラットフォー
ム
場所
Android platforms/android/build/outputs/apk/android-debug.apk
iOS platforms/ios/biuld/device/<アプリケーション名>.ipa
Windows platforms/windows/AppPackages/CordovaApp.Windows_<バージョン>_<archs>_debug_Test
--release
アプリケーションをリリース用にビルドします。
Cordovaプロジェクトのルートディレクトリの下にパッケージを作成します。
表E.6 パッケージを作成する場所
プラットフォー
ム
場所
Android platforms/android/outputs/apk/android-release.apk
iOS platforms/ios/biuld/device/<アプリケーション名>.ipa
Windows platforms/windows/AppPackages/CordovaApp.Windows_<バージョン>_<archs>_Test
リリースモードでビルドする方法は、各プラットフォームベンダーの情報、および、 2.2.4 パッケージングの説明を参照してくださ
い。
プラットフォー
ム
参考URL
Android http://cordova.apache.org/docs/en/6.x/guide/platforms/android/index.html
http://developer.android.com/tools/publishing/app-signing.html
iOS http://cordova.apache.org/docs/en/6.x/guide/platforms/ios/index.html
https://developer.apple.com/jp/documentation/AppDistributionGuide.pdf
Windows http://cordova.apache.org/docs/en/6.x/guide/platforms/win8/index.html
- 239 -
--device
USB接続しているスマートデバイスに配備します。
--device、--emulator、--targetのいずれも指定しない場合は、USB接続された端末があればそれに配備し、なければ起動してい
るエミュレータ/シミュレータに配備します。
配備可能なエミュレータが無い場合はプラットフォームによって動作が異なります。
プラットフォーム 動作
Android エミュレータの導入を促すメッセージを表示する
iOS シミュレータが起動する
Windows Windowsマシンに配備する
--emulator
エミュレータに配備します。
--target
指定したスマートデバイスに配備します。
targetidは、cordova run --listコマンドで確認してください。
--buildConfig <config file>|--buildConfig=<config file>
署名オプションを定義したファイルを指定します。
build.jsonファイルをCordovaプロジェクトのルートディレクトリに配置することで、本オプションを省略できます。
指定する内容は、2.2.4 パッケージングを参照してください。
--browserify
JavaScriptファイルを実行時ではなく、ビルド時にbrowserifyを使ってコンパイルします。
browserifyフラグを有効にすることで、自動生成されるcordova.jsのサイズが縮小します。また、アプリ起動時間・実行時間が改
善します。
--archs
ビルドターゲットとなるプロセッサアーキテクチャーを指定します。 複数の値を指定する場合は、半角空白で区切って指定しま
す。 例:--archs="x86 x64" 省略した場合は、anycpuです。 指定できる値は、以下のとおりです。
値 説明
anycpu すべてのプロセッサ用にビルドします。
x86 x86用にビルドします。
x64 x64用にビルドします。
arm armプロセッサ用にビルドします。
platformOpts
ハイフン二つ「--」の後に空白を開けた後ろに、リリースビルド用の署名オプションやプラットフォーム固有の設定を指定します。
--buildConfigと本オプションを同時に使用した場合は、本オプションに指定した値が優先されます。
指定する内容は、2.2.4 パッケージングを参照してください。
戻り値
0
正常終了
1
異常終了
- 240 -
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova build --release
E.18 cordova emulate
形式
cordova emulate [--list|--nobuild] [--debug|--release] [--browserify] [--archs=anycpu|x86|x64|arm] [PLATFORM...] [--
platformOpts]
説明
cordova run --emulatorを実行します。
PLATFORM
対象のプラットフォームを指定します。
複数のプラットフォームを一度に指定するには、半角スペースで区切って指定します。
省略すると、プロジェクトに追加されているすべてのプラットフォームを対象にします。
オプション
--list
利用可能なスマートデバイスの一覧を表示します。
--nobuild
ビルドをスキップしてアプリケーションを配備します。
--debug
アプリケーションをデバッグ用にビルドします。
--debugと--releaseのどちらも指定しない場合はデバッグ用にビルドします。
Cordovaプロジェクトのルートディレクトリの下にパッケージを作成します。
表E.7 パッケージを作成する場所
プラットフォー
ム
場所
Android platforms/android/build/outputs/apk/android-debug.apk
iOS platforms/ios/biuld/device/<アプリケーション名>.ipa
Windows platforms/windows/AppPackages/CordovaApp.Windows_<バージョン>_<archs>_debug_Test
--release
アプリケーションをリリース用にビルドします。
Cordovaプロジェクトのルートディレクトリの下にパッケージを作成します。
表E.8 パッケージを作成する場所
プラットフォー
ム
場所
Android platforms/android/outputs/apk/android-release.apk
iOS platforms/ios/biuld/device/<アプリケーション名>.ipa
Windows platforms/windows/AppPackages/CordovaApp.Windows_<バージョン>_<archs>_Test
- 241 -
リリースモードでビルドする方法は、各プラットフォームベンダーの情報、および、 2.2.4 パッケージングの説明を参照してくださ
い。
プラットフォー
ム
参考URL
Android http://cordova.apache.org/docs/en/6.x/guide/platforms/android/index.html
http://developer.android.com/tools/publishing/app-signing.html
iOS http://cordova.apache.org/docs/en/6.x/guide/platforms/ios/index.html
https://developer.apple.com/jp/documentation/AppDistributionGuide.pdf
Windows http://cordova.apache.org/docs/en/6.x/guide/platforms/win8/index.html
--device
USB接続しているスマートデバイスに配備します。
--device、--emulator、--targetのいずれも指定しない場合は、USB接続された端末があればそれに配備し、なければ起動してい
るエミュレータ/シミュレータに配備します。
配備可能なエミュレータが無い場合はプラットフォームによって動作が異なります。
プラットフォーム 動作
Android エミュレータの導入を促すメッセージを表示する
iOS シミュレータが起動する
Windows Windowsマシンに配備する
--emulator
エミュレータに配備します。
--target
指定したスマートデバイスに配備します。
targetidは、cordova run --listコマンドで確認してください。
--buildConfig <config file>|--buildConfig=<config file>
署名オプションを定義したファイルを指定します。
build.jsonファイルをCordovaプロジェクトのルートディレクトリに配置することで、本オプションを省略できます。
指定する内容は、2.2.4 パッケージングを参照してください。
--archs
ビルドターゲットとなるプロセッサアーキテクチャーを指定します。 複数の値を指定する場合は、半角空白で区切って指定しま
す。 例:--archs="x86 x64" 省略した場合は、anycpuです。 指定できる値は、以下のとおりです。
値 説明
anycpu すべてのプロセッサ用にビルドします。
x86 x86用にビルドします。
x64 x64用にビルドします。
arm armプロセッサ用にビルドします。
platformOpts
ハイフン二つ「--」の後に空白を開けた後ろに、リリースビルド用の署名オプションやプラットフォーム固有の設定を指定します。
--buildConfigと本オプションを同時に使用した場合は、本オプションに指定した値が優先されます。
指定する内容は、2.2.4 パッケージングを参照してください。
- 242 -
戻り値
0
正常終了
1
異常終了
実行例
以下のように実行します。
> cd <Cordovaプロジェクトのディレクトリ>
> cordova emulate android
- 243 -
付録F 双方向通信アプリケーションのサンプル
F.1 サンプルアプリの種類
本製品では、以下のサンプルを提供しています。
リストアプリ以外のサンプルは、Cordovaプロジェクトの形式で提供しています。
実行に必要なCordovaプラグインとプラットフォームを追加して使用します。
実行方法は、第2章 ハイブリッドアプリケーションを参照してください。
アプリ名 内容 実行に必要なCordovaプラグイン
チャットアプリ チャットができます。 なし
点検アプリ 複数人で手分けして点検業務を行います。 なし
カメラアプリ 写真を共有し、手書きで写真に文字を書き込めます。 Camera
アンケートアプリ リアルタイムにアンケート結果を共有します。 なし
リストアプリ ルーム一覧、参加者一覧取得のサンプルです。 なし
サンプルアプリは以下のフォルダー配下に格納されています。
<製品インストールフォルダー>\sample
/opt/FJSVimsrv/sample
サンプルアプリごとの格納フォルダーは以下のとおりです。
アプリ名 格納場所
チャットアプリ sample\chat
点検アプリ sample\tenken
カメラアプリ sample\camera
アンケートアプリ sample\an
リストアプリ<製品インストールフォルダー>\rt_comm\samplehtml\list
/opt/FJSVimrtc/samplehtml/list
Webアプリケーション
双方向通信サービスを起動し、以下にブラウザでアクセスすることで、PC用のサンプルにアクセスできます。ハイブリッドアプリケー
ションとPCブラウザ間の双方向通信が行えます。
http://[サーバ名]:3300
注意
IEブラウザでは互換表示モードの場合、動作しません。
- 244 -
付録G jQuery Mobile本章では、jQuery Mobileの使い方について説明します。
G.1 アプリケーション開発方法
G.1.1 提供ファイル
以下のスクリプトファイル、スタイルシートを提供します。拡張子の前に「.min」が付いているファイルは、空白、改行やコメントを削除し
てファイルサイズを縮小した圧縮版で、運用時は圧縮版のファイルを使用することを推奨します。拡張子の前に「.min」が付いていない
ファイルは、空白、改行やコメントにより可読性を向上させたファイルで、開発・デバッグ時に利用します。
提供ファイル 説明
jquery.mobile-1.4.2.js jQuery Mobileスクリプト
jquery.mobile-1.4.2.min.js jQuery Mobileスクリプト圧縮版
jquery.mobile-1.4.2.css jQuery Mobile用スタイルシート
jquery.mobile-1.4.2.min.css jQuery Mobile用スタイルシート圧縮版
jquery-2.1.0.js jQueryスクリプト
jquery-2.1.0.min.js JQueryスクリプト圧縮版
images/icons-png スタイルシートで使用するイメージ
images/icons-svg スタイルシートで使用するイメージ
images/ajax-loader.gif スタイルシートで使用するイメージ
G.1.2 アプリケーションを組み込む
jQuery Mobileは、アプリケーションに組み込んで使用します。
1. インストール先の、jQuery Mobileが格納されたディレクトリをコピーして使用します。
<製品インストールフォルダー>\development\jquerymobile\runtime
/opt/FJSVimsrv/development/jquerymobile/runtime
2. HTMLの<head>~</head>に以下の記述を追加します。
<link rel="stylesheet" href="runtime/jquery.mobile-1.4.2.min.css"/>
<script src="runtime/jquery-2.1.0.min.js"> </script>
<script src="runtime/jquery.mobile-1.4.2.min.js"> </script>
G.1.3 jQuery MobileによるHTMLページの作成方法
jQuery Mobileを利用したHTMLページの作成方法については、jQuery Mobile 公式サイト(http://jquerymobile.com/)のDemos(http://jquerymobile.com/demos/)を参照してください。
G.2 APIリファレンス
jQuery Mobile公式サイト(http://jquerymobile.com/)のAPI Documentation (http://api.jquerymobile.com/)を参照してください。
- 245 -
G.3 開発を行う上での注意事項
開発を行う上での注意事項を以下にまとめます。
No. 内容 対応方法など
1 要素が多いとタグ構造解釈に時間がかかるため
にTIMEOUT ERRORが発生し、ページが表示さ
れない場合があります。
タグ構造を見直してください。
ハイブリッドアプリケーションの場合、config.xmlファイルの以下の項目を
修正してください。
<preference name="LoadUrlTimeoutValue" value="20000"/>LoadUrlTimeoutValue(既定値 20000msec)ページ読み込みからタイムアウトエラーまでの時間
2 ページの遷移時に画面効果を指定しても正しく表
示されない場合があります。
Androidの場合、4.4以降のバージョンを使用してください。
Android 4.3以前、iOSの場合、画面効果に依存しない設計にしてくださ
い。
3 Android 4.3以前の端末でハイブリッドアプリケー
ションでアイコンやボタンにテーマを指定した場
合、正しく表示されない場合があります。
Android 4.4以降のバージョン、またはiOSを使用してください。
Android 4.3以前を使用する場合、4.3以前の端末で、正しく表示される
ことを確認したテーマを使用してください。
4 Android 4.4以降の端末で画面回転に伴う
throttledresizeイベントが余計に発生する場合があ
ります。
Android 4.3以前のバージョン、またはiOSを使用してください。
Android 4.4以降を使用する場合、throttledresizeイベントに依存しない設
計にしてください。
G.4 留意事項
・ 本製品はjQuery Mobileをサポートしています。しかし、jQueryおよび、jQuery Mobileのコミュニティが本製品のサポートを表明して
いるわけではありません。
・ jQuery Mobile関連のファイルをCDNから読み込む方法は未サポートです。アプリケーションに組み込む方法は、G.1.2 アプリケー
ションを組み込むを参照してください。
・ 提供ファイルの名前を変更しないでください。
・ 提供ファイルの内容を変更しないでください。
・ 本製品の他のコンポーネントと利用する場合は、そのコンポーネントが動作保証するWebブラウザやOSとの組み合わせ条件で利
用してください。
・ jQuery Mobileの仕様により、プラットフォーム(端末、OS、Webブラウザ)によって表示が異なる要素があります。
・ 次版では非互換が発生する可能性があります。
- 246 -
付録H トラブルシューティング
ここではトラブルシューティングについて記載します。
H.1 形式
アプリケーションを開発する上でのトラブルシューティングを以下の形式で記載します。
現象
発生現象を記述します。
原因
現象を発生させる元となった原因を説明します。
回避方法
回避方法を説明します。
プラットフォーム
現象が発生するプラットフォームを説明します。
機種
特定機種でだけ発生する場合、現象の発生を確認した機種を説明します。ここに記載されている機種以外の機種でも現象が発生
する可能性があります。機種が特定されない場合、「機種は特定されていません」と記述しています。
H.2 jQueryMobile使用時に発生するトラブル ページが表示されません。
現象
TIMEOUT ERRORが発生し、ページが表示されません。
原因
多くの要素(divタグ、ulタグ、liタグ)のタグ構造解釈には数十秒かかることがあるため、TIMEOUTERRORが発生し、ページが表示
されない場合があります。
回避方法
ハイブリッドアプリケーションの場合、config.xmlファイルの以下の項目を修正してください。
・ LoadUrlTimeoutValue(既定値 20000msec)
ページ読み込みからタイムアウトエラーまでの時間
プラットフォーム
特定されていません。
機種
機種は特定されていません。
ページに”Note: Navigation may not work if viewed locally”が表示されます。
現象
ページに”Note: Navigation may not work if viewed locally”が表示されます。
原因
不明です。
- 247 -
回避方法
ありません。
プラットフォーム
特定されていません。
機種
機種は特定されていません。
ページの遷移時に画面効果を指定しても正しく表示されません。
現象
ハイブリッドアプリケーションでページの遷移時に画面効果を使用した場合、正しく表示されない場合があります。
原因
不明です。
回避方法
Androidの場合、4.4以降のバージョンをご使用ください。
iOSの場合、対処方法はありません。
プラットフォーム
Android 4.3以前、iOS。
機種
機種は特定されていません。
アイコンやボタンにテーマを指定しても正しく表示されません。
現象
ハイブリッドアプリケーションでアイコンやボタンにテーマを指定した場合、正しく表示されない場合があります。
原因
不明です。
回避方法
Android 4.4以降のバージョン、またはiOSをご使用ください。
プラットフォーム
Android 4.3以前。
機種
機種は特定されていません。
Select menuにフィルタリングを指定しても正しく絞り込んで表示されません。
現象
Select menuにフィルタリングを指定しても正しく絞り込んで表示されません。
原因
不明です。
回避方法
ありません。
プラットフォーム
特定されていません。
- 248 -
機種
機種は特定されていません。
throttledresizeイベントが余計に発生します。
現象
Android4.4以降の端末で画面回転に伴うthrottledresizeイベントを発生させた場合、throttledresizeイベントが余計に発生する場合
があります。
原因
不明です。
回避方法
Android 4.3以前のバージョン、またはiOSをご使用ください。
プラットフォーム
Android 4.4以降。
機種
機種は特定されていません。
File not Foundが発生し、ページが表示されません。
現象
File not Foundが発生し、ページが表示されません。
原因
ファイル名が指定されていません。
回避方法
ハイブリッドアプリケーションでローカルファイルを参照する場合、必ずファイル名(例:index.html)まで指定してください。
プラットフォーム
特定されていません。
機種
機種は特定されていません。
_sampleフォルダー配下のページを表示できません。
現象
_sampleフォルダー配下のページを表示できません。
原因
ハイブリッドアプリケーションでフォルダー名の先頭にアンダースコア(_)があるとエラーが発生し、ページを表示できない場合があ
ります。
回避方法
フォルダー名の先頭にアンダースコア(_)を使用しないでください。
プラットフォーム
特定されていません。
機種
機種は特定されていません。
- 249 -
H.3 Apache Cordova使用時に発生するトラブル ファイル選択ダイアログが表示されない
現象
ハイブリッドアプリケーションで、<input type="file" value="..." > を記述しても、ファイル選択ダイアログが画面上に表示されません。
原因
Apache Cordovaのバグ(https://issues.apache.org/jira/browse/CB-5294)です。
回避方法
アプリケーションで回避してください。
プラットフォーム
Android 4.4
機種
機種は特定されていません。
CordovaWebViewのgoBack、goForwardが正常動作しません
現象
CordovaWebViewのgoBack()、goForward()メソッドが正常に動作しません。
原因
不明です。
回避方法
ありません。
プラットフォーム
Android 4.4
機種
Samsung Galaxy S2 (Android 4.0.4)、Fujitsu F-01D (Android 4.0.3)で現象を確認しています。
menubuttonおよびsearchbuttonイベントが動作しません
現象
menubuttonおよびsearchbuttonイベントが動作しません。
原因
menubuttonおよびsearchbuttonイベントは、Android 3.0以降ではサポートされていません。
回避方法
ありません。
プラットフォーム
Android
機種
機種は特定されていません。
captureAudio APIが動作しません
現象
captureAudio APIを動作させると、録音アプリケーションを起動しません。
- 250 -
原因
デフォルトの録音アプリケーションがインストールされていません。
回避方法
ありません。
プラットフォーム
Android
機種
Google Nexus 7で現象を確認しています。
FileTransferError.exceptionがnullになります
現象
不当なURLで動作させると、FileTransferError.exceptionがnullになります。
原因
FileTransferプラグインの内部実装による動作です。
回避方法
ありません。
プラットフォーム
AndroidおよびiOS
機種
機種は特定されていません。
InAppBrowserでwindow.openのoptionsが無視されます
現象
InAppBrowserでwindow.openのoptionsにpresentationstyleを指定してもフルスクリーン表示になります。
原因
不明です。
回避方法
ありません。
プラットフォーム
iOS
機種
iPhone 4SおよびiPad Airで現象を確認しています。
MediaプラグインのmediaStatusコールバックが呼び出されません
現象
Mediaプラグインで、Media.MEDIA_STARTINGでmeidaStatusコールバックが呼び出されません。
原因
不明です。
回避方法
ありません。
- 251 -
プラットフォーム
iOS
機種
機種は特定されていません。
カメラで撮った写真を編集すると、アプリケーションが無反応になります
現象
カメラで撮影した写真を編集すると、編集するソフトウェアによってはアプリケーションが無反応になります。
原因
不明です。
回避方法
ありません。
プラットフォーム
Android
機種
Galaxy S2 (Android 4.0.4)で現象を確認しています。
カメラで撮った写真を編集できません
現象
CameraプラグインでsourceTypeをPHOTOLIBRARYあるいはSAVEDPHOTOALBUMを指定して、mediaTypeにALLMEDIAを指
定すると、allowEditパラメタが無視されます。そのため編集アプリケーションを選択するポップアップが表示されず、写真を編集す
る事ができません。
原因
不明です。
回避方法
ありません。
プラットフォーム
Android
機種
Galaxy S2 (Android 4.0.4)及びASUS Nexus 7 (Android 4.4.3)で現象を確認しています。
アンカータグ付きのURLが正しく解釈されません
現象
window.openにアンカータグ付きのURLを指定すると"webpage not available"というエラーメッセージが表示されます。
原因
Android OSでのURLの解釈に誤りがあるものと思われます。この問題はAndroid 4.1以降で修正されています。
回避方法
ありません。
プラットフォーム
Android 4.1より前のAndroidで発生が想定されます
機種
Galaxy S2 (Android 4.0.4)で現象を確認しています。
- 252 -
H.4 そのほかのトラブル IMAPSプッシュにおいてプッシュ基盤サーバとの再接続に時間がかかる
現象
WiFi切り替えなどのネットワーク切断によりプッシュ基盤サーバとの接続が失われた後、ネットワークが復旧した後のサーバへの再
接続に時間がかかることがあります。
原因
プッシュ基盤サーバとの接続が失われた後、プッシュ部品からは接続をリトライしますが、プッシュの通信プロトコル仕様上、再接続
に成功するまで3分程度要します。
回避方法
ありません。
プラットフォーム
Android
機種
機種は特定されていません。
IMAPSプッシュにおいてプッシュ基盤サーバと接続できない場合、再接続をリトライし続けます
現象
WiFi OFFなどでネットワークが切断された環境下で、プッシュ基盤サーバとの接続を要求した場合、プッシュ基盤サーバとの接続
に成功するまで接続要求をリトライし続けます。
原因
仕様です。プッシュ機能という特性上、プッシュ基盤サーバとの接続に成功するまでアプリ側に意識させず、バックグラウンドで接
続要求をリトライし続けています。なお、電池持ち、CPU負荷を考慮したウェイトをかけているため、発熱などの問題は発生しません
(コネクション喪失から5分間は30秒間隔、以降は5分間隔)
回避方法
プッシュ基盤サーバと接続できるネットワーク環境か確認してください。
プラットフォーム
Android
機種
機種は特定されていません。
- 253 -