33
Salesforce Mobile SDKの +(プラス)なお話 株式会社テラスカイ 第2ソリューション部第2チーム 溝口 大地

03 salesforce mobilesdkの+(プラス)なお話

Embed Size (px)

DESCRIPTION

TerraSky Power Night 2014/05/09 開催 講演資料

Citation preview

Page 1: 03 salesforce mobilesdkの+(プラス)なお話

Salesforce Mobile SDKの +(プラス)なお話

株式会社テラスカイ 第2ソリューション部第2チーム 溝口 大地

Page 2: 03 salesforce mobilesdkの+(プラス)なお話

アジェンダ

Blocksパターンを使おう!

QueryBuilderを使ってみよう!

ログインユーザーのIDを取得しよう!

Push通知を使ってみよう!

Page 3: 03 salesforce mobilesdkの+(プラス)なお話

Salesforce Mobile SDKの Blocksパターンを使おう!

Page 4: 03 salesforce mobilesdkの+(プラス)なお話

Delegate or Blocks?

http://www.terrasky.co.jp/blog/

Page 5: 03 salesforce mobilesdkの+(プラス)なお話

NSString *soqlQuery = @"SELECT Id FROM User Where Name = 'hoge' LIMIT 1" !SFRestRequest *request = [[SFRestAPI sharedInstance]requestForQuery:soqlQuery]; ![[SFRestAPI sharedInstance] send:request delegate:self];

DelegateパターンでSalesforceにクエリーを投げる場合

コレが呼ばれると

Page 6: 03 salesforce mobilesdkの+(プラス)なお話

DelegateパターンでSalesforceにクエリーを投げる場合

コレが呼ばれます

- (void)request:(SFRestRequest *)request didLoadResponse:(id)jsonResponse;

Page 7: 03 salesforce mobilesdkの+(プラス)なお話

これが厄介!

Page 8: 03 salesforce mobilesdkの+(プラス)なお話

DelegateパターンでSalesforceにクエリーを投げる場合

- (void)request:(SFRestRequest *)request didLoadResponse:(id)jsonResponse { switch (tag) { case 0: //Insertの処理結果 break; case 1: //Updateの処理結果 break; case 2: //Deleteの処理結果 break; case 3: //SOQLクエリーの処理結果 break; case 4: //Describe情報検索の処理結果 break; //etc..... default: break; } }

メソッドの中に処理がたくさん・・・

Page 9: 03 salesforce mobilesdkの+(プラス)なお話

見づらい!!

Page 10: 03 salesforce mobilesdkの+(プラス)なお話

そうだ!Blocksパターンを使おう!

#import "SFRestAPI+Blocks.h"

Page 11: 03 salesforce mobilesdkの+(プラス)なお話

BlocksパターンでSalesforceにクエリーを投げる場合

NSString *soqlQuery = @"SELECT Id FROM User Where Name = 'hoge' LIMIT 1"; [[SFRestAPI sharedInstance] performSOQLQuery:soqlQuery failBlock:^(NSError *e){[self queryFailed:e];} completeBlock:^(NSDictionary *result){[self searchUserCompleted:result];}];

コールバック先を指定出来る!

NSString *soqlQuery = @"SELECT Id FROM User Where Name = 'hoge' LIMIT 1" !SFRestRequest *request = [[SFRestAPI sharedInstance]requestForQuery:soqlQuery]; ![[SFRestAPI sharedInstance] send:request delegate:self];

Page 12: 03 salesforce mobilesdkの+(プラス)なお話

ということは?

Page 13: 03 salesforce mobilesdkの+(プラス)なお話

BlocksパターンでSalesforceにクエリーを投げる場合

実行と結果を明確に分離出来る!

- (void)searchUser; - (void)searchUserCompleted; !- (void)insertUser; - (void)insertUserCompleted; !- (void)updateUser; - (void)updateUserCompleted; //ロジックは省略

Page 14: 03 salesforce mobilesdkの+(プラス)なお話

素敵!

Page 15: 03 salesforce mobilesdkの+(プラス)なお話

#import "SFRestAPI+QueryBuilder.h"

QueryBuilderを使ってみよう!

Page 16: 03 salesforce mobilesdkの+(プラス)なお話

QueryBuilderを使ってみよう

NSString *soqlQuery = @"SELECT Id, Name FROM User Where Name = 'hoge' LIMIT 1";

NSString *soqlQuery = [SFRestAPI SOQLQueryWithFields:@[@"Id",@"Name"] sObject:@"User" where:@"Name = 'hoge'" groupBy:nil having:nil orderBy:nil limit:1];

こんな風に書き換えられます!

Page 17: 03 salesforce mobilesdkの+(プラス)なお話

QueryBuilderを使ってみよう

[SFRestAPI SOQLQueryWithFields:@[@"Id",@"Name"] //SELECTの項目名を指定 sObject:@"User" // オブジェクト名を指定 where:@"Name = 'hoge'" // WHERE句の条件を指定 groupBy:nil //GROUP BY句の条件を指定 having:nil //HAVING句の条件を指定 orderBy:nil //ORDER BY句の条件を指定 limit:1]; // LIMITの条件を指定(0の場合はLIMIT無し)

Page 18: 03 salesforce mobilesdkの+(プラス)なお話

これは便利!

Page 19: 03 salesforce mobilesdkの+(プラス)なお話

ログインユーザーのIDを取得しよう!

#import "SFIdentityData.h"

Page 20: 03 salesforce mobilesdkの+(プラス)なお話

Salesforce Mobile SDKで Apexで言う

String userid = UserInfo.getUserId(); !

ってどうやるの?

Page 21: 03 salesforce mobilesdkの+(プラス)なお話

ログインユーザーのIDを取得しよう!

[SFAccountManager sharedInstance].idData]

これだけでログインしているユーザー情報が 取得出来ます

ユーザー情報

Page 22: 03 salesforce mobilesdkの+(プラス)なお話

IDを取得する場合は?

Page 23: 03 salesforce mobilesdkの+(プラス)なお話

ログインユーザーのIDを取得しよう!

NSString *userId = [SFAccountManager sharedInstance].idData.userId;

こんな風にIDが取れます! (もちろん、その他のユーザー情報項目も)

ユーザーID

Page 24: 03 salesforce mobilesdkの+(プラス)なお話

簡単!

Page 25: 03 salesforce mobilesdkの+(プラス)なお話

Salesforce Mobile SDKの Push通知を使ってみよう!

Page 26: 03 salesforce mobilesdkの+(プラス)なお話

SalesforceMobileSDKのPush通知を使ってみよう!

まず、コレを有効にします (証明書の登録方法は割愛させて頂きます・・・)

作成→アプリケーションから

Page 27: 03 salesforce mobilesdkの+(プラス)なお話

SalesforceMobileSDKのPush通知を使ってみよう!

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

次に、AppDelegate.mの

[[SFPushNotificationManager sharedInstance] registerForRemoteNotifications];

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;

[[SFPushNotificationManager sharedInstance] didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; if ([SFAccountManager sharedInstance].credentials.accessToken != nil) { [[SFPushNotificationManager sharedInstance] registerForSalesforceNotifications]; }

の2箇所の処理のコメントアウトを外します。

Page 28: 03 salesforce mobilesdkの+(プラス)なお話

えっ

Page 29: 03 salesforce mobilesdkの+(プラス)なお話

それだけ?

Page 30: 03 salesforce mobilesdkの+(プラス)なお話

それだけです! !

では、Push通知のデモを見てみましょう

Page 31: 03 salesforce mobilesdkの+(プラス)なお話

まとめ

Page 32: 03 salesforce mobilesdkの+(プラス)なお話

まとめ

みなさんもモバイル開発を始めましょう!

これからも機能拡張される(はず!)

Salesforce Mobile SDKはSalesforceとやり取りするのに便利な機能が用意されています

Page 33: 03 salesforce mobilesdkの+(プラス)なお話

ご清聴ありがとうございました!