Back

Push Notifications With Appwrite using FCM Provider

  • 1
  • Android
  • Flutter
  • Messaging
  • Cloud
Arif Qayoom
29 Aug, 2024, 09:27

I will share code in Parts Due to limits & I am not able to create any subscriber & Getting errors

TL;DR
Developers working with Flutter app using Appwrite and FCM for push notifications. Code initializes FCM and requests permission for iOS. Handles messages and allows subscribing to topics. Need help in creating a subscriber and facing errors. Solution involves carefully checking subscriber creation process and error handling.
Arif Qayoom
29 Aug, 2024, 09:28

( import 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:appwrite/appwrite.dart'; import 'package:appwrite/models.dart';

void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); runApp(MyApp()); }

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async { await Firebase.initializeApp(); print("Handling a background message: ${message.messageId}"); }

class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); }

)

Arif Qayoom
29 Aug, 2024, 09:29

class _MyAppState extends State<MyApp> { late Client client; late Messaging messaging; String? userId;

@override void initState() { super.initState(); _initializeAppwrite(); _initializeFCM(); _subscribeToTopic('66cc43930014666fb982'); }

void _initializeAppwrite() { client = Client() ..setEndpoint('https://cloud.appwrite.io/v1') ..setProject('643588ac5b13906fc980'); messaging = Messaging(client); }

Future<void> _loginAnonymously() async { try { final account = Account(client); final response = await account.createAnonymousSession(); userId = response.$id; print('User ID: $userId'); } catch (e) { print('Error logging in anonymously: $e'); } }

Arif Qayoom
29 Aug, 2024, 09:29

Future<void> _initializeFCM() async { FirebaseMessaging messaging = FirebaseMessaging.instance;

TypeScript
// Request permission for iOS
NotificationSettings settings = await messaging.requestPermission(
  alert: true,
  badge: true,
  sound: true,
);

if (settings.authorizationStatus == AuthorizationStatus.authorized) {
  print('User granted permission');
} else if (settings.authorizationStatus == AuthorizationStatus.provisional) {
  print('User granted provisional permission');
} else {
  print('User declined or has not accepted permission');
}

// Get the token for this device
String? token = await messaging.getToken();
print("FCM Token: $token");

// Listen for messages
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  print('Received a message while in the foreground!');
  print('Message data: ${message.data}');

  if (message.notification != null) {
    print('Message also contained a notification: ${message.notification}');
  }
});

}

Future<void> _subscribeToTopic(String topicId) async { await _loginAnonymously();

TypeScript
if (userId != null) {
  try {
    await messaging.createSubscriber(
      topicId: topicId,
      subscriberId: userId!,
      targetId: 'your-target-id',
    );
    print('Subscribed to topic: $topicId');
  } catch (e) {
    print('Error subscribing to topic: $e');
  }
} else {
  print('Failed to obtain user ID');
}

}

@override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Appwrite Messaging with FCM'), ), body: Center( child: Text('Push Notifications Setup Complete'), ), ), ); } }

Reply

Reply to this thread by joining our Discord

Reply on Discord

Need support?

Join our Discord

Get community support by joining our Discord server.

Join Discord

Get premium support

Join Appwrite Pro and get email support from our team.

Learn more