Pakete, Repositories und App-Kategorien suchen

Paketdetailsv1.1.0

deeplink_rpc

Eine in Dart geschriebene RPC-via-Deep-Link-Kommunikationsbibliothek. Dies ist speziell für Flutter-Mobilanwendungen (iOS / Android) gedacht.

AndroidiOSmacOSWindowsLinux
30-Tage-Downloads
142
Likes
4
Pub-Punkte
130

Paket installieren

flutter pub add deeplink_rpc

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

Eine auf Dart basierende Bibliothek, die RPC-Kommunikation (Remote Procedure Call) über Deep Links in Flutter-Anwendungen für iOS und Android ermöglicht. Sie erleichtert sichere, plattformübergreifende Kommunikation zwischen Anwendungen, indem sie Deep-Link-URLs zum Aufrufen von Methoden und zum Austausch von Daten zwischen Apps oder innerhalb der Komponenten einer einzelnen App nutzt. Für eine nahtlose Integration in mobile Umgebungen entwickelt, unterstützt sie strukturierte Nachrichtenübertragung und ist ideal für Szenarien, bei denen eine App-zu-App-Interaktion erforderlich ist, ohne auf traditionelle Netzwerkaufrufe angewiesen zu sein. Die Bibliothek ist Open Source und wird von der Archethic Foundation gepflegt.

Anwendungsfälle

  • App-zu-App-Kommunikation
  • Nachrichtenübertragung zwischen Modulen in Flutter-Anwendungen
  • Sichere Remote-Methode-Aufrufe
  • Behandlung externer Aktionen über Deep Links
  • Einfache Navigation mit Datenübertragung

Hauptmerkmale

  • RPC auf Basis von Deep Links
  • Plattformübergreifende Unterstützung (iOS/Android)
  • sichere Nachrichten Serialisierung
  • Einfache Integration mit Flutter
  • Open-Source und aktiv gepflegt

Geeignet für

  • Mobile-App-Entwickler, die Flutter verwenden
  • Apps, die eine Kommunikation zwischen Apps erfordern
  • Entwickler, die sichere Deep-Link-Workflows umsetzen
  • Projekte, die leichte RPC-Alternativen benötigen
  • Teams, die modulare oder Micro-Frontend-Architekturen erstellen

Hinweise

  • Erforderliche korrekte Tiefenlink-Konfiguration auf Zielplattformen
  • Beschränkt auf mobile und Desktop-Plattformen (keine Webversion)
  • Abhängig von der korrekten URL-Schema-Einrichtung
  • Könnte zusätzliche Sicherheitsmaßnahmen für sensible Daten erfordern
  • Nicht geeignet für Hochfrequenz- oder Low-Latency-Kommunikation

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

Deeplink RPC

A RPC-via-deeplink communication library coded in Dart. This is dedicated to Flutter mobile applications (iOS / Android).

Protocol

Deeplink codec

Deeplink messages are appended to the deeplink URI. Because of that, there are limitations in the available formatting.

To get it working, the message is encoded that way :

                     +--------------+   +------+   +-----------+
method_payload :     | Json Message |-> | gzip |-> | base64Url |
                     +--------------+   +------+   +-----------+


Deeplink Url : `<scheme>://<host>/<method_name>/<method_payload>`

Example :

                     +--------------------------+      +----------------------------------------------------------------+
method_payload :     | { "param1" : "a_value" } |----> | "H4sIAAAAAAAAA6tWUCpILErMNVRSsFJQSowvS8wpTVVSqAUAhIgKchgAAAA=" |
                     +--------------------------+      +----------------------------------------------------------------+


Deeplink Url : `scheme://host/a_method/H4sIAAAAAAAAA6tWUCpILErMNVRSsFJQSowvS8wpTVVSqAUAhIgKchgAAAA=`

Request formatting

Requests payload are encapsulated in a JSON-RPC 2.0 message.

{
  "id": Number,                     // An unique client-generated integer identifying the request
  "replyUrl": String,               // Deeplink URL to which send the invokation result. This should be a Deeplink URL handled by the DApp.
  "params": {
    "origin": {
      "name": String,               // Human readable identifier of the DApp
      "url": String | undefined,    // URL of the DApp
      "logo": Base64 | undefined,   // Logo of the DApp 
    },
    "version": 2,                   // Version of the DApp API
    "payload": Object,              // Method parameters
  }
}
Success Response formatting
{
  "id": Number,                     // The request identifier
  "result":  Object,                // Result payload
}
Failure Response formatting
{
  "id": Number,                     // The request identifier
  "failure": {
    "code": Number,                 // Error code
    "message": String | undefined,  // Error description
    "data": Object | undefined,     // Error data
  },
}

Usage

Server - listening to incoming requests
/// 1. Enable deeplinking for your application (https://docs.flutter.dev/development/ui/navigation/deep-linking)

/// 2. Declare the deeplink-rpc receiver
/// When a RPC call <scheme>://a_rpc_command/<payload> is received, the payload is decoded
/// and transmitted to the `handle` method.
final _deeplinkRpcServer = DeeplinkRpcServer()
    ..registerHandler(
      DeeplinkRpcRequestHandler(
        route: const DeeplinkRpcRoute('a_rpc_command'),
        handle: (request) {
            log('Command received');
        }
      ),
    );


class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'DeeplinkRPC Demo',
      home: const SendForm(),
      onGenerateRoute: (settings) {
        /// 3. Listen to incoming deeplink requests
        if (_deeplinkRpcServer.handleRoute(settings.name)) return;

        // ... do other route generation stuffs here.
        return null;
      },
    );
  }
}
Client - Sending requests and listening for responses
/// 1. Enable deeplinking for your application (https://docs.flutter.dev/development/ui/navigation/deep-linking)
/// It is necessary to receive responses.

/// 2. Declare the deeplink-rpc client
/// When a RPC call <scheme>://a_rpc_command/<payload> is received, the payload is decoded
/// and transmitted to the `handle` method.
final _deeplinkRpcClient = DeeplinkRpcClient();

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'DeeplinkRPC Demo',
      onGenerateRoute: (settings) {
        /// 3. Listen to incoming deeplink requests
        if (_deeplinkRpcClient.handleRoute(settings.name)) return;

        // ... do other route generation stuffs here.
        return null;
      },
      home: Scaffold(
        floatingActionButton: FloatingActionButton(
          child: const Icon(Icons.send),
          onPressed: () async {
            final response = await _deeplinkRpcClient.send(
              timeout: const Duration(seconds: 5),
              request: DeeplinkRpcRequest(
                requestUrl: 'serverapp://server.app/request_endpoint',
                replyUrl: 'clientapp://client.app/reply_endpoint',
                params: {
                  'param1': 'value1',
                  'param2': 'value2',
                },
              ),
            );

            response.map(
              failure: (failure) {
                log(
                  'RPC request failed',
                  error: failure,
                );
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(
                      content: Text(failure.message ?? "An error occured")),
                );
              },
              success: (result) {
                log(
                  'RPC request succeed : ${json.encode(result)}',
                );
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text(json.encode(result))),
                );
              },
            );
          },
        ),
        body: const SafeArea(
          child: Padding(
            padding: EdgeInsets.all(8.0),
            child: Center(
              child: Text('Client example'),
            ),
          ),
        ),
      ),
    );
  }
}

Kategorien

Abhängigkeiten

Abhängigkeiten 6 Einträge

Quell-Repository

Projekte, die dieses Paket verwenden