その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

TwilioのサーバーサイドをParseで実装する

Twilio クライアント for iOS クイックスタート チュートリアル』を見ると、サーバーサイドを PHP で書いてあるのですが、レンタルサーバーも借りてないし、ちょっと試したいだけなので Parse でできないかな、とやり方をいろいろ模索してみました。


関連記事:Parseにサーバーサイドのコードを書いてiOSアプリから呼ぶ

方法1: Twilio-node moduleを使う

Cloud Code に次のようなメソッドを用意して、

var twilio = require("twilio");
twilio.initialize("myAccountSid","myAuthToken");
 
Parse.Cloud.define("send_sms", function(request, response) {
  twilio.sendSMS({
    From: "+81xxxxxxxx",
    To: request.params.number,
    Body: "This message is sent from Twilio!"
  }, {
    success: function(httpResponse) { response.success("SMS sent!"); },
    error: function(httpResponse) { response.error("Uh oh, something went wrong"); }
  });
});


iOSアプリ側から次のようにコールします。

[PFCloud callFunctionInBackground:@"send_sms"
                   withParameters:@{@"number": @"+81xxxxxxx"}
                            block:^(NSString *result, NSError *error) {
                                
                                if (error) {
                                    
                                    NSLog(@"error:%@", error);
                                }
                                else {
                                    
                                    NSLog(@"result:%@", result);
                                }
                            }];

(参考ページ:Get Started with Twilio and Parse Using the Twilio Cloud Module


上記はSMSを送るサンプルですが、電話をかけたり等、twilio-node モジュールを使った色々なサンプルが下記にあります。


http://twilio.github.io/twilio-node/


方法2: Twilio SDK for iOSを使う

Parse 上の twilio-node モジュールを使って Capability Token をつくり、あとはクライアント側のSDKで処理します。


Cloud Code側で下記のように実装します。

var twilio = require("twilio");
twilio.initialize("myAccountSid","myAuthToken");
var capability = new twilio.Capability("myAccountSid","myAuthToken");
capability.allowClientIncoming("myAppSid");
var token = capability.generate();

Parse.Cloud.define("get_capability", function(request, response) {
  response.success(token);
});


アプリ側では、次のように実装します。

[PFCloud callFunctionInBackground:@"get_capability"
                   withParameters:@{}
                            block:^(NSString *capabilityToken, NSError *error) {
                                
                                if (error) {
                                    
                                    NSLog(@"error:%@", error);
                                }
                                else {
                                    
                                    NSLog(@"capabilityToken:%@", capabilityToken);
                                }
                            }];


この方法だと、SDKについてるBasicPhoneとかのサンプルコードを流用できるので、手っ取り早く電話アプリとかをつくって試したいときにはこっちの方がいいかもしれません。