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) { // それぞれのエラーの実装. } } }