UIAlertViewの通知メッセージとOKの動きをWEB連動で動的に変更する方法

タイトルの通りですが、
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に設定している場合のみ
設定したメッセージが表示されるという様な仕掛けです。

仕掛けは単純ですが、アイディア次第で色々な使い方が出来るかもですね!
もっと上手いやり方もあると思いますが、自分はこうやっています。

コメントを残す