ページの先頭行へ戻る
Interstage Mobile Application Server V1.3.0 アプリケーション開発ガイド
FUJITSU Software

3.4.4.8 SLS内のデータの引き継ぎ

IMAPSでは、クライアント内にデータをセキュアに保存するための仕組みとして、SLSを提供しています。SLSを認証モードで利用している場合、格納データはパスワードをキーにして保護されています。
そのためパスワードが変更された場合、格納された暗号化データを引き継ぐ(暗号化データを新しいパスワードで再暗号化する)必要があります。

使用例
IMALoginManager *loginManager;

- (void)func1
{
    loginManager = [[IMALoginManager alloc] init:self];
    [loginManager loginOnline:@"https:// サーバアドレス:ポート/"userId:@"userid"
                       passwd:@"password"];

    // この後、ログイン結果は、IMALoginDelegateプロトコルのdidLoginFinishedメソッドで通知されます。
    // IMALoginManagerのinitで自分自身をdelegateとして指定しています。
    // 詳細はIMALoginManagerクラスを参照してください。
}

- (void) didLoginFinished:(NSError *)anError
{
    NSString *message = nil;
    if(anError == nil) {
        message = @"LOGIN DONE";
    } else {
        if([anError.domain isEqualToString:IMAAuthErrorDomain]) {
            switch (anError.code) {
                case AuthLoginFailed:
                    message = @"LOGIN FAILED";
                    break;
                case AuthAlreadyLogin:
                    message = @"ALREADY LOGIN";
                    break;
                // それぞれのエラーの実装.
                default:
                    message = @"SYSTEM ERROR";
                    break;
            }
        } else if([anError.domain isEqualToString:IMASlsErrorDomain]) {
            switch (anError.code) {
                case SlsOfflinePasswordError:
                    message = @"OFFLINE LOGIN FAILED";
                    break;
                case SlsPasswordError:
                {
                    message = @"NEED TAKES OVER";
                    // SLSデータの引き継ぎが必要.
                    // データを引き継ぐ場合は、旧パスワードを使用してtransDataを呼び出します.
                    // データを削除する場合は、deleteDataを呼び出します.
                    break;
                }
                // それぞれのエラーの実装.
                default:
                    message = @"SYSTEM ERROR";
                    break;
            }
        } else {
            message = @"SYSTEM ERROR";
        }
        NSLog(message);
    }
}

// ダイアログで、データ引き継ぎをおこなうかをユーザーに問い合わせる場合
- (void)func2
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title"
                                          message:@"データ引き継ぎか削除かの問い合わせ"
                                          delegate:self
                                          cancelButtonTitle:nil
                                          otherButtonTitles: @"削除", @"引き継ぎ", nil];
    [alert show];
}

// ダイアログでデータ引き継ぎか削除が選択された時の処理の切り分けを行う
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    NSError *anError = nil;
    BOOL result = NO;

    if (buttonIndex == 0) {
        // 削除が選択された場合は、deleteDataを呼び出します。
        result = [loginManager deleteData:&anError];
        if (!result) {
            // それぞれのエラーの実装.
        }
    } else if (buttonIndex == 1) {
        // データ引き継ぎが選択された場合は、入力された旧パスワードを引数に、transDataを呼び出します。
        // UITextFieldから旧パスワードを取得
        NSString *oldPassword = _oldPassword.text;
        result = [loginManager transData:oldPassword error:&anError];
        if(!result) {
            // それぞれのエラーの実装.
        }
    }
}