From 204255f3aeb04a7afe5aece784c8ae22ae271e3b Mon Sep 17 00:00:00 2001 From: bassant ehab Date: Thu, 4 Sep 2025 17:42:23 +0000 Subject: [PATCH 1/2] create fcm provider function --- Makefile | 3 ++ .../messaging/messages/createFcmProvider.cpp | 25 ++++++++++++++ include/classes/Messaging.hpp | 12 +++++++ src/services/Messaging.cpp | 33 ++++++++++++++++++- 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 examples/messaging/messages/createFcmProvider.cpp diff --git a/Makefile b/Makefile index b435495..3de9f01 100644 --- a/Makefile +++ b/Makefile @@ -254,6 +254,9 @@ getMessages: $(SRCS) $(EXAMPLES_DIR)/messaging/messages/getMessages.cpp createMessage: $(SRCS) $(EXAMPLES_DIR)/messaging/messages/createMessage.cpp @mkdir -p ./$(TESTS_DIR) $(CXX) $(CXXFLAGS) -o ./$(TESTS_DIR)/createMessage $(SRCS) $(EXAMPLES_DIR)/messaging/messages/createMessage.cpp $(LDFLAGS) +createFcmProvider: $(SRCS) $(EXAMPLES_DIR)/messaging/messages/createFcmProvider.cpp + @mkdir -p ./$(TESTS_DIR) + $(CXX) $(CXXFLAGS) -o ./$(TESTS_DIR)/createFcmProvider $(SRCS) $(EXAMPLES_DIR)/messaging/messages/createFcmProvider.cpp $(LDFLAGS) # Messaging - Topics getTopic: $(SRCS) $(EXAMPLES_DIR)/messaging/topics/getTopic.cpp diff --git a/examples/messaging/messages/createFcmProvider.cpp b/examples/messaging/messages/createFcmProvider.cpp new file mode 100644 index 0000000..5ce15e3 --- /dev/null +++ b/examples/messaging/messages/createFcmProvider.cpp @@ -0,0 +1,25 @@ +#include "Appwrite.hpp" +#include +#include +#include +#include +int main() { + std::string projectId = "68853010003a3f4fc106"; + std::string apiKey = ""; + std::string providerId = "68a22c7b00325882e4e5"; + std::string name = "ehab"; + std::ifstream file(""); + std::stringstream buffer; + buffer << file.rdbuf(); + std::string service_account_json = buffer.str(); + bool enabled = true; + try { + Messaging messaging(projectId, apiKey); + std::string response = messaging.createFcmProvider( + providerId, name, service_account_json, enabled); + std::cout << "provider Created!\nResponse: " << response << std::endl; + } catch (const AppwriteException &ex) { + std::cerr << "Exception: " << ex.what() << std::endl; + } + return 0; +} \ No newline at end of file diff --git a/include/classes/Messaging.hpp b/include/classes/Messaging.hpp index bc7c0bd..b19e9a2 100644 --- a/include/classes/Messaging.hpp +++ b/include/classes/Messaging.hpp @@ -174,6 +174,18 @@ class Messaging { const std::vector &topicId = {}, const std::vector &userId = {}); + /** + * @brief Create a new Firebase Cloud Messaging provider.. + * + * @param providerId A unique Id for the provider. + * @param name provider name. + * @param service_account_json FCM service account JSON.. + * @param enabled Whether the provider should be active immediately after creation. + * @return JSON response. + */ + std::string createFcmProvider(std::string &providerId, std::string name, + std::string service_account_json, + bool enabled); private: std::string projectId; ///< Project ID diff --git a/src/services/Messaging.cpp b/src/services/Messaging.cpp index 13b8916..35e293e 100644 --- a/src/services/Messaging.cpp +++ b/src/services/Messaging.cpp @@ -528,4 +528,35 @@ std::string Messaging::updatePush(const std::string &messageId, "Error updating push message. Status code: " + std::to_string(statusCode) + "\n\nResponse: " + response); } -} \ No newline at end of file +} + +std::string Messaging::createFcmProvider(std::string &providerId, + std::string name, + std::string service_account_json, + bool enabled) { + if (providerId.empty()) { + throw AppwriteException("Missing required parameter: 'providerId'"); + } + if (name.empty()) { + throw AppwriteException("Missing required parameter: 'name'"); + } + std::string url = Config::API_BASE_URL + "/messaging/providers/fcm"; + std::string payload = + R"({"providerId":")" + Utils::escapeJsonString(providerId) + + R"(","name":")" + Utils::escapeJsonString(name) + + R"(","serviceAccountJSON":)" + service_account_json + R"(,"enabled":)" + + (enabled ? "true" : "false") + R"(})"; + std::vector headers = Config::getHeaders(projectId); + headers.push_back("X-Appwrite-Key: " + apiKey); + headers.push_back("Content-Type: application/json"); + std::string response; + int statusCode = Utils::postRequest(url, payload, headers, response); + if (statusCode == HttpStatus::CREATED) { + return response; + } else { + throw AppwriteException("Error Creating fcm provider. Status code: " + + std::to_string(statusCode) + + "\n\nResponse: " + response); + } +} + From bedc859a7cc22fa24b81d5bbdd3a71c1f1c94fb4 Mon Sep 17 00:00:00 2001 From: bassant ehab saber esmail <85416647+basant20415@users.noreply.github.com> Date: Thu, 4 Sep 2025 14:58:57 +0000 Subject: [PATCH 2/2] Update createFcmProvider.cpp --- examples/messaging/messages/createFcmProvider.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/messaging/messages/createFcmProvider.cpp b/examples/messaging/messages/createFcmProvider.cpp index 5ce15e3..cfb4961 100644 --- a/examples/messaging/messages/createFcmProvider.cpp +++ b/examples/messaging/messages/createFcmProvider.cpp @@ -7,7 +7,7 @@ int main() { std::string projectId = "68853010003a3f4fc106"; std::string apiKey = ""; std::string providerId = "68a22c7b00325882e4e5"; - std::string name = "ehab"; + std::string name = ""; std::ifstream file(""); std::stringstream buffer; buffer << file.rdbuf(); @@ -17,9 +17,9 @@ int main() { Messaging messaging(projectId, apiKey); std::string response = messaging.createFcmProvider( providerId, name, service_account_json, enabled); - std::cout << "provider Created!\nResponse: " << response << std::endl; + std::cout << "FCM Provider Created!\nResponse: " << response << std::endl; } catch (const AppwriteException &ex) { std::cerr << "Exception: " << ex.what() << std::endl; } return 0; -} \ No newline at end of file +}