NCMBのiOS SDKは正式にはSwiftをサポートしておらず、サンプルのコードもObjective-Cとなっています。Swiftもすでに3が主流となっており、利用者も増えています。そこでNCMB iOS SDKをSwiftでどう使えば良いかをコード例を用いつつ紹介します。
今回はiOS SDKでのスクリプト機能の使い方です。
スクリプト例
今回は以下のようなスクリプトです。ファイル名は email.js になります。SendGridを使ってメール送信を実現します。アプリのお問い合わせなどに使えます。今回はNode.jsですが、Rubyを使うこともできます。
const request = require('superagent'); const apiKey = 'YOUR_API_KEY'; module.exports = (req, res) => { const to = 'you@example.com'; const from = req.body.email; const option = req.body.option; const body = req.body.body; const data = `to=${to}&from=${from}&subject=お問い合わせ【${option}】&text=${body}&html=<html><body>${body}</body></html>`; request .post('https://api.sendgrid.com/api/mail.send.json') .set('Authorization', 'Bearer ' + apiKey) .send(data) .end(function(err, response) { res.status(response.status).json(response.body); }); }
これは POST メソッドで呼び出します。また、リクエスト時のパラメータとして email / option / body を用意します。
アプリ画面
アプリの画面は上記のパラメータを入力できるようにしたものになります。そして送信ボタンを押すとスクリプトを呼び出します。
ボタンを押した時の処理
まずスクリプトを作成します。ファイル名を指定するのと、HTTPメソッドを指定します。HTTPメソッドは NCMBScriptRequestMethod の中で定義されています。今回は POST を指定します。
let script = NCMBScript.init(name: "email.js", method: NCMBScriptRequestMethod.executeWithPostMethod)
そしてスクリプトを実行します。最初の引数がデータで、スクリプト側で req.body で取得できるものです。今回は二つ目の引数であるヘッダー、三つ目のクエリは指定していません。
script?.execute([ "option": txtTitle.text ?? "", "body": txtBody.text ?? "", "email": txtEmail.text ?? "" ], headers: nil, queries: nil, with: { (result, error) in if error != nil { // 失敗時 print("Error", error ?? "") } else { // 成功時 } })
結果の取得
多くの場合、結果はJSONで返すでしょう。今回は {"message": "success"}
といったJSON文字列で返しています。しかし result は単なる文字列で返ってきますので、まずJSONとして解析する必要があります。それが以下のコードです。
let jsonString = String(data: result!, encoding: String.Encoding.utf8) do { let json = try JSONSerialization.jsonObject(with: (jsonString?.data(using: .utf8)!)!, options: JSONSerialization.ReadingOptions.allowFragments) let message = json as? [String:String] print(message!["message"]) } catch { }
これで success
という文字列が取得できます。
まとめ
iOSでスクリプトを使うメリットとして、AndroidやUnityなど他の環境とフローを共通化したり、ガチャ機能など不正な利用を防止したい時に使えます。スクリプトの結果を解析する手間はありますが、JSONであれば慣れてしまえば特に問題なく使えるはずです。ぜひiOS SDKのスクリプト機能を使いこなしてください!