diff --git a/snippets/dart_snippets/lib/notification_plugin.dart b/snippets/dart_snippets/lib/notification_plugin.dart new file mode 100644 index 0000000..95ebbce --- /dev/null +++ b/snippets/dart_snippets/lib/notification_plugin.dart @@ -0,0 +1,55 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:dart_snippets/sdk_instance.dart'; +import 'package:flutter_breez_liquid/flutter_breez_liquid.dart'; +import 'package:flutter/foundation.dart'; +// ANCHOR: init-sdk-app-group +import 'package:app_group_directory/app_group_directory.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:path_provider/path_provider.dart'; + +const String appGroup = 'group.com.example.application'; +const String mnemonicKey = 'BREEZ_SDK_LIQUID_SEED_MNEMONIC'; + +Future initSdk() async { + // Read the mnemonic from secure storage using the app group + final FlutterSecureStorage storage = const FlutterSecureStorage( + iOptions: IOSOptions( + accessibility: KeychainAccessibility.first_unlock, + groupId: appGroup, + ), + ); + final String? mnemonic = await storage.read(key: mnemonicKey); + if (mnemonic == null) { + throw Exception('Mnemonic not found'); + } + + // Create the default config, providing your Breez API key + Config config = defaultConfig(network: LiquidNetwork.mainnet, breezApiKey: ""); + + // Set the working directory to the app group path + config = config.copyWith(workingDir: await getWorkingDir()); + + ConnectRequest connectRequest = ConnectRequest(mnemonic: mnemonic, config: config); + + await breezSDKLiquid.connect(req: connectRequest); +} + +Future getWorkingDir() async { + String path = ''; + if (defaultTargetPlatform == TargetPlatform.android) { + final Directory documentsDir = await getApplicationDocumentsDirectory(); + path = documentsDir.path; + } else if (defaultTargetPlatform == TargetPlatform.iOS) { + final Directory? sharedDirectory = await AppGroupDirectory.getAppGroupDirectory( + appGroup, + ); + if (sharedDirectory == null) { + throw Exception('Could not get shared directory'); + } + path = sharedDirectory.path; + } + return "$path/breezSdkLiquid"; +} +// ANCHOR_END: init-sdk-app-group diff --git a/snippets/dart_snippets/pubspec.lock b/snippets/dart_snippets/pubspec.lock index c5f043e..51a100c 100644 --- a/snippets/dart_snippets/pubspec.lock +++ b/snippets/dart_snippets/pubspec.lock @@ -17,6 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "7.4.5" + app_group_directory: + dependency: "direct main" + description: + name: app_group_directory + sha256: ad89800fd55133b46e1f6940ac6b974562f7fb6394c662c0f4422b90167f2416 + url: "https://pub.dev" + source: hosted + version: "2.0.0" args: dependency: transitive description: @@ -45,11 +53,11 @@ packages: dependency: "direct main" description: path: "." - ref: HEAD - resolved-ref: f5248578a28b591b142cf185d55fdf3b86971579 + ref: "v0.9.1" + resolved-ref: aea162366cfda2efeca6790b4d72816c3363885e url: "https://github.com/breez/breez-sdk-liquid-dart" source: git - version: "0.9.2-rc1" + version: "0.9.1" build_cli_annotations: dependency: transitive description: @@ -155,7 +163,7 @@ packages: source: hosted version: "7.0.1" flutter: - dependency: transitive + dependency: "direct main" description: flutter source: sdk version: "0.0.0" @@ -163,11 +171,11 @@ packages: dependency: "direct main" description: path: "." - ref: HEAD - resolved-ref: "5f4a675d6084e06e0e6659e6f783eecbfc92c58a" + ref: "v0.9.1" + resolved-ref: b2dd7a6f8f2e573b564e2804b43ddaef07045779 url: "https://github.com/breez/breez-sdk-liquid-flutter" source: git - version: "0.9.2-rc1" + version: "0.9.1" flutter_rust_bridge: dependency: transitive description: @@ -176,6 +184,59 @@ packages: url: "https://pub.dev" source: hosted version: "2.9.0" + flutter_secure_storage: + dependency: "direct main" + description: + name: flutter_secure_storage + sha256: de957362e046bc68da8dcf6c1d922cb8bdad8dd4979ec69480cf1a3c481abe8e + url: "https://pub.dev" + source: hosted + version: "6.1.0" + flutter_secure_storage_linux: + dependency: transitive + description: + name: flutter_secure_storage_linux + sha256: be76c1d24a97d0b98f8b54bce6b481a380a6590df992d0098f868ad54dc8f688 + url: "https://pub.dev" + source: hosted + version: "1.2.3" + flutter_secure_storage_macos: + dependency: transitive + description: + name: flutter_secure_storage_macos + sha256: "388f76fd0f093e7415a39ec4c169ae7cceeee6d9f9ba529d788a13f2be4de7bd" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + flutter_secure_storage_platform_interface: + dependency: transitive + description: + name: flutter_secure_storage_platform_interface + sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8 + url: "https://pub.dev" + source: hosted + version: "1.1.2" + flutter_secure_storage_web: + dependency: transitive + description: + name: flutter_secure_storage_web + sha256: f4ebff989b4f07b2656fb16b47852c0aab9fed9b4ec1c70103368337bc1886a9 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + flutter_secure_storage_windows: + dependency: transitive + description: + name: flutter_secure_storage_windows + sha256: ca89c8059cf439985aa83c59619b3674c7ef6cc2e86943d169a7369d6a69cab5 + url: "https://pub.dev" + source: hosted + version: "1.1.3" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" freezed_annotation: dependency: transitive description: @@ -228,10 +289,10 @@ packages: dependency: transitive description: name: js - sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.6.7" json_annotation: dependency: transitive description: @@ -312,6 +373,70 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 + url: "https://pub.dev" + source: hosted + version: "2.2.17" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" pool: dependency: transitive description: @@ -533,6 +658,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" yaml: dependency: transitive description: @@ -551,3 +684,4 @@ packages: version: "2.2.2" sdks: dart: ">=3.7.0 <4.0.0" + flutter: ">=3.27.0" diff --git a/snippets/dart_snippets/pubspec.yaml b/snippets/dart_snippets/pubspec.yaml index da2a79b..4b388a7 100644 --- a/snippets/dart_snippets/pubspec.yaml +++ b/snippets/dart_snippets/pubspec.yaml @@ -5,24 +5,30 @@ publish_to: 'none' environment: sdk: '>=3.0.0 <4.0.0' + flutter: ">=3.27.0" dependencies: + flutter: + sdk: flutter + flutter_secure_storage: ^6.0.0 + app_group_directory: ^2.0.0 + path_provider: ^2.0.0 breez_liquid: git: url: https://github.com/breez/breez-sdk-liquid-dart - tag: 0.9.0 + ref: v0.9.1 flutter_breez_liquid: git: url: https://github.com/breez/breez-sdk-liquid-flutter - tag: 0.9.0 + ref: v0.9.1 rxdart: ^0.28.0 dependency_overrides: # Comment out to use published packages - breez_liquid: - path: ./packages/breez-sdk-liquid-dart - flutter_breez_liquid: - path: ./packages/breez-sdk-liquid-flutter + #breez_liquid: + # path: ./packages/breez-sdk-liquid-dart + #flutter_breez_liquid: + # path: ./packages/breez-sdk-liquid-flutter # Enable overrides below to work with Liquid SDK packages locally #breez_liquid: # path: ../../../breez-sdk-liquid/packages/dart diff --git a/snippets/react-native/notification_plugin.ts b/snippets/react-native/notification_plugin.ts new file mode 100644 index 0000000..536999c --- /dev/null +++ b/snippets/react-native/notification_plugin.ts @@ -0,0 +1,36 @@ +import { + defaultConfig, + connect, + LiquidNetwork +} from '@breeztech/react-native-breez-sdk-liquid' +import { Platform } from 'react-native' + +// ANCHOR: init-sdk-app-group +import SecureStorage, { ACCESSIBLE } from 'react-native-secure-storage' +import * as RNFS from 'react-native-fs' + +const APP_GROUP = 'group.com.example.application' +const MNEMONIC_KEY = 'BREEZ_SDK_LIQUID_SEED_MNEMONIC' + +const initSdk = async () => { + // Read the mnemonic from secure storage using the app group + const mnemonic = await SecureStorage.getItem(MNEMONIC_KEY, { + accessGroup: APP_GROUP, + accessible: ACCESSIBLE.AFTER_FIRST_UNLOCK + }) + + // Create the default config, providing your Breez API key + const config = await defaultConfig( + LiquidNetwork.MAINNET, + '' + ) + + // Set the working directory to the app group path + if (Platform.OS === 'ios') { + const groupPath = await RNFS.pathForGroup(APP_GROUP) + config.workingDir = `${groupPath}/breezSdkLiquid` + } + + await connect({ mnemonic, config }) +} +// ANCHOR_END: init-sdk-app-group diff --git a/snippets/react-native/package.json b/snippets/react-native/package.json index 58b0013..d732aab 100644 --- a/snippets/react-native/package.json +++ b/snippets/react-native/package.json @@ -11,6 +11,8 @@ }, "dependencies": { "@breeztech/react-native-breez-sdk-liquid": "^0.9.0", + "react-native-fs": "^2.20.0", + "react-native-secure-storage": "https://github.com/breez/react-native-secure-storage", "react": "18.1.0", "react-native": "0.70.6" }, diff --git a/snippets/react-native/types/react-native-secure-storage.d.ts b/snippets/react-native/types/react-native-secure-storage.d.ts new file mode 100644 index 0000000..45584b2 --- /dev/null +++ b/snippets/react-native/types/react-native-secure-storage.d.ts @@ -0,0 +1 @@ +declare module 'react-native-secure-storage' diff --git a/snippets/react-native/yarn.lock b/snippets/react-native/yarn.lock index 417ad5c..56c0f0c 100644 --- a/snippets/react-native/yarn.lock +++ b/snippets/react-native/yarn.lock @@ -670,10 +670,10 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" -"@breeztech/react-native-breez-sdk-liquid@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@breeztech/react-native-breez-sdk-liquid/-/react-native-breez-sdk-liquid-0.8.0.tgz#73c871ee8794d72a67764c722401168ec0e027fe" - integrity sha512-d2njFVwsMPYOkmFFlZb/99v6/dgNa22ZrSMeM5T7G3SnJ0V4sHG5egENhsZwaXFSee4x/eOSMJd9zEgdYjKb8w== +"@breeztech/react-native-breez-sdk-liquid@^0.9.0": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@breeztech/react-native-breez-sdk-liquid/-/react-native-breez-sdk-liquid-0.9.1.tgz#c5c406f475267f607587f7713bda64fa8ca7ac16" + integrity sha512-A0HtzoOsV3PXo8uv2/NI1czyCRd/EznreyaCOlGTtt6WOIbACB7K7ZEWQO0O/1N3AP3pcdB39x/4a4vUgbsnyA== "@esbuild/android-arm64@0.18.20": version "0.18.20" @@ -1602,6 +1602,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base-64@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" + integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== + base64-js@^1.1.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" @@ -4321,11 +4326,23 @@ react-native-codegen@^0.70.6: jscodeshift "^0.14.0" nullthrows "^1.1.1" +react-native-fs@^2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/react-native-fs/-/react-native-fs-2.20.0.tgz#05a9362b473bfc0910772c0acbb73a78dbc810f6" + integrity sha512-VkTBzs7fIDUiy/XajOSNk0XazFE9l+QlMAce7lGuebZcag5CnjszB+u4BdqzwaQOdcYb5wsJIsqq4kxInIRpJQ== + dependencies: + base-64 "^0.1.0" + utf8 "^3.0.0" + react-native-gradle-plugin@^0.70.3: version "0.70.3" resolved "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz" integrity sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A== +"react-native-secure-storage@https://github.com/breez/react-native-secure-storage": + version "0.1.2" + resolved "https://github.com/breez/react-native-secure-storage#fc6a4da0974641d9eaadc845c64f90b9f676ebca" + react-native@0.70.6: version "0.70.6" resolved "https://registry.npmjs.org/react-native/-/react-native-0.70.6.tgz" @@ -5153,6 +5170,11 @@ use-sync-external-store@^1.0.0: resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" diff --git a/snippets/swift/BreezSDKExamples/Package.resolved b/snippets/swift/BreezSDKExamples/Package.resolved index 85f1c53..4abe30a 100644 --- a/snippets/swift/BreezSDKExamples/Package.resolved +++ b/snippets/swift/BreezSDKExamples/Package.resolved @@ -9,6 +9,15 @@ "version" : "0.9.0" } }, + { + "identity" : "keychainaccess", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kishikawakatsumi/KeychainAccess.git", + "state" : { + "revision" : "84e546727d66f1adc5439debad16270d0fdd04e7", + "version" : "4.2.2" + } + }, { "identity" : "swift-argument-parser", "kind" : "remoteSourceControl", diff --git a/snippets/swift/BreezSDKExamples/Package.swift b/snippets/swift/BreezSDKExamples/Package.swift index 444a942..853148f 100644 --- a/snippets/swift/BreezSDKExamples/Package.swift +++ b/snippets/swift/BreezSDKExamples/Package.swift @@ -7,6 +7,7 @@ let package = Package( name: "BreezSDKDocs", platforms: [.macOS("15.0")], dependencies: [ + .package(url: "https://github.com/kishikawakatsumi/KeychainAccess.git", from: "4.2.2"), .package(url: "https://github.com/apple/swift-argument-parser", from: "1.2.3"), .package(url: "https://github.com/breez/breez-sdk-liquid-swift", exact: "0.9.0") // To use a local version of breez-sdk-liquid, comment-out the above and un-comment: @@ -18,6 +19,7 @@ let package = Package( .executableTarget( name: "BreezSDKDocs", dependencies: [ + .product(name: "KeychainAccess", package: "KeychainAccess"), .product(name: "BreezSDKLiquid", package: "breez-sdk-liquid-swift"), // To use a local version of breez-sdk-liquid, comment-out the above and un-comment: // .product(name: "BreezSDKLiquid", package: "bindings-swift"), diff --git a/snippets/swift/BreezSDKExamples/Sources/NotificationPlugin.swift b/snippets/swift/BreezSDKExamples/Sources/NotificationPlugin.swift new file mode 100644 index 0000000..bd6d578 --- /dev/null +++ b/snippets/swift/BreezSDKExamples/Sources/NotificationPlugin.swift @@ -0,0 +1,32 @@ +import BreezSDKLiquid +import Foundation + +// ANCHOR: init-sdk-app-group +import KeychainAccess + +fileprivate let SERVICE = "com.example.application" +fileprivate let APP_GROUP = "group.com.example.application" +fileprivate let MNEMONIC_KEY = "BREEZ_SDK_LIQUID_SEED_MNEMONIC" + +func initSdk() throws -> BindingLiquidSdk? { + // Read the mnemonic from secure storage using the app group + let keychain = Keychain(service: SERVICE, accessGroup: APP_GROUP) + guard let mnemonic = try? keychain.getString(MNEMONIC_KEY) else { + return nil + } + + // Create the default config, providing your Breez API key + var config = try defaultConfig(network: LiquidNetwork.mainnet, breezApiKey: "") + + // Set the working directory to the app group path + config.workingDir = FileManager + .default.containerURL(forSecurityApplicationGroupIdentifier: APP_GROUP)! + .appendingPathComponent("breezSdkLiquid", isDirectory: true) + .path + + let connectRequest = ConnectRequest(config: config, mnemonic: mnemonic) + let sdk = try? connect(req: connectRequest) + + return sdk +} +// ANCHOR_END: init-sdk-app-group diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 2b7def2..bf1e58f 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -44,8 +44,9 @@ - [Setting up the foreground service](notifications/android_service.md) - [Adding the notification plugin](notifications/android_plugin.md) - [iOS](notifications/ios_setup.md) - - [Setting up the notification dervice extension](notifications/ios_service.md) + - [Setting up the notification service extension](notifications/ios_service.md) - [Adding the notification plugin](notifications/ios_plugin.md) + - [Configuring the main application](notifications/ios_connect.md) - [Advanced](notifications/advanced.md) - [Adding logging](notifications/logging.md) - [Changing default strings](notifications/changing_strings.md) diff --git a/src/notifications/android_plugin.md b/src/notifications/android_plugin.md index 9825e88..b685706 100644 --- a/src/notifications/android_plugin.md +++ b/src/notifications/android_plugin.md @@ -174,4 +174,4 @@ class ExampleForegroundService : ForegroundService() { ``` ## Reference implementation -For a complete reference, see how we implemented it in misty-breez wallet: [BreezFcmService.kt](https://github.com/breez/misty-breez/blob/main/android/app/src/main/kotlin/com/breez/liquid/l_breez/BreezFcmService.kt). \ No newline at end of file +For a complete reference, see how we implemented it in Misty Breez: [BreezFcmService.kt](https://github.com/breez/misty-breez/blob/main/android/app/src/main/kotlin/com/breez/liquid/l_breez/BreezFcmService.kt). \ No newline at end of file diff --git a/src/notifications/ios_connect.md b/src/notifications/ios_connect.md new file mode 100644 index 0000000..254948a --- /dev/null +++ b/src/notifications/ios_connect.md @@ -0,0 +1,34 @@ +# Configuring the main application + +Once you've integrated the Notification Plugin into your NotificationService target, you need to update the main application to use the same configuration as the Notification Plugin. As the application is now using a shared application group identifier for both the main and NotificationService targets, we need to use the app group when accessing the keychain and to configure a shared working directory for the SDK. + +**Note:** The mnemonic should also be stored to the same app group. + + +
Swift
+
+ +```swift,ignore +{{#include ../../snippets/swift/BreezSDKExamples/Sources/NotificationPlugin.swift:init-sdk-app-group}} +``` +
+ +
React Native
+
+ +```typescript +{{#include ../../snippets/react-native/notification_plugin.ts:init-sdk-app-group}} +``` +
+ +
Dart
+
+ +```dart,ignore +{{#include ../../snippets/dart_snippets/lib/notification_plugin.dart:init-sdk-app-group}} +``` +
+
+ +## Reference implementation +For a complete reference, see how we implemented it in Misty Breez: [Config.dart](https://github.com/breez/misty-breez/blob/main/packages/breez_sdk_liquid/lib/src/model/config.dart). \ No newline at end of file diff --git a/src/notifications/ios_plugin.md b/src/notifications/ios_plugin.md index 0c55226..8301923 100644 --- a/src/notifications/ios_plugin.md +++ b/src/notifications/ios_plugin.md @@ -21,7 +21,7 @@ This Swift file should implement the Notification Plugin's `SDKNotificationServi

Developer note

-When using the Notification Plugin on iOS, it is important to note that the Config workingDir needs to be set to the app group's shared directory in both the NotificationService target and in the main application target, whether that is a Swift, Flutter or React Native based application. +When using the Notification Plugin on iOS, it is important to note that the Config workingDir needs to be set to the app group's shared directory in both the NotificationService target and in the main application target, whether that is a Swift, Flutter or React Native based application. See Configuring the main application.

Developer note

@@ -73,4 +73,4 @@ class NotificationService: SDKNotificationService { ``` ## Reference implementation -For a complete reference, see how we implemented it in misty-breez wallet: [NotificationService.swift](https://github.com/breez/misty-breez/blob/main/ios/NotificationService/NotificationService.swift). \ No newline at end of file +For a complete reference, see how we implemented it in Misty Breez: [NotificationService.swift](https://github.com/breez/misty-breez/blob/main/ios/NotificationService/NotificationService.swift). \ No newline at end of file diff --git a/src/notifications/ios_setup.md b/src/notifications/ios_setup.md index 94cd112..a419765 100644 --- a/src/notifications/ios_setup.md +++ b/src/notifications/ios_setup.md @@ -5,3 +5,4 @@ In order to add the Notification Plugin to your iOS application, first you need ## Next steps - **[Setting up the Notification Service Extension](ios_service.md)** - **[Adding the Notification Plugin](ios_plugin.md)** +- **[Configuring the main application](ios_connect.md)**