タイトルの通りですが、
phpにてJSONデータを作成してiPhoneアプリ内で受け取る事で、
サーバ側の情報でアプリの通知メッセージとOKボタンを押下した場合の挙動を制御します。
php
<?php $jArray = array(); $jArray['data']['openCls'] = '0'; $jArray['data']['msgTitle'] = "タイトル"; $jArray['data']['msgBody'] = "本文"; $jArray['data']['msgCancel'] = "Cancel"; $jArray['data']['msgOk'] = "OK; $jArray['data']['url'] = "http://www.yahoo.co.jp"; echo json_encode($jArray);
objectiv-c
NSString * const KEY_OPEN_CLS = @"openCls"; NSString * const KEY_GO_DETAIL_MSG_TITLE = @"msgTitle"; NSString * const KEY_GO_DETAIL_MSG_BODY = @"msgBody"; NSString * const KEY_GO_DETAIL_MSG_CANCEL = @"msgCancel"; NSString * const KEY_GO_DETAIL_MSG_OK = @"msgOk"; NSString * const KEY_GO_DETAIL_BEFORE_URL = @"beforeUrl"; //jsonで取得して必要な情報を抜き出す NSString *str = @"http://****************info.php"; NSURL *httpDataUrl2 = [NSURL URLWithString:str]; NSURLRequest *request = [NSURLRequest requestWithURL:httpDataUrl2]; NSData *json_data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; // データが取得できなかった場合の処理 if (json_data == nil) { // 値の初期かなど return; } // NSDictionary NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:json_data options:NSJSONReadingAllowFragments error:nil]; // JsonをDictionaryへ NSMutableDictionary *jsonDic = jsonObject[@"data"]; [self setSharedDicForKey:jsonDic[KEY_OPEN_CLS] forKey:KEY_OPEN_CLS]; [self setSharedDicForKey:jsonDic[KEY_GO_DETAIL_MSG_TITLE] forKey:KEY_GO_DETAIL_MSG_TITLE]; [self setSharedDicForKey:jsonDic[KEY_GO_DETAIL_MSG_BODY] forKey:KEY_GO_DETAIL_MSG_BODY]; [self setSharedDicForKey:jsonDic[KEY_GO_DETAIL_MSG_CANCEL] forKey:KEY_GO_DETAIL_MSG_CANCEL]; [self setSharedDicForKey:jsonDic[KEY_GO_DETAIL_MSG_OK] forKey:KEY_GO_DETAIL_MSG_OK]; [self setSharedDicForKey:jsonDic[KEY_GO_DETAIL_BEFORE_URL] forKey:KEY_GO_DETAIL_BEFORE_URL];
こんな感じです。
php側でJSONデータを作成して、iPhoneアプリからはそのphpファイルにアクセスしています。
受け取ったJSONデータをNSDictionaryへセットしています。
ここでは、共通で使っているSingltonなDictionaryへ格納しています。
通知を出す時はこのようにしています。
// 公開区分取得 NSString * openCls = [model getSharedDicForKey:KEY_OPEN_CLS]; if ([[model getSharedDicForKey:KEY_OPEN_CLS] isEqualToString:@"1"]) { // openClsが1の場合のみアラートを通知する。 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[model getSharedDicForKey:KEY_GO_DETAIL_MSG_TITLE] message:[model getSharedDicForKey:KEY_GO_DETAIL_MSG_BODY] delegate:self cancelButtonTitle:[model getSharedDicForKey:KEY_GO_DETAIL_MSG_CANCEL] otherButtonTitles:[model getSharedDicForKey:KEY_GO_DETAIL_MSG_OK], nil]; [alertView show]; }
こんな感じで、phpで設定したopenClsを確認し、1に設定している場合のみ
設定したメッセージが表示されるという様な仕掛けです。
仕掛けは単純ですが、アイディア次第で色々な使い方が出来るかもですね!
もっと上手いやり方もあると思いますが、自分はこうやっています。