2017-04-16 9 views
-1

나는 android world를 처음 사용하며 설정을 저장하는 것과 관련하여 질문이 있습니다. 나는 그것을 예를 들어 설명하려고 노력할 것이다. 사용자가 앱과 계정을 동기화하는 gmail과 유사한 Android 앱이 있다고 가정 해 보겠습니다. 로그인/암호가 저장되어있어 휴대 전화의 전원을 끄더라도 여전히 로그인되어 있습니다. SharedPreferences에 별도의 파일로 데이터베이스에 저장되어 있습니까? 모든 설명을 주시면 감사하겠습니다.android에 데이터를 저장하는 위치

답변

0

Google 및 기타 회사는 세션을 사용하여 사용자를 식별합니다. 그들은 모바일에 암호를 저장하지 않습니다. 첫 번째 로그인 후 서버는 사용자에게 고유 한 세션 ID를 발행하고 앱은 SharedPreferences에이 세션 ID를 저장할 수 있으며 그 이후에도 모든 연속적인 서버 요청은 인증을 위해이 세션 ID를 보내야합니다. 귀하의 경우 SharedPreferences에 모든 설정을 저장할 수 있지만 암호를 저장하는 것은 좋지 않습니다. 예를 들어 다양한 기능을 갖춘 게임을 만들 때와 같이 많은 양의 데이터를 저장하려는 경우 SQLite 데이터베이스를 사용하여 데이터를 저장하고 검색 할 수 있습니다.

편집 : 먼저 사용자 이름과 암호를 HttpUrlConnection을 사용하여 서버에 보냅니다. 그런 다음 서버 응답 헤더에서 쿠키를 추출해야합니다. 다음 코드는 서버 응답에서 쿠키를 구하는 방법을 보여줍니다,이 후

sharedPreferences.edit().putString("token", token).apply(); 

서버에 대한 연속적인 요청에 쿠키를 추가

   String[] tokens; 
       List cookies = conn.getHeaderFields().get("Set-Cookie"); 
       if (cookies != null) { 
        for (int i = 0; i < cookies.size(); i++) { 
         String cookieString = (String) cookies.get(i); 
         tokens = cookieString.split(";"); 
         List<String> cookieHeaders = new ArrayList<>(); 
         for (String str : tokens) { 
          if (str.contains("httponly")||str.contains("HttpOnly")) { 
           str = str.trim(); 
           cookieHeaders.add(str); 
          } else { 
           Log.d("loginactivity","str "+str); 
           str = str.substring(0, str.indexOf("=")).trim(); 
           cookieHeaders.add(str); 
          } 
         } 
         String token = cookieString; 
        } 
       } 

당신은 공유 환경 설정에서 토큰을 넣을 수 있습니다.

String cookie = sharedPreferences.getString("token",""); 
httpConn.setRequestProperty("Cookie",cookie); 
+0

승인 기능을 앱에 제공해야합니다. 확실히 세션 토큰을 앱에 보낼 수 있습니다. 그 주제에 대한 더 많은 정보를 제게 제공 할 수 있습니까? – kDoyle

0

SQLite 데이터베이스에 데이터를 저장할 수 있습니다. 앱이 파일 시스템 권한에 액세스해야합니다.