Help us understand the problem. What is going on with this article?

SAP CP Mobile Services (Cloud Foundry) のPush通知APIを叩いてみた

はじめに

この記事は「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アプリで受け取ることです。
スクリーンショット 2020-02-11 22.46.55.png

前提条件

開発実行環境

  • フロントエンド実行環境: 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の名前をクリックします。
スクリーンショット 2020-02-08 16.16.21.png

"Add Role"ボタンを押してRoleを紐づけていきます。
スクリーンショット 2020-02-08 16.18.33.png

場合によっては様々なApplication Identifierが選択可能だと思われますが、Mobile Servicesのアプリケーションインスタンスを作成したときに命名したインスタンスの名称を含んでいるApplication Identifier配下のRoleを紐づけていきます。

スクリーンショット 2020-02-08 16.24.07.png

(今回はとりあえず疎通できるようにしたかったのでApplication Identifier配下のRoleを全部紐づけてしまいましたが、本当はきちんと選択する必要がありますね。)

最後に、"Security" > "Trust Configuration" > "SAP ID Service" にて、
対象のユーザのメールアドレスを入力して"Assign Role Collection"ボタンを押下し、Role Collectionを紐づけます。

スクリーンショット 2020-02-09 8.56.48.png
スクリーンショット 2020-02-09 8.58.17.png

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っぽい通知の情報を設定することができます。

SAPのドキュメントAppleのドキュメントなどを参考にしてbodyの中身を決めていきました(具体的な設定値は次のセクション参照)。

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側での設定が必要ですが、今回の記事では手順の紹介を割愛します。

叩いてみた

"Send"ボタンを押すと……
スクリーンショット 2020-02-09 9.58.54.png

あい〜〜〜〜〜ん
IMG_0354.PNG

次回は・・・

というわけで、Mobile ServicesのPush通知APIをじょうずに使うことができました!

次回以降の記事にて、このAPIをSAP Cloud Platform Integration ServiceのIntegration Flowから呼び出せるようにしていきたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした