πŸš€ signly_google

A modern Google Sign‑In wrapper for Flutter using the latest SDK.

✨ Simple API
πŸ” Secure token flows
πŸ“± Mobile friendly
🧠 Backend ready


πŸ“¦ What you get

Icon Token Purpose
πŸͺͺ idToken (JWT) Authenticate user on backend
πŸ” serverAuthCode Exchange for refreshToken
🌐 accessToken Call Google APIs
πŸ‘€ Profile Email, name, avatar

πŸ— GCP SETUP

πŸ“ Google Cloud Console β†’ APIs & Services β†’ OAuth Consent Screen

βœ” App name
βœ” Support email (User support)
βœ” Audience
βœ” Developer email (Contact info)


πŸ€– Step 2: Android OAuth Client

Type: Android
Provide: πŸ“¦ Package name
πŸ”‘ SHA‑1 fingerprint

βœ… Used for handshake only
🚫 Not passed in Flutter code


🍎 Step 3: iOS OAuth Client

Type: iOS
Provide: πŸ“¦ Bundle ID

Add in ios/Runner/Info.plist

<key>GIDClientID</key>
<string>YOUR_CLIENT_ID.apps.googleusercontent.com</string>
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>com.googleusercontent.apps.YOUR_CLIENT_ID</string>
    </array>
  </dict>
</array>

πŸ” URL scheme returns user back to app after login


🌐 Step 4: Web OAuth Client (IMPORTANT)

Type: Web Application

🎯 This is your serverClientId

Used for: βœ… idToken audience
βœ… serverAuthCode
βœ… backend refresh flow


πŸ” Token meanings

πŸͺͺ idToken

JWT signed by Google
Contains user identity

🌐 accessToken

Call Google APIs
⏳ Expires automatically

πŸ” serverAuthCode

One‑time code
Backend β†’ refreshToken + accessToken


πŸ“± Flutter Usage

import 'package:signly_google/signly_google.dart';

final client = SignlyGoogleClient();

final result = await client.signIn(
     GoogleSignInRequest(
          clientId: ...
          serverClientId: ...
          scopes: ['email', 'profile'],
          requestedTokenType: GoogleRequestedTokenType.<token_type>,
);

Access values

result.requestedToken
result.requestedTokenType.name
result.userId
result.userData.email
result.userData.displayName
result.userData.photoUrl

🧠 Best Practice Flow

πŸ“± Flutter β†’ idToken + authCode
πŸ–₯ Backend β†’ refreshToken
β™» Backend refreshes forever

🚫 Do NOT rely only on mobile accessToken


πŸ“„ License

MIT

Libraries

signly_google