7 iOSアプリケーション
あなたがiOSアプリの開発者であれば、Oracle Mobile Cloud Service (MCS)がiOSを提供するクライアントSDKを使用できます。 このSDKはMCSによる認証を簡素化し、MCSプラットフォームAPI用のObjective-Cラッパー・クラスを提供します。
iOS SDKの内容
iOS SDKには次のアイテムが含まれています。
-
Documentation
- Webブラウザベースのドキュメント(html.zip
)と、Xcode(oracle.mobile.cloud.Mobile_Client_SDK.docset.zip
)の状況依存ヘルプの参照とアクセスのためのドキュメント・セットが含まれています。html.zip
を使用するには、ファイルをunzipし、index.html
からメイン・ページを参照します。 docsetを使用するには、通常は~/Library/Developer/Shared/Documentation/DocSets
のようなXcodeドキュメント・セットの通常のロケーションにファイルをunzipします。ここで、~
はホーム・ディレクトリです。このフォルダには、アプリに追加してモバイル・バックエンドの構成詳細を入力する必要のある
OMC.plist
ファイルのサンプル・コピーも含まれています。 -
release-iphoneos
- 静的ライブラリとヘッダー・ファイルのバージョンをリリースします。 SyncStore初期データも含まれています。 静的ライブラリは、armv7*
コードを含み、iPhone Simulatorと実デバイスの両方をサポートするUniversal (fat)バイナリです。 次の静的ライブラリが含まれています。-
libOMCCore.a
- すべてのiOSアプリケーションで共有されるCoreティック・ライブラリ・ファイル。 他のすべてのライブラリで必要な共通ライブラリが含まれています。 -
libOMCAnalytics.a
- アナリティクスの静的ライブラリ・ファイル。コードにイベントを挿入し、アナリティクス・コンソールから収集して解析することができます。 -
libOMCLocation.a
- MCSに登録されているロケーション・デバイスと、関連付けられている場所とアセットについての詳細情報にアクセスできるロケーション・ライブラリ。 -
libOMCNotifications.a
- 通知静的ライブラリ・ファイル。モバイル・バックエンドから送信された通知を受け取るようにアプリケーションを設定できます。 -
libOMCStorage.a
- Storage静的ライブラリ・ファイル。モバイル・バックエンドで設定されたストレージ・コレクションにアクセスするためのコードを記述できます。 -
libOMCSynchronization.a
- アプリケーションを実行しているデバイスがネットワークから切断されたときにアプリケーション・データをキャッシュし、ネットワーク接続が再確立されたときにデータを同期させるデータ・オフライン・スタティック・ライブラリ・ファイル。
-
-
thirdParty
- アイデンティティ管理(IDM)ライブラリの静的ライブラリ(libIDMMobileSDK.a
)、ヘッダー、およびリソース文字列。 -
mcs-tools.zip
- MCSカスタム・コード・テスト・ツール。アプリのモバイル・バックエンドに関連付けられたカスタムAPIをデバッグするためのコマンドライン・ツール・セットです。 詳細な手順は、zipに含まれるREADME
ファイルにあります。
iOSアプリの開発の前提条件
アプリの開発を始める前に、iOS SDKフレームワークの追加、構成の変更などの基本的な構成を行う必要があります。
前提を次に示します。
-
開発環境としてXcodeに精通していること。 不慣れな場合には、https://developer.apple.com/xcode/を参照してください。
-
すでにAppleから次のものを手に入れました:
-
Apple Developerアカウント。
-
MacまたはiPad(つまり、アプリを開発しようとしているマシン上)にインストールされた一意のセキュアな証明書。
-
アプリケーションID。これは、Xcode内でアプリケーションのバンドル識別子として使用します。
-
プロビジョニング・プロファイル。 クライアントSDKから通知静的ライブラリをインストールし、iOSアプリで通知を受け取る場合は、プロビジョニング・プロファイルで通知を有効にする必要があります。
まだこれらを行っていない場合は、http://developer.apple.comにあるiOS開発者用ドキュメントを参照してください
-
iOSアプリへのSDKの追加
-
ダウンロード・ファイル
oracle_mobile_ios_sdk-{n}.zip
(ここで、{n}はSDKのバージョン番号)を、マシン上のどこかのディレクトリに解凍します。 -
zipのコンテンツをXcodeプロジェクト・ナビゲータにドラッグ・アンド・ドロップします。
-
必要に応じて、「Copy items」を選択します。
-
「Create Groups」を選択します。
-
「Finish」をクリックします。
特定のライブラリの
.a
ファイルがXcodeのアプリケーション開発ツリーにコピーされると、対応するプラットフォームAPIがSDK呼び出しを通じてアプリケーションで使用できます。 この時点で、SDKのすべての静的ライブラリがアプリで使用可能になります。 ただし、Identity Managementライブラリが正常に動作するように、次のステップを完了する必要があります。 -
-
プロジェクトのターゲットを選択して、 「Build Phases」タブを選択し、「Link Binary with Libraries」を開いて + ボタンをクリックし、次のフレームワークを追加します。
-
SystemConfiguration.framework
-
Security.framework
-
CoreLocation.framework
-
-
「Other Linker Flags」設定に
-ObjC
フラグを追加します。 -
解凍したzipの
Documentation
フォルダを展開し、OMC.plist
ファイルをコピーして、アプリケーションのメイン・アプリケーション・バンドルのルートに配置します。 -
モバイル・バックエンドの環境詳細を入力します。 iOS用のSDKプロパティの構成を参照してください。
-
Xcode 7以上を使用している場合、HTTPSを介したリモート通信を強制するアプリケーション・トランスポート・セキュリティ(ATS)ポリシーを考慮する必要があります。
開発目的でのみ、アプリの
Info.plist
ファイルに次のキーを追加して、アプリのATSポリシーを無効にします。<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
注意:
この設定は本番で使用しないでください。 アプリに最適なセキュリティを実現するために、AppleのNSAppTransportSecurityのドキュメントをよく読み、特定のドメインに対してATSを無効にし、それらのドメインに適切なセキュリティ緩和を適用するためのAppleの推奨事項に従ってください。
iOS SDKの相互依存性
クライアントSDKはモジュール式であるため、アプリケーションに必要なライブラリだけをパッケージ化することができます。 ただし、次の依存関係に注意してください。
-
すべてのアプリは、
libOMCCore.a
ティック・ライブラリ・ファイルを持っている必要があります。 -
あなたのアプリが
libOMCStorage.a
を使用する場合は、lilbOMCSynchronization.a
も含める必要があります。 -
あなたのアプリが
lilbOMCSynchronization.a
を使用する場合、初期化データを含むSyncStore.momd
フォルダも含める必要があります。 -
あなたのアプリが
libOMCCxAEngagement.a
を使用する場合は、libOMCCxAAnalytics.a
も含める必要があります。
iOS用のSDKプロパティの構成
iOSアプリでSDKを使用するには、アプリにOMC.plist
構成ファイルを追加し、モバイル・バックエンドの環境詳細を入力する必要があります。 同様に、SDKクラスはこの情報を使用して、モバイル・バックエンドにアクセスし、APIに対して行われるRESTコールのHTTPヘッダーを構築します。
アプリのメイン・バンドルのルートに構成ファイルをパッケージします。
次に、OMC.plist
ファイルの内容の例を示します。 要素の階層に注意してください。
同じ例のソース・コードを次に示します。
<?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>mobileBackends</key>
<dict>
<key>FixItFast_Customer</key>
<dict>
<key>default</key>
<true/>
<key>baseURL</key>
<string>https://fif.cloud.oracle.com</string>
<key>appKey</key>
<string>ebfbc8ea-9173-442b-8a5e-2fae63c64422</string>
<key>authorization</key>
<dict>
<key>authenticationType</key>
<string>OAuth</string>
<key>OAuth</key>
<dict>
<key>tokenEndpoint</key>
<string>https://oam.oracle.com/oam/oauth2/tokens</string>
<key>clientID</key>
<string>ddb7ff5a-0d86-4b4a-8164-ddad03734249</string>
<key>clientSecret</key>
<string>pFmzazXzNTBNVDyraQs7</string>
</dict>
</dict>
</dict>
</dict>
<key>logLevel</key>
<string>debug</string>
</dict>
</plist>
OMC.plist
ファイルの主要エントリを次に示します。 必要な環境詳細は、モバイル・バックエンドの「Settings」および「Clients」ページから取得できます。
-
mobileBackends
-FixItFast_Customer
など、モバイル・バックエンドのネストされたディクショナリを含むディクショナリ・エントリです。 (アプリでOMCMobileBackend
を呼び出す場合、そのエントリの値をパラメータとしてOMCMobileBackendManager
に指定する必要があります。) 同様に、このエントリにはappKey
、baseURL
、authenticationType
、mobileBackendID
、anonymousKey
およびオプションでnetworkConnectionTimeout
のエントリが含まれます。 次の例を参照してください。 -
baseURL
- アプリケーションがモバイル・バックエンドに接続するために使用するURLです。 -
appKey
- MCSでクライアントとして登録する際にアプリに割り当てられる一意の文字列であるアプリケーション・キーです。 MCSでアプリをクライアントとして登録する方法を参照してください。 アプリをMCSにクライアントとしてまだ登録していない場合には、このエントリのプレースホルダ値を割り当ててください。 networkConnectionTimeout
- (オプション)APIコールのネットワーク・タイムアウト(秒)です。 ネットワーク・パフォーマンス・チューニングを行う必要がある場合に、このプロパティを追加できます(ただし、注意して使用する必要があります)。 アプリの応答の問題は、アプリの設計自体で対処した方がよい可能性があります。 デフォルトのタイムアウトは60秒です。-
logLevel
- アプリケーション・コンソールに表示されるSDKロギングの量を決定します。 デフォルト値はerror
です。 他の可能な値(詳細レベルの増加)は、warning
、info
、およびdebug
です。 値をnone
に設定することもできます。 -
logHTTPRequestBody
-true
に設定すると、SDKはMCSに対するリクエストのHTTPおよびHTTPSヘッダーおよび本文もログに記録します。 -
logHTTPResponseBody
-true
に設定すると、SDKはMCSからのレスポンスのHTTPおよびHTTPSヘッダーおよび本文もログに記録します。 -
authorization
- このキーを使用して、アプリケーションの使用する認証の種類を定義し、必要な資格証明を指定します。authorization
キーの内容とサブ要素は、認証のタイプによって異なります。-
authenticationType
- モバイル・アプリケーションで使用される認証メカニズムのタイプを定義します。 可能な値は、OAuth
(OAuth Consumerの場合)、basic
(HTTP Basicの場合)、SSO
、SSOTokenExchange
およびFacebook
です。 次の説明にあるように、サポートされている種類の各認証にディクショナリおよび必要な資格証明を含めます。 -
offlineAuthenticationEnabled
-true
に設定した場合、オフライン・ログインが許可されます。 オフライン・ログインはOAuthではサポートされていないため、このキーは無視されます。
-
OAuthコンシューマ
authenticationType
プロパティの値をOAuth
に設定し、モバイル・バックエンドによって提供されたOAuth資格証明を入力します。
-
tokenEndpoint
- アプリケーションがその認証トークンを取得するためにアクセスするOAuthサーバーのURLです。 -
clientID
- モバイル・バックエンドに最初に作成される際に、すべてのアプリケーションに割り当てられる一意のクライアント識別子です。 -
clientSecret
- モバイル・バックエンドに最初に作成される際に、すべてのアプリケーションに割り当てられる一意の秘密の文字列です。
結果として得られるauthorization
プロパティは、次のようになります:
<key>authorization</key>
<dict>
<key>authenticationType</key>
<string>oauth</string>
<key>OAuth</key>
<dict>
<key>tokenEndpoint</key>
<string>https://oam.oracle.com/oam/oauth2/tokens</string>
<key>clientID</key>
<string>ddb7ff5a-0d86-4b4a-8164-ddad03734249</string>
<key>clientSecret</key>
<string>pFmzazXzNTBNVDyraQs7</string>
</dict>
</dict>
SSO
SSOの場合、authenticationType
プロパティの値をSSO
に設定し、モバイル・バックエンドによって提供されたOAuth資格証明を入力します。 (tokenEndpoint
では、モバイル・バックエンドのOAuthトークン・エンドポイントを使用します。)
結果として得られるauthorization
プロパティは、次のようになります:
<key>authorization</key>
<dict>
<key>authenticationType</key>
<string>SSO</string>
<key>SSO</key>
<dict>
<key>tokenEndpoint</key>
<string>https://oam-server.oracle.com/oam/oauth2/tokens</string>
<key>clientID</key>
<string>ddb7ff5a-0d86-4b4a-8164-ddad03734249</string>
<key>clientSecret</key>
<string>pFmzazXzNTBNVDyraQs7</string>
</dict>
</dict>
サードパーティ・トークンを使用したSSO
サードパーティ・トークンを使用したSSOの場合は、authenticationType
をSSOTokenExchange
に設定し、適切な資格証明を入力する必要があります。 また、トークン発行者をどのように統合したかに応じて、モバイル・バックエンドが提供する認証資格証明を記入する必要があります。
JWTトークンを使用していて、MCSのポリシーで構成を登録してトークン発行者を統合した場合は、モバイル・バックエンドのHTTP基本資格証明をネストし、モバイル・バックエンドのOAuth資格証明を別のキーとして含める必要があります。 結果として得られるauthorization
プロパティは、次のようになります:
<key>authorization</key>
<dict>
<key>authenticationType</key>
<string>SSOTokenExchange</string>
<key>SSOTokenExchange</key>
<dict>
<key>mobileBackendID</key>
<string>ddb7ff5a-0d86-4b4a-8164-ddad03734249</string>
<key>anonymousKey</key>
<string>UFJJTUVfREVDRVBUSUNPTl9NT0JJTEVfQU5PTllNT1VTX0FQUElEOnZrZWJxUmwuamEwbTdu</string>
</dict>
<key>OAuth</key>
<dict>
<key>tokenEndpoint</key>
<string>https://p2mob1813rc1f.identity.dc1.c9dev2.oraclecorp.com/oam/oauth2/tokens</string>
<key>clientID</key>
<string>c437c1ed-fef0-4e88-802c-b85525fa0d6d</string>
<key>clientSecret</key>
<string>MtHoeHcRrWlDLiKcHJC8</string>
</dict>
</dict>
証明書をMCSにアップロードしてIdPトークン発行者を統合した場合は、モバイル・バックエンドのHTTP基本資格証明をネストする必要があります。 結果として得られるauthorization
プロパティは、次のようになります:
<key>authorization</key>
<dict>
<key>authenticationType</key>
<string>SSOTokenExchange</string>
<key>SSOTokenExchange</key>
<dict>
<key>mobileBackendID</key>
<string>ddb7ff5a-0d86-4b4a-8164-ddad03734249</string>
<key>anonymousKey</key>
<string>UFJJTUVfREVDRVBUSUNPTl9NT0JJTEVfQU5PTllNT1VTX0FQUElEOnZrZWJxUmwuamEwbTdu</string>
</dict>
</dict>
HTTP Basic
authenticationType
プロパティの値をbasic
に設定し、モバイル・バックエンドにより提供されるHTTP Basic資格証明を入力します。
-
mobileBackendID
- 特定のモバイル・バックエンドに割り当てられた一意の識別子です。 アプリケーションからMCSへのすべてのRESTコールで、適切なモバイル・バックエンドに接続するためにHTTPヘッダーで渡されます。 プラットフォームAPIを呼び出すときに、SDKはmobileBackendID
ヘッダーの構成を処理します。 -
anonymousKey
- HTTP Basic認証を使用する場合、ログインを必要としないAPIへのアクセスをアプリに許可する一意の文字列です。 このシナリオでは、ユーザー名およびパスワードの組合せのかわりに匿名のキーがMCSに渡されます。
offlineAuthenticationEnabled
プロパティをtrueに設定することで、基本認証のオフライン・ログインを有効にすることもできます。
結果として得られるauthorization
プロパティは、次のようになります:
<key>authorization</key>
<dict>
<key>authenticationType</key>
<string>Basic</string>
<key>offlineAuthenticationEnabled</key>
<true/>
<key>Basic</key>
<dict>
<key>anonymousKey</key>
<string>UFJJTUVfREVDRVBUSUNPTl9NT0JJTEVfQU5PTllNT1VTX0FQUElEOml6LmQxdTlCaWFrd2Nz</string>
<key>mobileBackendID</key>
<string>4fb9cabd-d0e2-40f8-87b5-d2d44cdd7c68</string>
</dict>
</dict>
iOSアプリへのモバイル・バックエンドの構成のロード
iOS SDKを使用してMCS APIへのコールを正常に完了するには、アプリのOMC.plist
ファイルからモバイル・バックエンドの構成をロードする必要があります。 これを行うには、OMCMobileBackend
クラスを使用します:
/**
* Returns the mobile backend named "FixItFast_Customer" that is configured in the OMC.plist file
*/
- (OMCMobileBackend *) myMobileBackend{
return [[OMCMobileBackendManager sharedManager] mobileBackendForName:@"FixItFast_Customer"];
}
iOS用SDKを使用した認証およびログイン
ここでは、iOSアプリでMCSによる認証に使用できるいくつかのメソッドを示します。 示されているコードはいずれもOMCAuthorization.h
クラスを使用し、次のインポートに依存します。
#import "OMCCore/OMCAuthorization.h"
#import "OMCCore/OMCMobileBackend.h"
#import "OMCCore/OMCMobileBackendManager.h"
OAuthコンシューマおよびHTTP Basic
ユーザー名とパスワードを使用したユーザー・ログインの処理に、次のメソッドを使用できます。
- (void) authenticate:(NSString *)userName
password:(NSString *)password
completionBlock: (OMCAuthorizationAuthCompletionBlock) completionBlock;
このメソッドはMCSへの接続を切断し、ユーザー名とパスワードをiOSキーチェーンから消去します。
-(void) logout: (OMCAuthorizationLogoutCompletionBlock) completionBlock;
SSO
エンタープライズSSOを介したログインを許可するアプリの場合は、次を使用します。
-(void) authenticateSSO: (UIViewController*) presentingViewController
clearCookies: (BOOL) clearCookies
completionBlock:(OMCAuthorizationAuthCompletionBlock) completionBlock;
サードパーティ・トークンを使用したSSO
まず、使用するアプリケーションにサードパーティ・トークン発行者からのトークンを取得する必要があります。 トークンの取得方法は、発行者によって異なります。 MCSでサードパーティのトークンを取得し、アイデンティティ・プロバイダを構成する方法の詳細については、「サードパーティのSAMLトークンとJWTトークン」を参照してください。
トークンを取得したら、認可エージェントを初期化し、認可コールでトークンを使用します。
-(void) authenticateSSOTokenExchange:(NSString*) token
storeAccessToken:(BOOL) storeToken
completionBlock:(OMCAuthorizationAuthCompletionBlock) completionBlock;
-(NSError*) authenticateSSOTokenExchange:(NSString*) token
storeAccessToken:(BOOL) storeToken;
サードパーティのトークンを使用するSSO - ログインしたまま
また、アプリケーションを終了して再起動しても、ユーザーをログイン状態に保つようにアプリケーションをコーディングすることもできます。
authenticateSSOTokenExchange
メソッドで、storeAccessToken
がYES
に設定されている場合、トークンはセキュア・ストアに保存され、トークンが期限切れになるまでユーザーはログインしたままになります。
アプリの起動シーケンスでloadSSOTokenExchange()
メソッドを使用して、キー・チェーンからトークンを読み込むことができます。 (トークンを取得できない場合、メソッドはNO
を返します)。
保存されたトークンをロードしようとするコードがあります。失敗した場合は、認証プロセスを再開します:
OMCAuthorization* auth;
if ( [auth loadSSOTokenExchange] ){
NSLog(@"## Token already found, login skipped.");
...
}
else{
[auth authenticateSSOTokenExchange:thirdPartyToken
storeAccessToken:YES
completionBlock:^(NSError * _Nullable error) {
if( error ){
//Show error popup
}
else{
// Login success.
...
}
}];
}
トークンをセキュア・ストアに保存すると、そのトークンはアプリが元々使用していたモバイル・バックエンドに関連付けられたままになります。 したがって、別のモバイル・バックエンド(またはモバイル・バックエンド・バージョン)を使用するようにアプリケーションが更新されている場合は、保存したトークンを消去して(clearSSOTokenExchange
を使用して)再認証する必要があります。
注意:
トークン交換によって取得された格納されたトークンのデフォルトの有効期限は6時間です。 この時間は、Security_TokenExchangeTimeoutSecs
ポリシーを変更することで調整できます。
iOS用のSDKを使用したプラットフォームAPIの呼出し
モバイル・バックエンドの構成情報がアプリにロードされると、iOSコア・ライブラリのクラスに基づいてSDKクラスを呼び出すことができます。
iOSコア・ライブラリ(libOMCCore.a
)は、その他すべてのiOSライブラリで共通の3つのパブリック・インタフェースを提供します。
-
OMCMobileBackendManager
-
OMCMobileBackend
-
OMCServiceProxy
SDKのルート・クラスはOMCMobileBackendManager
です。 OMCMobileBackendManager
のインスタンスは、OMCMobileBackend
オブジェクトを1つ以上管理します。 OMCMobileBackend
オブジェクトは、アプリケーションとそれに関連するモバイル・バックエンド間(プラットフォームAPIおよび定義したあらゆるカスタムAPIへのコールを含む)の接続性、認証およびその他のトランザクションの管理に使用されます。 同様に、OMCMobileBackend
インスタンスはOMCServiceProxy
のインスタンスを管理します。 これらのインスタンスは、MCSのプラットフォーム・サービス(Analytics、通知など)に対応します。
各モバイル・バックエンドに関する必要な情報(認証情報に加えてモバイル・バックエンド名とID)をアプリのOMC.plist
ファイルから取得します。
次に、APIを呼び出すためにこれらのクラスを使用する例を示します。
//Get mobile backend, here "FixItFast_Customer" is your backend name from the OMC.plist configuration.
OMCMobileBackend* mbe = [[OMCMobileBackendManager sharedManager] mobileBackendForName:@"FixItFast_Customer"];
//Authenticate with your credentials; if returns nil, then authenticated successfully.
NSError* error = [mbe.authorization authenticate:@"username"
password:@"password"];
//Get analytics client
OMCAnalytics* analytics = [mbe analytics];
//Get storage client
OMCStorage* storage = [mbe storage];
//Get notifications client
OMCNotifications* notifications = [mbe notifications];
必要なヘッダーにアクセスして前述のコードをコンパイルするには、次のヘッダーをコードにインポートする必要があります。
#import "OMCMobileBackend.h"
#import "OMCMobileBackendManager.h"
#import "OMCAuthorization.h"
#import "OMCAnalytics.h"
#import "OMCMobileBackend+OMC_Analytics.h"
#import "OMCStorage.h"
#import "OMCMobileBackend+OMC_Storage.h"
#import "OMCNotifications.h"
#import "OMCMobileBackend+OMC_Notifications"
注意:
iOS用のMCS SDKで使用されるObjective-Cで記述されたメソッドもSwiftにマップできます。 詳細は、「モバイル・クライアントSDKを使用したSwiftアプリケーションの記述」を参照してください。iOS用のSDKを使用したカスタムAPIの呼出し
SDKは、MCSのカスタムAPIの呼出しを簡略化するためのOMCCustomCodeClient
クラスを提供します。 リクエスト・ペイロードがJSONまたは空であり、レスポンス・ペイロードがJSONまたは空であるエンドポイントで、RESTメソッド(GET、PUT、POSTまたはDELETE)を呼び出すことができます。
リクエスト・ペイロードがJSONまたは空であり、レスポンス・ペイロードがJSONまたは空であるエンドポイントで、このクラスを使用してRESTメソッド(GET、PUT、POSTまたはDELETE)を呼び出します。
また、メソッド呼び出しが完了したときに呼び出される完了ハンドラを提供できます(つまり、ハンドラは非同期に実行されます)。
完了ハンドラを設定すると、それがメソッド呼び出しの完了時にUI (メイン)スレッドで呼び出されるため、UI項目を更新できるようになります。 補完ブロックには、JSONオブジェクトのフォーマット固有のデータ、つまりNSDictionary
またはNSArray
が含まれます。 完了ブロックは、データやエラー(HTTPまたはシステム)を返す場合に使用します。
Authorization
(ユーザーは認証済とします)など必要なMCSヘッダーはすべて、リクエストに自動的に挿入されます。
OMCCustomCodeClient
の使用方法は次のようになります:
#import "OMCCore/OMCMobileBackend.h"
#import "OMCCore/OMCCustomCodeClient.h"
...
// A GET, PUT, POST, or DELETE method may be specified here - sent or returned JSON data object may be nil as appropriate.
OMCMobileBackend *backend = ...
OMCCustomCodeClient *ccClient = backend.customCodeClient;
NSDictionary *jsonPayload = @{@"myKey", @"myValue"};
[ccClient invokeCustomRequest: @"API2/endpoint2"
method: "@PUT"
data: jsonPayload,
completion: ^(NSError* error,
NSHTTPURLResponse *response,
id responseData) {
// error will be nil if no problems occurred, otherwise it will contain the error object
// response will be complete HTTP response
// response data will be Map or Array for JSON object if success or nil if error
}];