tiendung01023 / zalo_flutter

This plugin supports communication with the Zalo APIs
MIT License
7 stars 19 forks source link

Login success but accesstoken null #8

Closed mminhlequang closed 2 years ago

mminhlequang commented 2 years ago

{isSuccess: true, data: {refreshToken: null, expriedTime: null, accessToken: null}} Hi anh, nhờ anh check hộ phần này

mminhlequang commented 2 years ago

lỗi này xuất hiện trên ios

huantd0111 commented 2 years ago

@lqmminh bạn đã fix được case này chưa b?

mminhlequang commented 2 years ago

@huantd0111 chưa bạn ơi

mminhlequang commented 2 years ago

@tiendung01023

huantd0111 commented 2 years ago

Sau khi đọc kỹ lại code của bạn Dũng và tham triếu tài liệu của Zalo thì mình đang hiểu như này.

  1. Access token chỉ lấy được duy nhất 1 lần (lần đâu tiên, khi này refresh token truyền vào sẽ là null), những lần sau muốn lấy thì phải dùng refresh token. Do khả năng mình test nên ko để ý lưu lại refesh token nên những lần sau đó mình test chỉ ra null. Đó là suy đoán của mình vì mình chưa có thời gian test lại.
anhphongit commented 2 years ago

Sau khi đọc code thì em thấy root cause nằm ở chỗ này:

try { if (rs != null && rs['data'] != null && rs['data'] is Map<dynamic, dynamic>) { final Map<dynamic, dynamic>? data = rs['data'] as Map<dynamic, dynamic>?; data?['accessToken'] = data['access_token']; data?['refreshToken'] = data['refresh_token']; data?['expriedTime'] = data['expires_in']; data?.remove('access_token'); data?.remove('refresh_token'); data?.remove('expires_in'); } // ignore: empty_catches } catch (e) {}

Cơ bản là rs['data'] do ZaloSDK trả về khác nhau giữa Android và iOS, cụ thể trên iOS đang trả về 'accessToken', 'refreshToken', 'expriedTime'; còn Android đang trả về 'access_token', 'refresh_token', 'expires_in'; nên dẫn đến issue trên iOS.

@tiendung01023

tiendung01023 commented 2 years ago

@anhphongit Dạ đúng rồi anh, ban đầu em muốn sửa lại data bên android cho đồng bộ với iOS, mà do không chú ý check lại bên iOS, em sẽ hot-fix trước 1 bản cho mọi người, sau đó em sẽ sửa lại 1 bản chuẩn hơn Về refeshToken thì lần đầu sẽ khônng cần truyền, sau đó cần lưu lại để dùng cho những lần sau đúng rồi ạ