SDK Flutter – SoftAfrik Push API
Intégration Flutter + Firebase Cloud Messaging + SoftAfrik Push API.
1. Installation
1.1 Ajouter les dépendances
dependencies: firebase_messaging: ^14.7.10 http: ^1.2.0
1.2 Configurer Firebase (Android & iOS)
Suivez la documentation officielle Firebase pour connecter votre app Flutter.
https://firebase.google.com/docs/flutter/setup2. SDK Flutter – softafrik_push_client.dart
Placez ce fichier dans lib/softafrik_push_client.dart.
import 'dart:convert';
import 'package:http/http.dart' as http;
class SoftAfrikPushClient {
final String apiKey;
final String baseUrl;
SoftAfrikPushClient(
this.apiKey, {
this.baseUrl = "https://softafrik-push-api.brillanciel.com",
});
Future _post(String path, Map payload) async {
final url = Uri.parse("$baseUrl$path");
final res = await http.post(
url,
headers: {
"X-API-KEY": apiKey,
"Content-Type": "application/json",
},
body: jsonEncode(payload),
);
return jsonDecode(res.body);
}
Future _get(String path) async {
final url = Uri.parse("$baseUrl$path");
final res = await http.get(url, headers: {
"X-API-KEY": apiKey,
"Content-Type": "application/json",
});
return jsonDecode(res.body);
}
// Enregistrer user
Future registerUser(String externalUserRef, {Map? meta}) {
return _post("/api/users/register", {
"external_user_ref": externalUserRef,
"meta": meta ?? {}
});
}
// Enregistrer device
Future registerDevice(
String puid,
String appName,
String platform,
String deviceToken, {
String? deviceUid,
String? lang,
String? country,
}) {
final payload = {
"puid": puid,
"app_name": appName,
"platform": platform,
"device_token": deviceToken,
};
if (deviceUid != null) payload["device_uid"] = deviceUid;
if (lang != null) payload["lang"] = lang;
if (country != null) payload["country"] = country;
return _post("/api/devices/register", payload);
}
// Push user
Future pushToUser(String puid, String title, String body,
{Map? data}) {
return _post("/api/push/to-user", {
"puid": puid,
"title": title,
"body": body,
"data": data ?? {}
});
}
// Push device
Future pushToDevice(String token, String title, String body,
{Map? data}) {
return _post("/api/push/to-device", {
"device_token": token,
"title": title,
"body": body,
"data": data ?? {}
});
}
// Broadcast
Future broadcast(String title, String body,
{String? appName, String? country, Map? data}) {
final payload = {
"title": title,
"body": body,
"data": data ?? {}
};
if (appName != null) payload["app_name"] = appName;
if (country != null) payload["country"] = country;
return _post("/api/push/broadcast", payload);
}
// Inbox
Future inbox(String puid) {
return _get("/api/push/inbox?puid=$puid");
}
Future read(int id) {
return _post("/api/push/read", {"id": id});
}
Future readAll(String puid) {
return _post("/api/push/read-all", {"puid": puid});
}
}
3. Récupération du token FCM
import 'package:firebase_messaging/firebase_messaging.dart'; FuturegetFcmToken() async { final fcm = FirebaseMessaging.instance; final token = await fcm.getToken(); return token; }
4. Exemple d’intégration Flutter
import 'package:flutter/material.dart';
import 'softafrik_push_client.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final client = SoftAfrikPushClient("VOTRE_API_KEY");
// 1) Récupérer un FCM token
final token = await FirebaseMessaging.instance.getToken();
// 2) Enregistrer User
final user = await client.registerUser(
"user_123",
meta: {"full_name": "John Doe"},
);
final puid = user["puid"];
// 3) Enregistrer Device
await client.registerDevice(
puid,
"MyFlutterApp",
"android",
token!,
deviceUid: "device-uuid-123",
lang: "fr",
country: "TG",
);
// 4) Lire l’inbox
final inbox = await client.inbox(puid);
print(inbox);
}
Endpoints
Users
POST /api/users/register
Devices
POST /api/devices/registerPOST /api/devices/unregister
Push
POST /api/push/to-userPOST /api/push/to-devicePOST /api/push/broadcast
Inbox
GET /api/push/inbox?puid={PUID}POST /api/push/readPOST /api/push/read-all
final client = SoftAfrikPushClient("API_KEY");
final r = await client.pushToUser("sa_xxx", "Ping", "Hello World");
print(r);