SDK による保存情報からのログイン

SDK 側で自動保存されたアクセストークンやそれに関連する情報を使ってログインする方法です。ログインまたはユーザーのリフレッシュ成功時に、SDK 側でストレージに認証結果が自動保存されており、プロセスの再起動時にそれらの情報を使ってログインできます。

これらの情報は、キーチェーンに保存されます(iCloud キーチェーンは非対応です)。保存される情報は以下のとおりです。

  • ユーザー ID
  • ユーザー名
  • メールアドレス
  • 電話番号
  • ディスプレイネーム
  • 所在国
  • アクセストークン
  • アクセストークンの有効期限
  • リフレッシュトークン

ログアウトを呼び出されたタイミングでのみ、これらの情報が削除されます。

Kii SDK はこれらの情報をキーチェーンに保存する際、kSecClass = kSecClassKey、kSecAttrApplicationLabel = "KiiSDK/user_credentials" として保存します。アプリ側でキーチェーンを使用する際は、これらの保存場所と競合しないようにご注意ください。詳細は Apple の Keychain Services Programming Guide をご覧ください。

この保存されている認証情報を使ってログインを行う例を示します。

Swift 3:

  • let user : KiiUser?
    
    do{
      // Authenticate a user with the stored credentials.
      user = try KiiUser.authenticateWithStoredCredentialsSynchronous()
    
      // Refresh the user.
      try user?.refreshSynchronous()
    }catch let error as NSError {
      // Handle the error.
      return
    }
  • // Authenticate a user with the stored credentials.
    KiiUser.authenticate(storedCredentials: { (user :KiiUser?, error : Error?) -> Void in
    
      if error != nil {/* Handle the error. */ return} // you can remove this line if you don't handle this error.
    
      // Refresh the user.
      user?.refresh {(user :KiiUser?, error )->Void in
        if (error != nil) {
          // Handle the error.
          return
        }
      }
    })

Objective-C:

  • NSError *error = nil;
    
    // Authenticate a user with the stored credentials.
    KiiUser *user = [KiiUser authenticateWithStoredCredentialsSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Refresh the user.
    [user refreshSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return
    }
  • // Authenticate a user with the stored credentials.
    [KiiUser authenticateWithStoredCredentials:^(KiiUser *user, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    
      // Refresh the user.
      [user refreshWithBlock:^(KiiUser *user, NSError *error) {
        if (error != nil) {
          // Handle the error.
          return;
        }
      }];
    }];

認証情報がキーチェーンに保存されている場合、authenticate(storedCredentials:_:) メソッドを実行することでログインすることができます。このメソッドはサーバーにアクセスすることはなくキーチェーンからログイン状態を復元するメソッドです。ユーザーの最新情報を取得する場合は別途、refresh(_:) メソッドを実行してください。

保存されている認証情報は logOut() メソッドを実行することでキーチェーンから削除することができます。ログアウト後に authenticate(storedCredentials:_:) メソッドを呼び出すとエラーが発生します。

また何らかの理由でキーチェーンに保存されている認証情報の読み込みに失敗した場合もエラーが発生します。この場合はパスワードによるログインを行うなどの対応をしてください。

再ログインを実行するかどうかにかかわらず、アクセストークン等の情報は、ログインやリフレッシュの実行時に常に保存されています。

仮ユーザーを使用する場合でも、仮ユーザーの作成直後に KiiUserrefresh(_:) メソッドを呼び出すことで、authenticate(storedCredentials:_:) メソッドによるログインを行うことができます。

モバイルアプリを設計する際は、Kii Balance チュートリアルの タイトル画面 を参考に、永続化と画面遷移を実現してください。