Accueil Docs Tarifs À propos Admin

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/setup

2. 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';

Future getFcmToken() 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/register
  • POST /api/devices/unregister
Push
  • POST /api/push/to-user
  • POST /api/push/to-device
  • POST /api/push/broadcast
Inbox
  • GET /api/push/inbox?puid={PUID}
  • POST /api/push/read
  • POST /api/push/read-all
final client = SoftAfrikPushClient("API_KEY");
final r = await client.pushToUser("sa_xxx", "Ping", "Hello World");
print(r);