はじめに
この記事は「SAP S/4HANAで購買発注が登録されるたびiPhoneに「アイーン」とPush通知が来たらぜったいどきどきしちゃう」シリーズの2つ目の記事です。
前回までの実装
前回の記事では、「SAP S/4HANAで伝票登録されたら「あい〜〜ん」Push通知が来たらぜったいどきどきしちゃう」という奇特な業務ユーザからの要望をかなえるべく、SAP Cloud Platform (Cloud Foundry) Mobile Servicesから「アイーン」というPush通知を受け取れるiOSアプリを構築してみました。
このアプリをS/4HANAのプロセスと統合するためには、なにはともあれAPIを活用してこの「アイーン」通知機能を呼び出すことが必要になります。
そこで今回は、Mobile ServicesのPush APIを活用してiPhoneアプリに「アイーン」通知を送ってみようと思います。
今回の目標
今回の記事のゴールは、PostmanからMobile ServicesのAPIを叩いてPush通知リクエストを送り、「アイーン」通知をiPhoneアプリで受け取ることです。
前提条件
開発実行環境
- フロントエンド実行環境: iPhone11 pro iOS 13.3
- フロントエンド開発環境: macOS Mojave 10.14.6 / Xcode 11.3 ※ Apple Developer Account(有料)を取得していること。
- バックエンド開発実行環境: SAP S/4HANA 1809
- クラウド開発実行環境: SAP Cloud Platform (Cloud Foundry trial account) ※ 無料
- Mobile Services
- Integration Service
事前手順
前回の記事と同様の手順でPush Notification関連設定を済ませたiOSアプリケーションをMobile Servicesを活用して構築済みであること。
構築手順
それでは構築を始めていきましょう。
前回の記事ですでにだいたい作っているので、実は手順は(答えが分かってさえいれば)大したことありません。
権限設定
前回の記事での権限設定(Role Collection MobileServiceNotification
の割当)をしたと思うのですが、年末に仕様変更があったのかこの権限が出てこなくなっていたので(うーん)、自分でRole Collectionを作って割り当てることにしましょう。
SAP Cloud Platform Cockpitの"Security" > "Role Collection" > "New Role Collection"ボタンより、
名前はなんでもいいのですがMobile_Notification
というRole Collectionを作成しました。
作成したRolle Collectionの名前をクリックします。
"Add Role"ボタンを押してRoleを紐づけていきます。
場合によっては様々なApplication Identifierが選択可能だと思われますが、Mobile Servicesのアプリケーションインスタンスを作成したときに命名したインスタンスの名称を含んでいるApplication Identifier配下のRoleを紐づけていきます。
![スクリーンショット 2020-02-08 16.24.07.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F320955%2F94c0448a-2dfa-a053-2397-b0dbf52bdae7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8d45ee11b5566df65824fb17803032f3)
(今回はとりあえず疎通できるようにしたかったのでApplication Identifier配下のRoleを全部紐づけてしまいましたが、本当はきちんと選択する必要がありますね。)
最後に、"Security" > "Trust Configuration" > "SAP ID Service" にて、
対象のユーザのメールアドレスを入力して"Assign Role Collection"ボタンを押下し、Role Collectionを紐づけます。
![スクリーンショット 2020-02-09 8.56.48.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F320955%2F76dbadb7-28c1-93f6-dbc5-9bbca445f1c2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e62d5d26ad7077fb2b9c6f37e7b55301)
![スクリーンショット 2020-02-09 8.58.17.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F320955%2F9a8fd329-a76e-275e-f7a5-b401329fc8a8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=65b394639ffc317f1aea52eb45bb24f9)
API仕様の確認
Mobile ServicesのPush通知関連APIの種類
SAPのAPIのリファレンスといえばもちろんSAP API Business Hubです。
まずこちらを見るのが王道であると思われるので検索してみると、確かにRemote Push Notification APIと呼ばれるAPIのリファレンスが存在しています。
ところがCloud Foundry環境のMobile Servicesのヘルプドキュメントを見てみると、似て非なるPush API情報(Native Push Notification for Backend)が記載されています。
迷わしいですが、SAP API Business Hubの情報がNeo環境のサービス向けなのかCloud Foundry環境のサービス向けなのか判然としなかったので、Cloud Foundryを前提としたHelpドキュメントに載っているNative Push Notification for Backendの方を参照することにしました(その結果疎通しました)。
APIをぜんぶ動確する元気はなかったので、この辺りのしゃっきりした情報をお持ちの方はぜひ教えてください。。
APIエンドポイント
上記のドキュメントを参照し、下記の比較的シンプルなエンドポイント(通知先のユーザもデバイスも指定しない)を用いることにします。
https://<mobile services host>/restnotification/application/<applicationId>
今回は一人遊びで実装しているので気にしないことにしますが、エンドポイントやパラメータによって通知先のユーザやデバイスを個別に指定することもできるようです。興味のある方はぜひHelp ドキュメントをご確認ください。
APIホスト
Mobile ServicesのAPIのホストが分からなくてずっと泣いていたのですが、結論としては下記のように作ることができるようです。
https://<subaccount name>-<space name>-<mobile app instance name>.cfapps.eu10.hana.ondemand.com
今回でいえばおよそ下記のような感じです。
https://s0099999999trial-dev-mobileaiiiiin.cfapps.eu10.hana.ondemand.com
APIリクエストbody
Native Push Notification for Backendは、その名の通りさまざまなNative通知サービスの仕様に対応できるよう、かなり柔軟に色々なパラメータをbodyに設定することができます。
今回はiOSの通知なので、APNs(Apple Push Notification Service)と呼ばれる通知の仕様に合わせたパラメータを設定してあげると、iOSっぽい通知の情報を設定することができます。
APIの動作確認
それでは上記の情報を元に、下記の設定内容でPostmanからAPIを叩いてみましょう!
設定内容
Method: POST
Request URL:
https://s0099999999trial-dev-mobileaiiiiin.cfapps.eu10.hana.ondemand.com/restnotification/application/mobileaiiiiin
Authorization:
設定値 | |
---|---|
TYPE | Basic |
Username | SAP Cloud Platformユーザのログインメールアドレス |
Password | SAP Cloud Platformユーザのログインパスワード |
Headers:
設定値 | |
---|---|
Content-Type |
application/json |
Body:
{
"alert": "{\"title\": \"あい〜〜〜〜〜ん\",\"body\" : \"ドリフ大爆笑DVDの〇〇〇〇伝票(999999999999)が登録されました!\"}",
"badge": 1,
"sound": "sumikko_aiiiin.aiff"
}
※ 通知のSoundをカスタムしたい場合、XCode側での設定が必要ですが、今回の記事では手順の紹介を割愛します。
叩いてみた
次回は・・・
というわけで、Mobile ServicesのPush通知APIをじょうずに使うことができました!
次回以降の記事にて、このAPIをSAP Cloud Platform Integration ServiceのIntegration Flowから呼び出せるようにしていきたいと思います。