Hamuga ID SDK
Hamuga ID authentication SDK for Flutter.
English
Features
- Customizable
HamugaIdButtonwidget. - Support for different button sizes and variants.
- Handles Hamuga ID OAuth 2.0 flow.
- Singleton architecture with
HamugaId.instance. - Stream-based and Future-based result handling.
- Supports callback parameters returned in both query and fragment formats.
Installation
dependencies:
hamuga_id_sdk: ^0.0.10
flutter pub get
Usage
1. Initialize the SDK
Initialize HamugaId in your main() function. Important: Call WidgetsFlutterBinding.ensureInitialized() first.
void main() {
WidgetsFlutterBinding.ensureInitialized();
HamugaId.initialize(
const HamugaIdConfig(
clientId: 'YOUR_CLIENT_ID',
redirectUri: 'YOUR_REDIRECT_URI',
scopes: [HamugaIdScope.openid, HamugaIdScope.email],
),
);
runApp(const MyApp());
}
2. Listen for Auth Responses
HamugaId.instance.onAuthResponse.listen((response) {
if (response.isSuccess) {
print('Auth Code: ${response.code}');
} else {
print('Error: ${response.error}');
}
});
3. Configure Redirect Handling
Use the same custom URI scheme in your Hamuga config and app platform setup.
Android AndroidManifest.xml:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="hamugaidsdkflutter" android:host="callback" />
</intent-filter>
iOS Info.plist:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>hamugaidsdkflutter</string>
</array>
</dict>
</array>
If your redirect URI is hamugaidsdkflutter://callback, your app must register the same scheme and callback host.
4. Manual Trigger
final response = await HamugaId.instance.signIn(
autoClose: true, // Automatically close browser on redirect (default: true)
);
5. Utility Functions
Extract Code from URL
final code = HamugaId.getAuthCodeFromUrl(url);
Manual Close
await HamugaId.instance.close();
6. Notes
- The SDK can read auth callback values from both
?code=...and#code=...style redirects. - Error callbacks such as
#error=...are also supported.
Монгол
Боломжууд
- Өөрчлөх боломжтой
HamugaIdButtonвиджет. - Төрөл бүрийн хэмжээ болон загварын сонголттой.
- Hamuga ID OAuth 2.0 урсгалыг бүрэн дэмжинэ.
HamugaId.instanceашиглан тохиргоог нэг дороос удирдах боломжтой.- Stream болон Future ашиглан хариуг хүлээн авна.
- Callback-ийн параметрүүдийг query болон fragment хоёр хэлбэрээс уншина.
Суулгах
dependencies:
hamuga_id_sdk: ^0.0.10
flutter pub get
Хэрэглээ
1. SDK-г эхлүүлэх
main() функц дотор HamugaId-г эхлүүлнэ. Анхаар: Эхлээд WidgetsFlutterBinding.ensureInitialized()-г заавал дуудна.
void main() {
WidgetsFlutterBinding.ensureInitialized();
HamugaId.initialize(
const HamugaIdConfig(
clientId: 'YOUR_CLIENT_ID',
redirectUri: 'YOUR_REDIRECT_URI',
scopes: [HamugaIdScope.openid, HamugaIdScope.email],
),
);
runApp(const MyApp());
}
2. Хариуг сонсох
HamugaId.instance.onAuthResponse.listen((response) {
if (response.isSuccess) {
print('Auth Code: ${response.code}');
} else {
print('Error: ${response.error}');
}
});
3. Redirect тохиргоо
redirectUri дээр ашиглаж буй custom scheme-ээ Android болон iOS дээр ижил бүртгэх шаардлагатай.
Android AndroidManifest.xml:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="hamugaidsdkflutter" android:host="callback" />
</intent-filter>
iOS Info.plist:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>hamugaidsdkflutter</string>
</array>
</dict>
</array>
Жишээ нь redirectUri нь hamugaidsdkflutter://callback бол scheme болон host хоёрыг app дээрээ зөв бүртгэсэн байх ёстой.
4. Програмын аргаар нээх
final response = await HamugaId.instance.signIn(
autoClose: true, // Redirect таарвал хөтөчийг автоматаар хаана (өгөгдмөл: true)
);
5. Туслах функцууд
URL-аас код салгах
final code = HamugaId.getAuthCodeFromUrl(url);
Хөтөчийг гараар хаах
await HamugaId.instance.close();
6. Тэмдэглэл
- SDK нь
?code=...болон#code=...аль аль callback хэлбэрийг дэмжинэ. #error=...зэрэг алдааны callback-уудыг мөн зөв уншина.
License
MIT