Android
2020.04.22 / 11:18

[¾Èµå·ÎÀ̵å/Android]Retrofit¿¡¼­ Interceptor¸¦ ÀÌ¿ëÇØ ÄíÅ°/¼¼¼Ç À¯ÁöÇÏ´Â ¹æ¹ý

Äڷγª
Ãßõ ¼ö 220

RetrofitÀº ¿ì¸®°¡ ÇØÁÖ¾î¾ßÇÒ ±ÍÂúÀº ³×Æ®¿öÅ© Åë½Å ÀÛ¾÷À» ´ë½ÅÇØÁÖ´Â Á¤¸» À¯¿ëÇÑ ¶óÀ̺귯¸®ÀÔ´Ï´Ù.

[¾Èµå·ÎÀ̵å]À¯¿ëÇÑ ¶óÀ̺귯¸® - Retrofit(REST API Åë½Å)



REST APIÅë½ÅÀ» ÇÒ¶§ Á¤¸» À¯¿ëÇÏ°í ÆíÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

¾Èµå·ÎÀÌµå ¾ÛÀ» °³¹ßÇϽø鼭 ·Î±×ÀÎÀ» ÇÊ¿ä·Î ÇÏ´Â ¼­ºñ½º¸¦ ¸¸µé¾î¾ß ÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù.




·Î±×ÀÎÀ» Çϴ°æ¿ì ·Î±×ÀÎ À¯Áö¸¦ À§Çؼ­ Ŭ¶óÀ̾ðÆ®´Â ÄíÅ°¸¦, ¼­¹ö´Â ¼¼¼ÇÀ» ÀÌ¿ëÇÏ°Ô µË´Ï´Ù.


(Äí...ÄíÅ° ¶¯±ä´Ù...)










¾Èµå·ÎÀ̵忡¼­ CookieStore¸¦ ÀÌ¿ëÇϸé óÀ½¿¡ ¾ÛÀ» ½ÇÇàÇÏ°í ·Î±×ÀÎÇÑµÚ ÀÌ·ç¾îÁö´Â ¸ðµç Request¿¡ ´ëÇؼ­ ÄíÅ°¸¦ À¯ÁöÇؼ­ °è¼Ó ·Î±×ÀÎµÈ »ç¿ëÀÚÀÓÀ» ¾Ë·ÁÁÙ ¼ö ÀÖ½À´Ï´Ù.

ÇÏÁö¸¸ CookieStore´Â ¾ÛÀ» ´Ù½Ã ½ÇÇàÇÏ¸é »õ·Î¿î cookie¸¦ »ý¼ºÇϱ⶧¹®¿¡ ´Ù½Ã ·Î±×ÀÎÇؾßÇÏ°í

±×·¸°Ô µÈ´Ù¸é ¸Å¹ø ½ÇÇà½Ã¸¶´Ù ·Î±×ÀÎÀ» ÇØÁÖ¾î¾ß ÇÏ´Â ÀÛ¾÷À» ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù.













·Î±×ÀÎȽ¼öÁý°è³ª ±âŸ ·Î±×Àνà ÇÊ¿äÇÑ Á¤º¸³ª µ¥ÀÌÅ͸¦ ¹Þ±âÀ§Çؼ­ ½ÇÇà½Ã¸¶´Ù ·Î±×ÀÎÀÌ ÇÊ¿äÇÑ °æ¿ìµµ ÀÖ°ÚÁö¸¸, 

¾î·µç ½ÇÇàÇÒ¶§¸¶´Ù »õ·Î¿î ÄíÅ°°ªÀÌ »ý±â´Â°ÍÀº Ŭ¶óÀ̾ðÆ®¿¡°Ô³ª ¼­¹ö¿¡°Ô³ª ÁÁÁö ¾ÊÀº ¹æ½ÄÀÏ °ÍÀÔ´Ï´Ù.

°°Àº »ç¿ëÀÚ°¡ »ç¿ëÇÔ¿¡µµ ºÒ±¸ÇÏ°í ÄíÅ°°¡ »õ·Î ¸¸µé¾îÁö±â¶§¹®¿¡ ¼­¹ö´Â °è¼Ó »õ·Î¿î ¼¼¼ÇÀ» »ý¼ºÇÏ°Ô µÇ°í ÀÌ´Â ³ªÁß¿¡ ÀǵµÇÏÁö ¾ÊÀº ¹®Á¦¸¦ ¾ß±â½Ãų ¼ö ÀÖ½À´Ï´Ù.



Retrofit¿¡¼­ »ç¿ëÇÏ´Â Okhttp¸¦ ÀÌ¿ëÇÏ¿© ½ÇÇà½Ã¸¶´Ù Ç×»ó °°Àº ÄíÅ°°ªÀ» À¯ÁöÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­ Æ÷½ºÆà Çغ¸°Ú½À´Ï´Ù.















¿ä¾à


1. ·Î±×ÀÎÇÑµÚ ¹ÞÀº Response¿¡¼­ ÄíÅ°Á¤º¸¸¦ °¡Á®¿Â´Ù.

2. °¡Á®¿Â ÄíÅ°Á¤º¸¸¦ ¾Èµå·ÎÀ̵åÀÇ SharedPreferences¿¡ ÀúÀåÇصдÙ.

3. ÀÌÈÄ ¼öÇàµÇ´Â Request¸¶´Ù SharedPreferences¿¡¼­ ÄíÅ°¸¦ °¡Á®¿Í¼­ Header¿¡ Ãß°¡Çؼ­ º¸³½´Ù.















±¸Çö ¹æ¹ýÀº »ý°¢º¸´Ù °£´ÜÇÕ´Ï´Ù.


Response·ÎºÎÅÍ ÄíÅ°Á¤º¸¸¦ °¡Á®¿Í¼­ Preference¿¡ ÀúÀåÇϴ ReceivedCookiesInterceptorŬ·¡½º¸¦ ¸¸µé¾î ÁÝ´Ï´Ù.

Request¸¶´Ù Preference¿¡ ÀúÀåµÇ¾îÀÖ´Â ÄíÅ°°ªÀ» ÇÔ²² Header¿¡ ³Ö¾îÁִ AddCookiesInterceptorŬ·¡½º¸¦ ¸¸µé¾î ÁÝ´Ï´Ù.



2°³ÀÇ ReceivedCookiesInterceptor, AddCookiesInterceptorŬ·¡½º´Â ¾Æ·¡ ¼Ò½º¿¡¼­ È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

(SharedPreferences ¿¡ ÄíÅ°Á¤º¸¸¦ ÀúÀåÇÏ°í °¡Á®¿À´Â ºÎºÐÀº ¿øÇϽô ¹æ¹ýÀ¸·Î ÆíÇÏ°Ô ¸¸µå½Ã¸é µË´Ï´Ù)



public class AddCookiesInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
// Preference¿¡¼­ cookies¸¦ °¡Á®¿À´Â ÀÛ¾÷À» ¼öÇà
Set<String> preferences = SharedPreferenceBase.getSharedPreference(APIPreferences.SHARED_PREFERENCE_NAME_COOKIE, new HashSet<String>());
for (String cookie : preferences) {
builder.addHeader("Cookie", cookie);
}
// Web,Android,iOS ±¸ºÐÀ» À§ÇØ User-Agent¼¼ÆÃ
builder.removeHeader("User-Agent").addHeader("User-Agent", "Android");
return chain.proceed(builder.build());
}
}
public class ReceivedCookiesInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Response originalResponse = chain.proceed(chain.request());
if (!originalResponse.headers("Set-Cookie").isEmpty()) {
HashSet<String> cookies = new HashSet<>();
for (String header : originalResponse.headers("Set-Cookie")) {
cookies.add(header);
}
// Preference¿¡ cookies¸¦ ³Ö¾îÁÖ´Â ÀÛ¾÷À» ¼öÇà
SharedPreferenceBase.putSharedPreference(APIPreferences.SHARED_PREFERENCE_NAME_COOKIE, cookies);
}
return originalResponse;
}
}








±×´ÙÀ½ RetrofitÀ» buildÇØÁÙ¶§ CustomÇÏ°Ô OkHttpClient¸¦ ¸¸µé°í ÀÌ Å¬¶óÀ̾ðÆ®¸¦ RetrofitÀÇ Å¬¶óÀ̾ðÆ®·Î ÁöÁ¤ÇØÁÝ´Ï´Ù.


OkHttpClient client = new OkHttpClient();
// ÄíÅ°¸¦ Prefreence¿¡ ÀúÀåÇÏ°í °¡Á®¿È
client.interceptors().add(new AddCookiesInterceptor());
client.interceptors().add(new ReceivedCookiesInterceptor());




2.0 ÀÌÀüÀÇ ¹öÀüÀ» »ç¿ëÇÏ°í °è½Å´Ù¸é À§¿¡¼­ ¸¸µç client¸¦ °¡Áö°í OkClient Ŭ·¡½º¸¦ ¸¸µé¾îÁÖ°í ÀÌ Å¬¶óÀ̾ðÆ®¸¦ RestAdapter¿¡ ¼³Á¤ÇØÁÖ½Ã¸é µË´Ï´Ù.


OkClient serviceClient = new OkClient(client);








¾î¶§¿ä? Âü ½±ÁÒ?







ÀÌ»óÀ¸·Î Retrofit¿¡¼­ Interceptor¸¦ ÀÌ¿ëÇØ ÄíÅ°/¼¼¼Ç À¯ÁöÇÏ´Â ¹æ¹ý(ÄíÅ°¸¦ »©µ¹¸®±â)¿¡ ´ëÇØ Æ÷½ºÆà Çغ¸¾Ò½À´Ï´Ù.

°¨»çÇÕ´Ï´Ù.



Ãâó: https://gun0912.tistory.com/50?category=560271 [¹Ú»ó±ÇÀÇ »ðÁúºí·Î±×]