From 6937c7d268168084c4203f69dd16140fcb963d45 Mon Sep 17 00:00:00 2001 From: Mustafa BOLEKEN Date: Fri, 31 May 2024 09:48:23 +0300 Subject: [PATCH 01/12] Create push-notification-management --- .../push-notification-management | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 docs/guides/developing-antmedia-server/push-notification-management diff --git a/docs/guides/developing-antmedia-server/push-notification-management b/docs/guides/developing-antmedia-server/push-notification-management new file mode 100644 index 00000000..1b588b76 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management @@ -0,0 +1,8 @@ +--- +title: Push Notification Management +description: Push Notification Management Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 15 +--- + +# Push Notification Management From 3fd840955f7ae7f23aae79c5aba968ceef61cf54 Mon Sep 17 00:00:00 2001 From: Mustafa BOLEKEN Date: Fri, 31 May 2024 10:31:17 +0300 Subject: [PATCH 02/12] Update and rename push-notification-management to push-notification-management.md --- .../push-notification-management | 8 -------- .../push-notification-management.md | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 8 deletions(-) delete mode 100644 docs/guides/developing-antmedia-server/push-notification-management create mode 100644 docs/guides/developing-antmedia-server/push-notification-management.md diff --git a/docs/guides/developing-antmedia-server/push-notification-management b/docs/guides/developing-antmedia-server/push-notification-management deleted file mode 100644 index 1b588b76..00000000 --- a/docs/guides/developing-antmedia-server/push-notification-management +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Push Notification Management -description: Push Notification Management Tutorial -keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] -sidebar_position: 15 ---- - -# Push Notification Management diff --git a/docs/guides/developing-antmedia-server/push-notification-management.md b/docs/guides/developing-antmedia-server/push-notification-management.md new file mode 100644 index 00000000..197a7f29 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management.md @@ -0,0 +1,15 @@ +--- +title: Push Notification Management +description: Push Notification Management Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 15 +--- + +# Push Notification Management + +Push notifications enable you to send announcements or video/audio call notifications to all users or specific groups. This page details how to send and configure these notifications. + +## Prerequirements + +- If you want to use Firebase Cloud Messaging, you need to create a Firebase account and you need to install the Firebase SDK into your client applications. You can follow [the official documentation](https://firebase.google.com/docs/cloud-messaging). +- If you want to use Apple Push Notifications, you need to create an Apple Developer account and you need to follow [the official documentation](https://developer.apple.com/documentation/usernotifications). From 5c7a5259f2d68cfb111cf30b98c5690909ab5f2c Mon Sep 17 00:00:00 2001 From: Mustafa BOLEKEN Date: Fri, 31 May 2024 11:43:28 +0300 Subject: [PATCH 03/12] Add files via upload --- static/img/push-notification-settings.jpg | Bin 0 -> 111631 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/img/push-notification-settings.jpg diff --git a/static/img/push-notification-settings.jpg b/static/img/push-notification-settings.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9bfccdadffcd2bb88ed43fe7f6524a663a6b8e2 GIT binary patch literal 111631 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 Date: Fri, 31 May 2024 12:42:32 +0300 Subject: [PATCH 04/12] Update push-notification-management.md --- .../push-notification-management.md | 172 +++++++++++++++++- 1 file changed, 170 insertions(+), 2 deletions(-) diff --git a/docs/guides/developing-antmedia-server/push-notification-management.md b/docs/guides/developing-antmedia-server/push-notification-management.md index 197a7f29..66d815df 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management.md +++ b/docs/guides/developing-antmedia-server/push-notification-management.md @@ -11,5 +11,173 @@ Push notifications enable you to send announcements or video/audio call notifica ## Prerequirements -- If you want to use Firebase Cloud Messaging, you need to create a Firebase account and you need to install the Firebase SDK into your client applications. You can follow [the official documentation](https://firebase.google.com/docs/cloud-messaging). -- If you want to use Apple Push Notifications, you need to create an Apple Developer account and you need to follow [the official documentation](https://developer.apple.com/documentation/usernotifications). +- If you want to use Firebase Cloud Messaging (FCM), you need to create a Firebase account and you need to install the Firebase SDK into your client applications. You can follow [the official documentation](https://firebase.google.com/docs/cloud-messaging). +- If you want to use Apple Push Notifications (APN), you need to create an Apple Developer account and you need to follow [the official documentation](https://developer.apple.com/documentation/usernotifications). + +## Registering Services + +After you register FCM or APN, you will have the private key. You need to save it into the Ant Media Server. Open the management panel, select an application, and go to the application-level settings. You will see it in the push notification section. + +![](@site/static/img/push-notification-settings.jpg) + +## Authorization + +To protect the send push notification WebSocket message, you need to generate a subscriber authentication token with your Subscriber ID. You can call the [getSubscriberAuthenticationToken](https://antmedia.io/rest/#/default/getSubscriberAuthenticationToken) Rest API endpoint. We will call this token as authToken in the rest of the documentation. + +## FCM/APN Device/Registration Token + +You need to get a device/registration token for each client and store them in a secure place. We strongly recommend implementing a token timestamp in your code and your servers and updating this timestamp at regular intervals. You can check the [Firebase Cloud Message documentation](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) and [Apple Push Notification](https://developer.apple.com/documentation/usernotifications/registering-your-app-with-apns#Register-your-app-and-retrieve-your-apps-device-token) documentation to see how you can get a device/registration token for each client. + + + From de39aa76e0f9787d33fb9be3cd623a8d913fa638 Mon Sep 17 00:00:00 2001 From: Mustafa BOLEKEN Date: Fri, 31 May 2024 12:53:44 +0300 Subject: [PATCH 05/12] Add files via upload --- static/img/getting-fcm-token.jpg | Bin 0 -> 117206 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/img/getting-fcm-token.jpg diff --git a/static/img/getting-fcm-token.jpg b/static/img/getting-fcm-token.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8612687ccab4b2341ab950f68fd9af1fe90b15d GIT binary patch literal 117206 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 =MnlS-x{BanP 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ɠ?g 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 YLI~`xf6^P!&Rd{U@0>ls;nep30~y_|BLDyZ literal 0 HcmV?d00001 From a64bf2cef8453b86df19fac1a6ede36cf9e64880 Mon Sep 17 00:00:00 2001 From: Mustafa BOLEKEN Date: Fri, 31 May 2024 13:05:23 +0300 Subject: [PATCH 06/12] Add files via upload --- static/img/push-notification-received.jpg | Bin 0 -> 70368 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/img/push-notification-received.jpg diff --git a/static/img/push-notification-received.jpg b/static/img/push-notification-received.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9cf0fba398bd64d423d8c99ff95c17ccbf78939d GIT binary patch literal 70368 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 literal 0 HcmV?d00001 From f5e24205dcdb3df031d1d49b310aaad6a6c7dcf9 Mon Sep 17 00:00:00 2001 From: Mustafa BOLEKEN Date: Fri, 31 May 2024 13:11:58 +0300 Subject: [PATCH 07/12] Update push-notification-management.md --- .../push-notification-management.md | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/docs/guides/developing-antmedia-server/push-notification-management.md b/docs/guides/developing-antmedia-server/push-notification-management.md index 66d815df..d31f770c 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management.md +++ b/docs/guides/developing-antmedia-server/push-notification-management.md @@ -22,16 +22,16 @@ After you register FCM or APN, you will have the private key. You need to save i ## Authorization -To protect the send push notification WebSocket message, you need to generate a subscriber authentication token with your Subscriber ID. You can call the [getSubscriberAuthenticationToken](https://antmedia.io/rest/#/default/getSubscriberAuthenticationToken) Rest API endpoint. We will call this token as authToken in the rest of the documentation. +To protect the send push notification WebSocket message, you need to generate two subscriber authentication tokens with the sender's Subscriber ID and the receiver's Subscriber ID. You can call the [getSubscriberAuthenticationToken](https://antmedia.io/rest/#/default/getSubscriberAuthenticationToken) Rest API endpoint. We will call the sender's token as authToken in the rest of the documentation. We will call the sender's Subscriber ID as subscriberId and we will call the receiver's Subscriber ID as sendNotificationToSubscriber. ## FCM/APN Device/Registration Token -You need to get a device/registration token for each client and store them in a secure place. We strongly recommend implementing a token timestamp in your code and your servers and updating this timestamp at regular intervals. You can check the [Firebase Cloud Message documentation](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) and [Apple Push Notification](https://developer.apple.com/documentation/usernotifications/registering-your-app-with-apns#Register-your-app-and-retrieve-your-apps-device-token) documentation to see how you can get a device/registration token for each client. +You need to get a device/registration token for each client and store them in a secure place. We strongly recommend implementing a token timestamp in your code and your servers and updating this timestamp at regular intervals. You can check the [Firebase Cloud Message documentation](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) and [Apple Push Notification](https://developer.apple.com/documentation/usernotifications/registering-your-app-with-apns#Register-your-app-and-retrieve-your-apps-device-token) documentation to see how you can get a device/registration token for each client. We will call this token as pushNotificationToken in the rest of the documentation.
Getting FCM Registration Token Sample - - Connect your server and go to the /usr/local/antmedia/webapps path. + - Connect your server and go to the /usr/local/antmedia/webapps path. - Create fcm.html file and paste the code below @@ -178,6 +178,26 @@ const firebaseConfig = { ``` - Go to https://domain_name:port/fcm.html url using any browser. + - Open browser's developer console and you will see your FCM Registration Token + + ![](@site/static/img/getting-fcm-token.jpg)
+## Register Push Notification Token + +We need to register our push notification token into the Ant Media Server. You need to call the registerPushNotificationToken function. You have 2 options for the pushNotificationService which are "apn" or "fcm". + +```js +webRTCAdaptor.registerPushNotificationToken(subscriberId, authToken, pushNotificationToken, pushNotificationService); +``` + +## Send a push notification + +We are ready to send push notifications. You can send your push notifications through the Ant Media Server in a secure way. All you need to do is call the sendPushNotification function. + +```js +webRTCAdaptor.sendPushNotification(subscriberId, authToken, {"title":"This is a test message", "apn-topic":"io.antmedia.ios.webrtc.sample"}, [sendNotificationToSubscriber]); +``` + +![](@site/static/img/push-notification-received.jpg) From f882a52d17a6f1d436502e608999805a9913fff5 Mon Sep 17 00:00:00 2001 From: Mustafa BOLEKEN Date: Fri, 27 Sep 2024 10:23:46 +0300 Subject: [PATCH 08/12] Add sub category for the push notification management --- .../push-notification-management/_category_.json | 8 ++++++++ .../push-notification-management.md | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/_category_.json rename docs/guides/developing-antmedia-server/{ => push-notification-management}/push-notification-management.md (99%) diff --git a/docs/guides/developing-antmedia-server/push-notification-management/_category_.json b/docs/guides/developing-antmedia-server/push-notification-management/_category_.json new file mode 100644 index 00000000..946ce5e9 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Developer Guides", + "position": 15, + "link": { + "type": "generated-index", + "description": "Introduction to push notification management in Ant Media Server" + } +} diff --git a/docs/guides/developing-antmedia-server/push-notification-management.md b/docs/guides/developing-antmedia-server/push-notification-management/push-notification-management.md similarity index 99% rename from docs/guides/developing-antmedia-server/push-notification-management.md rename to docs/guides/developing-antmedia-server/push-notification-management/push-notification-management.md index d31f770c..65be6419 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/push-notification-management.md @@ -2,7 +2,7 @@ title: Push Notification Management description: Push Notification Management Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] -sidebar_position: 15 +sidebar_position: 1 --- # Push Notification Management From 9a3b39a63e31c771d66a75ff32bfead8f89c16a0 Mon Sep 17 00:00:00 2001 From: Mustafa BOLEKEN Date: Fri, 11 Oct 2024 09:18:38 +0300 Subject: [PATCH 09/12] Add push notification Android Guides --- .../Android SDK/_category_.json | 8 + .../Android SDK/configure-ant-media-server.md | 14 + .../Android SDK/configure-manifest.md | 21 + .../Android SDK/create-android-project.md | 21 + .../Android SDK/create-required-classes.md | 384 ++++++++++++++++++ .../Android SDK/dependency.md | 89 ++++ .../sending-notification-in-android.md | 203 +++++++++ .../Android SDK/sending-notification.md | 10 + .../Android SDK/setting-up-firebase.md | 18 + .../iOS SDK/_category_.json | 8 + .../iOS SDK/sending-notification-in-ios.md | 203 +++++++++ static/img/fcm.jpg | Bin 0 -> 104564 bytes 12 files changed, 979 insertions(+) create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/Android SDK/_category_.json create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-ant-media-server.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-manifest.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-android-project.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-required-classes.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/Android SDK/dependency.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification-in-android.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/Android SDK/setting-up-firebase.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/_category_.json create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification-in-ios.md create mode 100644 static/img/fcm.jpg diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/_category_.json b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/_category_.json new file mode 100644 index 00000000..0353653c --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Push Notification Management in Ant Media Server Android SDK", + "position": 2, + "link": { + "type": "generated-index", + "description": "Introduction to push notification management in Ant Media Server Android SDK" + } +} diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-ant-media-server.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-ant-media-server.md new file mode 100644 index 00000000..ff19e951 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-ant-media-server.md @@ -0,0 +1,14 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 6 +--- + +# Configure Ant Media Server: + +After you register FCM or APN, you will have the private key. You need to save it into the Ant Media Server. Open the management panel, select an application, and go to the application-level settings. You will see it in the push notification section. + +![](@site/static/img/push-notification-settings.jpg) + +To protect the send push notification WebSocket message, you need to generate two subscriber authentication tokens with the sender’s Subscriber ID and the receiver’s Subscriber ID. You can call the [getSubscriberAuthenticationToken](https://antmedia.io/rest/#/default/getSubscriberAuthenticationToken) Rest API endpoint. We will call the sender’s token as authToken in the rest of the documentation. We will call the sender’s Subscriber ID as subscriberId and we will call the receiver’s Subscriber ID as sendNotificationToSubscriber. diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-manifest.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-manifest.md new file mode 100644 index 00000000..4489faf5 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-manifest.md @@ -0,0 +1,21 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 4 +--- + +# Configure AndroidManifest.xml: + +- Open your AndroidManifest.xml file. +- Add the necessary permissions and service declarations: + +```xml + + + + + +``` \ No newline at end of file diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-android-project.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-android-project.md new file mode 100644 index 00000000..1cdac104 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-android-project.md @@ -0,0 +1,21 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 2 +--- + +## Step 2: Create an Android App Project in Android Studio + +- Open Android Studio and create a new project with No Activity. + +![](@site/static/img/sdk-integration/android-sdk/android-new-project-page.png) + +- Select No Activity and then click Next. + +![](@site/static/img/sdk-integration/android-sdk/android-project-naming-screen.png) + +- Give your application a name, and then click Finish. We will call it + `MyWebRTCStreamingApp`. + +Congratulations! You have successfully created your WebRTC Android SDK application project. diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-required-classes.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-required-classes.md new file mode 100644 index 00000000..86bd01cf --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-required-classes.md @@ -0,0 +1,384 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 5 +--- + +# Create Required Classes: + +Create the following classes in your Android project: + +## Ant Media Firebase Messaging Service + +Create AntMediaFirebaseMessagingService to handle incoming messages and registration token updates using FirebaseMessagingService: + +```java +public class AntMediaFirebaseMessagingService extends FirebaseMessagingService { + + private static final String TAG = "AntMediaFMS"; + + public static String fcmToken = ""; + + @Override + public void onMessageReceived(RemoteMessage remoteMessage) { + Log.d(TAG, "From: " + remoteMessage.getFrom()); + + // Check if message contains a notification payload. + if (remoteMessage.getNotification() != null) { + Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); + } + + // show call notification + NotificationHelper.showCallNotification(this); + } + + /** + * There are two scenarios when onNewToken is called: + * 1) When a new token is generated on initial app startup + * 2) Whenever an existing token is changed + * Under #2, there are three scenarios when the existing token is changed: + * A) App is restored to a new device + * B) User uninstalls/reinstalls the app + * C) User clears app data + */ + @Override + public void onNewToken(@NonNull String token) { + Log.d(TAG, "Refreshed token: " + token); + + fcmToken = token; + } +} + +``` + +## Accept Call Receiver + +The AcceptCallReceiver class extends BroadcastReceiver and is responsible for handling the user’s action when they accept an incoming call from the notification. When the “Accept” button is tapped on the notification, this receiver is triggered to manage the acceptance of the call and transition the user to the appropriate in-call activity. + +```java +public class AcceptCallReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + Toast.makeText(context, "Call accepted.", Toast.LENGTH_SHORT).show(); + + NotificationHelper.dismissCallNotification(context); + + /* + Bundle extras = intent.getExtras(); + if (extras != null) { + startActivityIntent.putExtras(extras); + } + */ + + PeerForNotificationActivity.streamId = "streamId"; + + Intent callIntent = new Intent(context, PeerForNotificationActivity.class); + callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(callIntent); + } +} +``` + +## Decline Call Receiver + +The DeclineCallReceiver class extends BroadcastReceiver and is responsible for managing the user’s action when they choose to decline an incoming call from the notification. This class listens for the broadcast triggered by the “Decline” button in the notification and performs the necessary operations to handle the declined call. + +```java +public class DeclineCallReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + Toast.makeText(context, "Call declined.", Toast.LENGTH_SHORT).show(); + + NotificationHelper.dismissCallNotification(context); + + Intent callIntent = new Intent(context, MainActivity.class); + callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(callIntent); + } +} +``` + +## Notification Helper + +The NotificationHelper class is a utility designed to display and manage incoming call notifications in a WebRTC-based application. It leverages the Android Notification API to create a highly interactive and user-friendly call notification with actions like accepting or declining the call. + +```java + +public class NotificationHelper { + + private static NotificationManager notificationManager = null; + + private static String callerName = "John Doe"; + + private static String roomName = "Room 1"; + + public static void setCallerName(String name) { + callerName = name; + } + + public static void setRoomName(String name) { + roomName = name; + } + + public static void showCallNotification(Context context) { + notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + String channelId = "call_notifications"; + String channelName = "Call Notifications"; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH); + notificationManager.createNotificationChannel(channel); + } + + // Intent for the accept action + Intent acceptIntent = new Intent(context, AcceptCallReceiver.class); + PendingIntent acceptPendingIntent = PendingIntent.getBroadcast(context, 0, acceptIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + + // Intent for the decline action + Intent declineIntent = new Intent(context, DeclineCallReceiver.class); + PendingIntent declinePendingIntent = PendingIntent.getBroadcast(context, 0, declineIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId) + .setSmallIcon(R.drawable.ic_loopback_call) + .setContentTitle("Incoming Call") + .setContentText(callerName+" is calling...") + .setPriority(NotificationCompat.PRIORITY_HIGH) + .setCategory(NotificationCompat.CATEGORY_CALL) + .addAction(R.drawable.ic_loopback_call, "Answer", acceptPendingIntent) + .addAction(R.drawable.disconnect, "Decline", declinePendingIntent); + + notificationManager.notify(1, builder.build()); + } + + public static void dismissCallNotification(Context context) { + if (notificationManager != null) { + notificationManager.cancel(1); + } + } +} +``` + +## Call Notification Activity + +The CallNotificationActivity class demonstrates how to integrate WebRTC functionality with push notifications using Firebase Cloud Messaging (FCM). It manages WebRTC calls while ensuring that both the caller and receiver are notified about call events through push notifications. The use of permissions for Android Tiramisu (API level 33) ensures compatibility with newer Android versions, making the application ready for broader device support. + +```java +public class CallNotificationActivity extends ComponentActivity { + + String streamId; + + String subscriberId; + + String receiverSubscriberId; + + String authToken; + + String pushNotificationToken; + + String tokenType; + + JSONObject pushNotificationContent; + + JSONArray receiverSubscriberIdArray; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_simple_publish); + + FirebaseApp.initializeApp(this); + + SharedPreferences sharedPreferences = + PreferenceManager.getDefaultSharedPreferences(this); + + //FirebaseMessaging.getInstance().setAutoInitEnabled(true); + + SurfaceViewRenderer fullScreenRenderer = findViewById(R.id.full_screen_renderer); + String serverUrl = sharedPreferences.getString(getString(R.string.serverAddress), SettingsActivity.DEFAULT_WEBSOCKET_URL); + + IWebRTCClient webRTCClient = IWebRTCClient.builder() + .setActivity(this) + .setInitiateBeforeStream(true) + .setWebRTCListener(createWebRTCListener()) + .setLocalVideoRenderer(fullScreenRenderer) + .setServerUrl(serverUrl) + .build(); + + streamId = "streamId" + (int)(Math.random()*9999); + + PeerForNotificationActivity.streamId = streamId; + + //Define the subscriberId and it can be any subscriber Id + subscriberId = "test1@antmedia.io"; + + //Define the receiverSubscriberId and it can be any subscriber Id + receiverSubscriberId = "test2@antmedia.io"; + + //Get auth token for Ant Media Server to authenticate the user. + //it's JWT token generated with Subscription Authentication Key(subscriptionAuthenticationKey) in Application settings with subscriberId claim and it's value. + //PushNotificationRestService can also be used to generate the authToken + authToken = ""; + + pushNotificationToken = AntMediaFirebaseMessagingService.fcmToken; + + tokenType = "fcm"; + + pushNotificationContent = new JSONObject(); + receiverSubscriberIdArray = new JSONArray(); + + try { + pushNotificationContent.put("Caller", subscriberId); + pushNotificationContent.put("StreamId", streamId); + receiverSubscriberIdArray.put(receiverSubscriberId); + } catch (JSONException e) { + throw new RuntimeException(e); + } + + + askNotificationPermission(); + } + + private IWebRTCListener createWebRTCListener() { + return new DefaultWebRTCListener() { + @Override + public void onWebSocketConnected() { + super.onWebSocketConnected(); + webRTCClient.registerPushNotificationToken(subscriberId, authToken, pushNotificationToken, tokenType); + webRTCClient.sendPushNotification(subscriberId, authToken, pushNotificationContent, receiverSubscriberIdArray + ); + } + + }; + } + + // [START ask_post_notifications] + // Declare the launcher at the top of your Activity/Fragment: + private final ActivityResultLauncher requestPermissionLauncher = + registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> { + if (isGranted) { + // FCM SDK (and your app) can post notifications. + } else { + // TODO: Inform user that that your app will not show notifications. + } + }); + + private void askNotificationPermission() { + // This is only necessary for API level >= 33 (TIRAMISU) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == + PackageManager.PERMISSION_GRANTED) { + // FCM SDK (and your app) can post notifications. + } else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) { + // TODO: display an educational UI explaining to the user the features that will be enabled + // by them granting the POST_NOTIFICATION permission. This UI should provide the user + // "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission. + // If the user selects "No thanks," allow the user to continue without notifications. + } else { + // Directly ask for the permission + requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS); + } + } + } +} +``` + +## Peer For Notification Activity + +The PeerForNotificationActivity class handles both video streaming and peer-to-peer communication via WebRTC. It also demonstrates how to manage real-time notifications using data channels, providing a complete solution for WebRTC applications with user interaction. + +```java +public class PeerForNotificationActivity extends TestableActivity { + +private TextView broadcastingTextView; +public static String streamId; +private IWebRTCClient webRTCClient; + +@RequiresApi(api = Build.VERSION_CODES.M) +@Override +protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_peer_for_notification); + + SurfaceViewRenderer fullScreenRenderer = findViewById(R.id.full_screen_renderer); + SurfaceViewRenderer pipRenderer = findViewById(R.id.pip_view_renderer); + + broadcastingTextView = findViewById(R.id.broadcasting_text_view); + + String serverUrl = sharedPreferences.getString(getString(R.string.serverAddress), SettingsActivity.DEFAULT_WEBSOCKET_URL); + + webRTCClient = IWebRTCClient.builder() + .setLocalVideoRenderer(pipRenderer) + .addRemoteVideoRenderer(fullScreenRenderer) + .setServerUrl(serverUrl) + .setActivity(this) + .setWebRTCListener(createWebRTCListener()) + .setDataChannelObserver(createDatachannelObserver()) + .build(); + + Log.i(getClass().getSimpleName(), "Calling play start"); + webRTCClient.join(streamId); +} + +private IDataChannelObserver createDatachannelObserver() { + return new DefaultDataChannelObserver() { + @Override + public void textMessageReceived(String messageText) { + super.textMessageReceived(messageText); + Toast.makeText(PeerForNotificationActivity.this, "Message received: " + messageText, Toast.LENGTH_SHORT).show(); + } + }; +} + +private IWebRTCListener createWebRTCListener() { + return new DefaultWebRTCListener() { + @Override + public void onPlayStarted(String streamId) { + super.onPlayStarted(streamId); + broadcastingTextView.setVisibility(View.VISIBLE); + decrementIdle(); + } + + @Override + public void onPlayFinished(String streamId) { + super.onPlayFinished(streamId); + broadcastingTextView.setVisibility(View.GONE); + decrementIdle(); + } + }; +} + +public void sendTextMessage(String messageToSend) { + final ByteBuffer buffer = ByteBuffer.wrap(messageToSend.getBytes(StandardCharsets.UTF_8)); + DataChannel.Buffer buf = new DataChannel.Buffer(buffer, false); + webRTCClient.sendMessageViaDataChannel(streamId, buf); +} + +public void showSendDataChannelMessageDialog(View view) { + if (webRTCClient != null && webRTCClient.isDataChannelEnabled()) { + // create an alert builder + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("Send Message via Data Channel"); + // set the custom layout + final View customLayout = getLayoutInflater().inflate(R.layout.send_message_data_channel, null); + builder.setView(customLayout); + // add a button + builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // send data from the AlertDialog to the Activity + EditText editText = customLayout.findViewById(R.id.message_text_input); + sendTextMessage(editText.getText().toString()); + } + }); + // create and show the alert dialog + AlertDialog dialog = builder.create(); + dialog.show(); + } + else { + Toast.makeText(this, R.string.data_channel_not_available, Toast.LENGTH_LONG).show(); + } +} +``` diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/dependency.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/dependency.md new file mode 100644 index 00000000..464c333d --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/dependency.md @@ -0,0 +1,89 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 3 +--- + +## Step 3: Add WebRTC-Android-SDK Dependency + +There are two methods for integrating the Android SDK into our Android app project. The first, and simpler, approach involves importing it via the Sonatype Maven repository. The advantage of this method lies in its ease of implementation. However, it's crucial to note that opting for this method means you won't have the flexibility to modify WebRTC Android SDK files to suit your application requirements. + +Alternatively, the second method entails importing the Android SDK as a module. Opting for this approach grants you the ability to edit Android SDK class files as per your specific needs. + +### Add WebRTC-Android-SDK From Maven Repo (Easy) + +- At this point, we should add the dependency on the WebRTC Android SDK module to our newly created project. Since the module is hosted in the Sonatype Maven repository, we will add that repository to the dependency manager. The related setting is in the `settings.gradle` file. + + Add the following lines to the `dependencyResolutionManagement/repositories section`: + + ```java + maven { + url "https://oss.sonatype.org/content/repositories/snapshots/" } + ``` + +![](@site/static/img/sdk-integration/android-sdk/settings.gradle.png) + +- After adding the repository, we will add the following lines to the dependencies session in the app `build.gradle` file. + +```java + implementation "io.antmedia:webrtc-android-framework:{version}" +``` + +- Replace version with the latest android sdk version released on maven. You can see all released versions [here](https://mvnrepository.com/artifact/io.antmedia/webrtc-android-framework). + + For Example: + + ```java + implementation "io.antmedia:webrtc-android-framework:2.11.0" + ``` + +![](@site/static/img/sdk-integration/android-sdk/build.gradle.png) + +That is all. We have added the dependency and we are ready to create our WebRTC streaming application. + + +### Add WebRTC-Android-SDK As a Module (Advanced) + +- Clone WebRTC-Android-SDK repository to your local. + + ``` + git clone https://github.com/ant-media/WebRTC-Android-SDK.git + ``` + +- Open your android project with Android Studio. From left top corner, click `File > New > Import Module` to import. + +- Open WebRTC-Android-SDK and choose `webrtc-android-framework` from your file system. + +![](@site/static/img/sdk-integration/android-sdk/android-sdk-as-module-1.png) + +- After clicking Finish, you will face with 2 errors as below: + +![](@site/static/img/sdk-integration/android-sdk/android-sdk-as-module-2.png) + +- To fix those errors, remove `publish-remote.gradle` file from `webrtc-android-framework module`. + + After removing, go to `build.gradle` file of `webrtc-android-framework` module and remove below line. + + ```java + apply from: 'publish-remote.gradle' + ``` + + Then, go to your app project's `build.gradle` file and add below line to the dependencies. + + ```java + api project(":webrtc-android-framework") + ``` + +- Finally, sync gradle and it should be all done. + +You can now navigate to your application module and begin developing your streaming application. If needed, you can edit any of the Android SDK files within the `webrtc-android-framework`, and your changes will be applied. + +### Add Firebase Cloud Messaging Dependency: + +- Open your app-level build.gradle file. +- Add the Firebase Cloud Messaging dependency: + + ```java + implementation 'com.google.firebase:firebase-messaging:23.0.0' + ``` \ No newline at end of file diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification-in-android.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification-in-android.md new file mode 100644 index 00000000..5111a7e6 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification-in-android.md @@ -0,0 +1,203 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 61 +--- + +# Push Notification Management + +Push notifications enable you to send announcements or video/audio call notifications to all users or specific groups. This page details how to send and configure these notifications. + +## Prerequirements + +- If you want to use Firebase Cloud Messaging (FCM), you need to create a Firebase account and you need to install the Firebase SDK into your client applications. You can follow [the official documentation](https://firebase.google.com/docs/cloud-messaging). +- If you want to use Apple Push Notifications (APN), you need to create an Apple Developer account and you need to follow [the official documentation](https://developer.apple.com/documentation/usernotifications). + +## Registering Services + +After you register FCM or APN, you will have the private key. You need to save it into the Ant Media Server. Open the management panel, select an application, and go to the application-level settings. You will see it in the push notification section. + +![](@site/static/img/push-notification-settings.jpg) + +## Authorization + +To protect the send push notification WebSocket message, you need to generate two subscriber authentication tokens with the sender's Subscriber ID and the receiver's Subscriber ID. You can call the [getSubscriberAuthenticationToken](https://antmedia.io/rest/#/default/getSubscriberAuthenticationToken) Rest API endpoint. We will call the sender's token as authToken in the rest of the documentation. We will call the sender's Subscriber ID as subscriberId and we will call the receiver's Subscriber ID as sendNotificationToSubscriber. + +## FCM/APN Device/Registration Token + +You need to get a device/registration token for each client and store them in a secure place. We strongly recommend implementing a token timestamp in your code and your servers and updating this timestamp at regular intervals. You can check the [Firebase Cloud Message documentation](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) and [Apple Push Notification](https://developer.apple.com/documentation/usernotifications/registering-your-app-with-apns#Register-your-app-and-retrieve-your-apps-device-token) documentation to see how you can get a device/registration token for each client. We will call this token as pushNotificationToken in the rest of the documentation. + +
+ Getting FCM Registration Token Sample + + - Connect your server and go to the /usr/local/antmedia/webapps path. + + - Create fcm.html file and paste the code below + + ```html + + + + + WebRTC Samples > Publish + + + + + + + +
+
+
+

WebRTC Samples > WebRTC Publish

+
+
+ + + + +
+ + + + + + ``` + + + - Create firebase-messaging-sw.js file and paste the code below + + + ```js + importScripts('https://www.gstatic.com/firebasejs/10.8.0/firebase-app-compat.js'); +importScripts('https://www.gstatic.com/firebasejs/10.8.0/firebase-messaging-compat.js'); + + + +// Retrieve an instance of Firebase Messaging so that it can handle background +// messages. + +const firebaseConfig = { + apiKey: "AIzaSyBlWNhAbl1tIDCcWmDyk3yQ0rq0q-h_jrE", + authDomain: "push-notification-d0a87.firebaseapp.com", + projectId: "push-notification-d0a87", + storageBucket: "push-notification-d0a87.appspot.com", + messagingSenderId: "790648424032", + appId: "1:790648424032:web:2dfe62f14401f80b652505" + }; + + // Initialize Firebase + const app = firebase.initializeApp(firebaseConfig); + const messaging = firebase.messaging(); + + messaging.onBackgroundMessage((payload) => { + console.log('[firebase-messaging-sw.js] Received background message ', payload); + // Customize notification here + const notificationTitle = 'Background Message Title'; + const notificationOptions = { + body: 'Background Message body.', + icon: '/firebase-logo.png' + }; + + self.registration.showNotification(notificationTitle, + notificationOptions); + }); + ``` + + - Go to https://domain_name:port/fcm.html url using any browser. + + - Open browser's developer console and you will see your FCM Registration Token + + ![](@site/static/img/getting-fcm-token.jpg) +
+ +## Register Push Notification Token + +We need to register our push notification token into the Ant Media Server. You need to call the registerPushNotificationToken function. You have 2 options for the pushNotificationService which are "apn" or "fcm". + +```js +webRTCAdaptor.registerPushNotificationToken(subscriberId, authToken, pushNotificationToken, pushNotificationService); +``` + +## Send a push notification + +We are ready to send push notifications. You can send your push notifications through the Ant Media Server in a secure way. All you need to do is call the sendPushNotification function. + +```js +webRTCAdaptor.sendPushNotification(subscriberId, authToken, {"title":"This is a test message", "apn-topic":"io.antmedia.ios.webrtc.sample"}, [sendNotificationToSubscriber]); +``` + +![](@site/static/img/push-notification-received.jpg) diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md new file mode 100644 index 00000000..11745cbe --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md @@ -0,0 +1,10 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 7 +--- + +# Sending Notifications to Web and Mobile Clients: + +We are ready to send push notifications. You can send your push notifications through the Ant Media Server in a secure way. All you need to do is call the sendPushNotification function. diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/setting-up-firebase.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/setting-up-firebase.md new file mode 100644 index 00000000..4d7b8902 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/setting-up-firebase.md @@ -0,0 +1,18 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 1 +--- + +## Step 1: Setting Up Firebase Project + +Before integrating Firebase Cloud Messaging (FCM) into your Android app, you need to set up a Firebase project: + +### Create a Firebase Project: +- Go to the Firebase Console. +- Follow the setup wizard to create a new Firebase project. +- Once created, download the google-services.json file and place it in the app directory of your Android project. +- Add Cloud Messaging to your project via Firebase Console. + +![](@site/static/img/fcm.jpg) \ No newline at end of file diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/_category_.json b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/_category_.json new file mode 100644 index 00000000..c1b04a01 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Push Notification Management in Ant Media Server iOS SDK", + "position": 3, + "link": { + "type": "generated-index", + "description": "Introduction to push notification management in Ant Media Server iOS SDK" + } +} diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification-in-ios.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification-in-ios.md new file mode 100644 index 00000000..3091ef8a --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification-in-ios.md @@ -0,0 +1,203 @@ +--- +title: Sending Notification in iOS +description: Sending Notification in iOS Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 3 +--- + +# Push Notification Management + +Push notifications enable you to send announcements or video/audio call notifications to all users or specific groups. This page details how to send and configure these notifications. + +## Prerequirements + +- If you want to use Firebase Cloud Messaging (FCM), you need to create a Firebase account and you need to install the Firebase SDK into your client applications. You can follow [the official documentation](https://firebase.google.com/docs/cloud-messaging). +- If you want to use Apple Push Notifications (APN), you need to create an Apple Developer account and you need to follow [the official documentation](https://developer.apple.com/documentation/usernotifications). + +## Registering Services + +After you register FCM or APN, you will have the private key. You need to save it into the Ant Media Server. Open the management panel, select an application, and go to the application-level settings. You will see it in the push notification section. + +![](@site/static/img/push-notification-settings.jpg) + +## Authorization + +To protect the send push notification WebSocket message, you need to generate two subscriber authentication tokens with the sender's Subscriber ID and the receiver's Subscriber ID. You can call the [getSubscriberAuthenticationToken](https://antmedia.io/rest/#/default/getSubscriberAuthenticationToken) Rest API endpoint. We will call the sender's token as authToken in the rest of the documentation. We will call the sender's Subscriber ID as subscriberId and we will call the receiver's Subscriber ID as sendNotificationToSubscriber. + +## FCM/APN Device/Registration Token + +You need to get a device/registration token for each client and store them in a secure place. We strongly recommend implementing a token timestamp in your code and your servers and updating this timestamp at regular intervals. You can check the [Firebase Cloud Message documentation](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) and [Apple Push Notification](https://developer.apple.com/documentation/usernotifications/registering-your-app-with-apns#Register-your-app-and-retrieve-your-apps-device-token) documentation to see how you can get a device/registration token for each client. We will call this token as pushNotificationToken in the rest of the documentation. + +
+ Getting FCM Registration Token Sample + + - Connect your server and go to the /usr/local/antmedia/webapps path. + + - Create fcm.html file and paste the code below + + ```html + + + + + WebRTC Samples > Publish + + + + + + + +
+
+
+

WebRTC Samples > WebRTC Publish

+
+
+ + + + +
+ + + + + + ``` + + + - Create firebase-messaging-sw.js file and paste the code below + + + ```js + importScripts('https://www.gstatic.com/firebasejs/10.8.0/firebase-app-compat.js'); +importScripts('https://www.gstatic.com/firebasejs/10.8.0/firebase-messaging-compat.js'); + + + +// Retrieve an instance of Firebase Messaging so that it can handle background +// messages. + +const firebaseConfig = { + apiKey: "AIzaSyBlWNhAbl1tIDCcWmDyk3yQ0rq0q-h_jrE", + authDomain: "push-notification-d0a87.firebaseapp.com", + projectId: "push-notification-d0a87", + storageBucket: "push-notification-d0a87.appspot.com", + messagingSenderId: "790648424032", + appId: "1:790648424032:web:2dfe62f14401f80b652505" + }; + + // Initialize Firebase + const app = firebase.initializeApp(firebaseConfig); + const messaging = firebase.messaging(); + + messaging.onBackgroundMessage((payload) => { + console.log('[firebase-messaging-sw.js] Received background message ', payload); + // Customize notification here + const notificationTitle = 'Background Message Title'; + const notificationOptions = { + body: 'Background Message body.', + icon: '/firebase-logo.png' + }; + + self.registration.showNotification(notificationTitle, + notificationOptions); + }); + ``` + + - Go to https://domain_name:port/fcm.html url using any browser. + + - Open browser's developer console and you will see your FCM Registration Token + + ![](@site/static/img/getting-fcm-token.jpg) +
+ +## Register Push Notification Token + +We need to register our push notification token into the Ant Media Server. You need to call the registerPushNotificationToken function. You have 2 options for the pushNotificationService which are "apn" or "fcm". + +```js +webRTCAdaptor.registerPushNotificationToken(subscriberId, authToken, pushNotificationToken, pushNotificationService); +``` + +## Send a push notification + +We are ready to send push notifications. You can send your push notifications through the Ant Media Server in a secure way. All you need to do is call the sendPushNotification function. + +```js +webRTCAdaptor.sendPushNotification(subscriberId, authToken, {"title":"This is a test message", "apn-topic":"io.antmedia.ios.webrtc.sample"}, [sendNotificationToSubscriber]); +``` + +![](@site/static/img/push-notification-received.jpg) diff --git a/static/img/fcm.jpg b/static/img/fcm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93900a30973de45a850110d7d05192ba49889392 GIT binary patch literal 104564 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 qEF$ES9UvO4_%|$b#psa4)BmNX Date: Fri, 11 Oct 2024 09:35:42 +0300 Subject: [PATCH 10/12] Add pushnotification iOS documentation --- .../sending-notification-in-android.md | 203 ------------------ .../Android SDK/sending-notification.md | 13 ++ .../iOS SDK/configure-ant-media-server.md | 14 ++ .../iOS SDK/configure-your-ios-project.md | 83 +++++++ .../iOS SDK/prerequirements.md | 16 ++ .../iOS SDK/sending-notification-in-ios.md | 203 ------------------ .../iOS SDK/sending-notification.md | 23 ++ .../iOS SDK/setting-up-apn-certificates.md | 25 +++ 8 files changed, 174 insertions(+), 406 deletions(-) delete mode 100644 docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification-in-android.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-ant-media-server.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-your-ios-project.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/prerequirements.md delete mode 100644 docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification-in-ios.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification.md create mode 100644 docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/setting-up-apn-certificates.md diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification-in-android.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification-in-android.md deleted file mode 100644 index 5111a7e6..00000000 --- a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification-in-android.md +++ /dev/null @@ -1,203 +0,0 @@ ---- -title: Sending Notification in Android -description: Sending Notification in Android Tutorial -keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] -sidebar_position: 61 ---- - -# Push Notification Management - -Push notifications enable you to send announcements or video/audio call notifications to all users or specific groups. This page details how to send and configure these notifications. - -## Prerequirements - -- If you want to use Firebase Cloud Messaging (FCM), you need to create a Firebase account and you need to install the Firebase SDK into your client applications. You can follow [the official documentation](https://firebase.google.com/docs/cloud-messaging). -- If you want to use Apple Push Notifications (APN), you need to create an Apple Developer account and you need to follow [the official documentation](https://developer.apple.com/documentation/usernotifications). - -## Registering Services - -After you register FCM or APN, you will have the private key. You need to save it into the Ant Media Server. Open the management panel, select an application, and go to the application-level settings. You will see it in the push notification section. - -![](@site/static/img/push-notification-settings.jpg) - -## Authorization - -To protect the send push notification WebSocket message, you need to generate two subscriber authentication tokens with the sender's Subscriber ID and the receiver's Subscriber ID. You can call the [getSubscriberAuthenticationToken](https://antmedia.io/rest/#/default/getSubscriberAuthenticationToken) Rest API endpoint. We will call the sender's token as authToken in the rest of the documentation. We will call the sender's Subscriber ID as subscriberId and we will call the receiver's Subscriber ID as sendNotificationToSubscriber. - -## FCM/APN Device/Registration Token - -You need to get a device/registration token for each client and store them in a secure place. We strongly recommend implementing a token timestamp in your code and your servers and updating this timestamp at regular intervals. You can check the [Firebase Cloud Message documentation](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) and [Apple Push Notification](https://developer.apple.com/documentation/usernotifications/registering-your-app-with-apns#Register-your-app-and-retrieve-your-apps-device-token) documentation to see how you can get a device/registration token for each client. We will call this token as pushNotificationToken in the rest of the documentation. - -
- Getting FCM Registration Token Sample - - - Connect your server and go to the /usr/local/antmedia/webapps path. - - - Create fcm.html file and paste the code below - - ```html - - - - - WebRTC Samples > Publish - - - - - - - -
-
-
-

WebRTC Samples > WebRTC Publish

-
-
- - - - -
- - - - - - ``` - - - - Create firebase-messaging-sw.js file and paste the code below - - - ```js - importScripts('https://www.gstatic.com/firebasejs/10.8.0/firebase-app-compat.js'); -importScripts('https://www.gstatic.com/firebasejs/10.8.0/firebase-messaging-compat.js'); - - - -// Retrieve an instance of Firebase Messaging so that it can handle background -// messages. - -const firebaseConfig = { - apiKey: "AIzaSyBlWNhAbl1tIDCcWmDyk3yQ0rq0q-h_jrE", - authDomain: "push-notification-d0a87.firebaseapp.com", - projectId: "push-notification-d0a87", - storageBucket: "push-notification-d0a87.appspot.com", - messagingSenderId: "790648424032", - appId: "1:790648424032:web:2dfe62f14401f80b652505" - }; - - // Initialize Firebase - const app = firebase.initializeApp(firebaseConfig); - const messaging = firebase.messaging(); - - messaging.onBackgroundMessage((payload) => { - console.log('[firebase-messaging-sw.js] Received background message ', payload); - // Customize notification here - const notificationTitle = 'Background Message Title'; - const notificationOptions = { - body: 'Background Message body.', - icon: '/firebase-logo.png' - }; - - self.registration.showNotification(notificationTitle, - notificationOptions); - }); - ``` - - - Go to https://domain_name:port/fcm.html url using any browser. - - - Open browser's developer console and you will see your FCM Registration Token - - ![](@site/static/img/getting-fcm-token.jpg) -
- -## Register Push Notification Token - -We need to register our push notification token into the Ant Media Server. You need to call the registerPushNotificationToken function. You have 2 options for the pushNotificationService which are "apn" or "fcm". - -```js -webRTCAdaptor.registerPushNotificationToken(subscriberId, authToken, pushNotificationToken, pushNotificationService); -``` - -## Send a push notification - -We are ready to send push notifications. You can send your push notifications through the Ant Media Server in a secure way. All you need to do is call the sendPushNotification function. - -```js -webRTCAdaptor.sendPushNotification(subscriberId, authToken, {"title":"This is a test message", "apn-topic":"io.antmedia.ios.webrtc.sample"}, [sendNotificationToSubscriber]); -``` - -![](@site/static/img/push-notification-received.jpg) diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md index 11745cbe..5882dd3d 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md @@ -7,4 +7,17 @@ sidebar_position: 7 # Sending Notifications to Web and Mobile Clients: +## Send Test Notification from Firebase Console + +Once the Android app is set up, you can send a test push notification from the Firebase console to ensure everything is working properly. + +- Go to Firebase Console and navigate to the Cloud Messaging tab. +- Click on "Send your first message." +- Input the title and body of the notification. +- Select your Android app and click "Send." + +You should receive the notification on your device if everything is correctly configured. + +## Send Notification from Ant Media Server + We are ready to send push notifications. You can send your push notifications through the Ant Media Server in a secure way. All you need to do is call the sendPushNotification function. diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-ant-media-server.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-ant-media-server.md new file mode 100644 index 00000000..69261f95 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-ant-media-server.md @@ -0,0 +1,14 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 4 +--- + +# Configure Ant Media Server: + +After you register FCM or APN, you will have the private key. You need to save it into the Ant Media Server. Open the management panel, select an application, and go to the application-level settings. You will see it in the push notification section. + +![](@site/static/img/push-notification-settings.jpg) + +To protect the send push notification WebSocket message, you need to generate two subscriber authentication tokens with the sender’s Subscriber ID and the receiver’s Subscriber ID. You can call the [getSubscriberAuthenticationToken](https://antmedia.io/rest/#/default/getSubscriberAuthenticationToken) Rest API endpoint. We will call the sender’s token as authToken in the rest of the documentation. We will call the sender’s Subscriber ID as subscriberId and we will call the receiver’s Subscriber ID as sendNotificationToSubscriber. diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-your-ios-project.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-your-ios-project.md new file mode 100644 index 00000000..cfd51aad --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-your-ios-project.md @@ -0,0 +1,83 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 3 +--- + +# Step 2: Configure Your iOS Project in Xcode + +Next, set up your iOS app to handle FCM and APN push notifications. + +1) Install Firebase SDK: +- In your iOS project's Podfile, add the Firebase dependencies: + +```ruby +pod 'Firebase/Messaging' +``` + +- Run pod install to integrate Firebase Messaging into your app. + +2) Enable Push Notifications: + +- In Xcode, select your project in the Project Navigator. +- Under your app’s target, click on Signing & Capabilities. +- Add Push Notifications and Background Modes. Under Background Modes, check the "Remote notifications" option. + +3) Configure AppDelegate for Firebase: You need to initialize Firebase and handle APN registration within the AppDelegate. + +```swift +import UIKit +import Firebase +import FirebaseMessaging + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + FirebaseApp.configure() + + // Register for remote notifications + if #available(iOS 10.0, *) { + UNUserNotificationCenter.current().delegate = self + let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] + UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: { _, _ in }) + } else { + let settings: UIUserNotificationSettings = + UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) + application.registerUserNotificationSettings(settings) + } + + application.registerForRemoteNotifications() + Messaging.messaging().delegate = self + + return true + } + + func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + Messaging.messaging().apnsToken = deviceToken + } +} +``` + +4) Handle FCM Notifications: Create a delegate method to handle incoming messages from Firebase. + +```swift +extension AppDelegate: UNUserNotificationCenterDelegate, MessagingDelegate { + + // Receive displayed notifications for iOS 10 devices. + func userNotificationCenter(_ center: UNUserNotificationCenter, + willPresent notification: UNNotification, + withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { + completionHandler([.alert, .badge, .sound]) + } + + // Handle FCM token refresh. + func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { + print("FCM Token: \(fcmToken ?? "")") + // TODO: If necessary, send the token to your server. + } +} +``` \ No newline at end of file diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/prerequirements.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/prerequirements.md new file mode 100644 index 00000000..392cfa04 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/prerequirements.md @@ -0,0 +1,16 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 1 +--- + +## Pre-Requirements + +Before diving into the integration process, make sure you have the following: + +- An Apple Developer Account to configure APN. +- An iOS project created in Xcode. +- A Firebase account with a project already set up. +- Xcode 12 or later with Swift 5.0. +- A real iOS device for testing (simulators do not support push notifications). \ No newline at end of file diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification-in-ios.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification-in-ios.md deleted file mode 100644 index 3091ef8a..00000000 --- a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification-in-ios.md +++ /dev/null @@ -1,203 +0,0 @@ ---- -title: Sending Notification in iOS -description: Sending Notification in iOS Tutorial -keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] -sidebar_position: 3 ---- - -# Push Notification Management - -Push notifications enable you to send announcements or video/audio call notifications to all users or specific groups. This page details how to send and configure these notifications. - -## Prerequirements - -- If you want to use Firebase Cloud Messaging (FCM), you need to create a Firebase account and you need to install the Firebase SDK into your client applications. You can follow [the official documentation](https://firebase.google.com/docs/cloud-messaging). -- If you want to use Apple Push Notifications (APN), you need to create an Apple Developer account and you need to follow [the official documentation](https://developer.apple.com/documentation/usernotifications). - -## Registering Services - -After you register FCM or APN, you will have the private key. You need to save it into the Ant Media Server. Open the management panel, select an application, and go to the application-level settings. You will see it in the push notification section. - -![](@site/static/img/push-notification-settings.jpg) - -## Authorization - -To protect the send push notification WebSocket message, you need to generate two subscriber authentication tokens with the sender's Subscriber ID and the receiver's Subscriber ID. You can call the [getSubscriberAuthenticationToken](https://antmedia.io/rest/#/default/getSubscriberAuthenticationToken) Rest API endpoint. We will call the sender's token as authToken in the rest of the documentation. We will call the sender's Subscriber ID as subscriberId and we will call the receiver's Subscriber ID as sendNotificationToSubscriber. - -## FCM/APN Device/Registration Token - -You need to get a device/registration token for each client and store them in a secure place. We strongly recommend implementing a token timestamp in your code and your servers and updating this timestamp at regular intervals. You can check the [Firebase Cloud Message documentation](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) and [Apple Push Notification](https://developer.apple.com/documentation/usernotifications/registering-your-app-with-apns#Register-your-app-and-retrieve-your-apps-device-token) documentation to see how you can get a device/registration token for each client. We will call this token as pushNotificationToken in the rest of the documentation. - -
- Getting FCM Registration Token Sample - - - Connect your server and go to the /usr/local/antmedia/webapps path. - - - Create fcm.html file and paste the code below - - ```html - - - - - WebRTC Samples > Publish - - - - - - - -
-
-
-

WebRTC Samples > WebRTC Publish

-
-
- - - - -
- - - - - - ``` - - - - Create firebase-messaging-sw.js file and paste the code below - - - ```js - importScripts('https://www.gstatic.com/firebasejs/10.8.0/firebase-app-compat.js'); -importScripts('https://www.gstatic.com/firebasejs/10.8.0/firebase-messaging-compat.js'); - - - -// Retrieve an instance of Firebase Messaging so that it can handle background -// messages. - -const firebaseConfig = { - apiKey: "AIzaSyBlWNhAbl1tIDCcWmDyk3yQ0rq0q-h_jrE", - authDomain: "push-notification-d0a87.firebaseapp.com", - projectId: "push-notification-d0a87", - storageBucket: "push-notification-d0a87.appspot.com", - messagingSenderId: "790648424032", - appId: "1:790648424032:web:2dfe62f14401f80b652505" - }; - - // Initialize Firebase - const app = firebase.initializeApp(firebaseConfig); - const messaging = firebase.messaging(); - - messaging.onBackgroundMessage((payload) => { - console.log('[firebase-messaging-sw.js] Received background message ', payload); - // Customize notification here - const notificationTitle = 'Background Message Title'; - const notificationOptions = { - body: 'Background Message body.', - icon: '/firebase-logo.png' - }; - - self.registration.showNotification(notificationTitle, - notificationOptions); - }); - ``` - - - Go to https://domain_name:port/fcm.html url using any browser. - - - Open browser's developer console and you will see your FCM Registration Token - - ![](@site/static/img/getting-fcm-token.jpg) -
- -## Register Push Notification Token - -We need to register our push notification token into the Ant Media Server. You need to call the registerPushNotificationToken function. You have 2 options for the pushNotificationService which are "apn" or "fcm". - -```js -webRTCAdaptor.registerPushNotificationToken(subscriberId, authToken, pushNotificationToken, pushNotificationService); -``` - -## Send a push notification - -We are ready to send push notifications. You can send your push notifications through the Ant Media Server in a secure way. All you need to do is call the sendPushNotification function. - -```js -webRTCAdaptor.sendPushNotification(subscriberId, authToken, {"title":"This is a test message", "apn-topic":"io.antmedia.ios.webrtc.sample"}, [sendNotificationToSubscriber]); -``` - -![](@site/static/img/push-notification-received.jpg) diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification.md new file mode 100644 index 00000000..2218eab4 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification.md @@ -0,0 +1,23 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 5 +--- + +# Sending Notifications to Web and Mobile Clients: + +## Send Test Notification from Firebase Console + +Once the iOS app is set up, you can send a test push notification from the Firebase console to ensure everything is working properly. + +- Go to Firebase Console and navigate to the Cloud Messaging tab. +- Click on "Send your first message." +- Input the title and body of the notification. +- Select your iOS app and click "Send." + +You should receive the notification on your device if everything is correctly configured. + +## Send Notification from Ant Media Server + +We are ready to send push notifications. You can send your push notifications through the Ant Media Server in a secure way. All you need to do is call the sendPushNotification function. diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/setting-up-apn-certificates.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/setting-up-apn-certificates.md new file mode 100644 index 00000000..987df7d3 --- /dev/null +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/setting-up-apn-certificates.md @@ -0,0 +1,25 @@ +--- +title: Sending Notification in Android +description: Sending Notification in Android Tutorial +keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] +sidebar_position: 2 +--- + +## Step 1: Configure APN Certificates + +Before FCM can send notifications to your iOS app, you need to configure the APN certificates. + +## Generate an APN key: + +- Go to your Apple Developer Account. +- Select "Keys" and click the plus (+) button to create a new key. +- Enable Apple Push Notification service (APNs) and download the .p8 file once created. + +## Upload the APN key to Firebase: + +- Open the Firebase Console and navigate to your project. +- Go to Project Settings > Cloud Messaging tab. +- In the "iOS app configuration" section, upload the .p8 file you downloaded from Apple Developer. +- Provide the Key ID and the Team ID as shown on the Apple Developer account page. + +![](@site/static/img/fcm.jpg) \ No newline at end of file From d06a3c7dfa347840775cf5a6347ac5f762c83513 Mon Sep 17 00:00:00 2001 From: Mustafa BOLEKEN Date: Fri, 11 Oct 2024 09:42:07 +0300 Subject: [PATCH 11/12] Update title's --- .../Android SDK/configure-ant-media-server.md | 2 +- .../Android SDK/configure-manifest.md | 2 +- .../Android SDK/create-android-project.md | 2 +- .../Android SDK/create-required-classes.md | 2 +- .../push-notification-management/Android SDK/dependency.md | 2 +- .../Android SDK/sending-notification.md | 2 +- .../Android SDK/setting-up-firebase.md | 2 +- .../iOS SDK/configure-ant-media-server.md | 4 ++-- .../iOS SDK/configure-your-ios-project.md | 4 ++-- .../push-notification-management/iOS SDK/prerequirements.md | 4 ++-- .../iOS SDK/sending-notification.md | 4 ++-- .../iOS SDK/setting-up-apn-certificates.md | 4 ++-- 12 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-ant-media-server.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-ant-media-server.md index ff19e951..1da93973 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-ant-media-server.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-ant-media-server.md @@ -1,5 +1,5 @@ --- -title: Sending Notification in Android +title: Configure Ant Media Server description: Sending Notification in Android Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 6 diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-manifest.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-manifest.md index 4489faf5..004d4acf 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-manifest.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/configure-manifest.md @@ -1,5 +1,5 @@ --- -title: Sending Notification in Android +title: Configure Manifest description: Sending Notification in Android Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 4 diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-android-project.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-android-project.md index 1cdac104..c1d439d0 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-android-project.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-android-project.md @@ -1,5 +1,5 @@ --- -title: Sending Notification in Android +title: Create an Android App Project in Android Studio description: Sending Notification in Android Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 2 diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-required-classes.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-required-classes.md index 86bd01cf..933ddb25 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-required-classes.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/create-required-classes.md @@ -1,5 +1,5 @@ --- -title: Sending Notification in Android +title: Create Required Classes description: Sending Notification in Android Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 5 diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/dependency.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/dependency.md index 464c333d..1e172ef7 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/dependency.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/dependency.md @@ -1,5 +1,5 @@ --- -title: Sending Notification in Android +title: Adding Dependencies description: Sending Notification in Android Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 3 diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md index 5882dd3d..2fcbc194 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/sending-notification.md @@ -1,5 +1,5 @@ --- -title: Sending Notification in Android +title: Sending Notifications to Web and Mobile Clients description: Sending Notification in Android Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 7 diff --git a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/setting-up-firebase.md b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/setting-up-firebase.md index 4d7b8902..ce675df1 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/setting-up-firebase.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/Android SDK/setting-up-firebase.md @@ -1,5 +1,5 @@ --- -title: Sending Notification in Android +title: Setting Up Firebase Project description: Sending Notification in Android Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 1 diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-ant-media-server.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-ant-media-server.md index 69261f95..639295d9 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-ant-media-server.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-ant-media-server.md @@ -1,6 +1,6 @@ --- -title: Sending Notification in Android -description: Sending Notification in Android Tutorial +title: Configure Ant Media Server +description: Sending Notification in iOS Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 4 --- diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-your-ios-project.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-your-ios-project.md index cfd51aad..6761a708 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-your-ios-project.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/configure-your-ios-project.md @@ -1,6 +1,6 @@ --- -title: Sending Notification in Android -description: Sending Notification in Android Tutorial +title: Configure Your iOS Project in Xcode +description: Sending Notification in iOS Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 3 --- diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/prerequirements.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/prerequirements.md index 392cfa04..9f3ed69b 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/prerequirements.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/prerequirements.md @@ -1,6 +1,6 @@ --- -title: Sending Notification in Android -description: Sending Notification in Android Tutorial +title: Pre-Requirements +description: Sending Notification in iOS Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 1 --- diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification.md index 2218eab4..004fd048 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/sending-notification.md @@ -1,6 +1,6 @@ --- -title: Sending Notification in Android -description: Sending Notification in Android Tutorial +title: Sending Notifications to Web and Mobile Clients +description: Sending Notification in iOS Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 5 --- diff --git a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/setting-up-apn-certificates.md b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/setting-up-apn-certificates.md index 987df7d3..2b800d6b 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/setting-up-apn-certificates.md +++ b/docs/guides/developing-antmedia-server/push-notification-management/iOS SDK/setting-up-apn-certificates.md @@ -1,6 +1,6 @@ --- -title: Sending Notification in Android -description: Sending Notification in Android Tutorial +title: Configure APN Certificates +description: Sending Notification in iOS Tutorial keywords: [Push Notification Management Tutorial, Push Notification Management, Ant Media Server Documentation, Ant Media Server Tutorials] sidebar_position: 2 --- From 9d653fe2711c3ca99f91970d356bc12cad742bf2 Mon Sep 17 00:00:00 2001 From: yashtandon113 <82374739+yashtandon113@users.noreply.github.com> Date: Sun, 20 Oct 2024 22:36:28 +0530 Subject: [PATCH 12/12] Update _category_.json --- .../push-notification-management/_category_.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/developing-antmedia-server/push-notification-management/_category_.json b/docs/guides/developing-antmedia-server/push-notification-management/_category_.json index 946ce5e9..5e9a5efb 100644 --- a/docs/guides/developing-antmedia-server/push-notification-management/_category_.json +++ b/docs/guides/developing-antmedia-server/push-notification-management/_category_.json @@ -1,5 +1,5 @@ { - "label": "Developer Guides", + "label": "Push Notification", "position": 15, "link": { "type": "generated-index",
+ Getting FCM Registration Token Sample + + - Connect your server and go to the /usr/local/antmedia/webapps path. + + - Create fcm.html file and paste the code below + + ```html + + + + + WebRTC Samples > Publish + + + + + + + +
+
+
+

WebRTC Samples > WebRTC Publish

+
+
+ + + + +
+ + + + + + ``` + + + - Create firebase-messaging-sw.js file and paste the code below + + + ```js + importScripts('https://www.gstatic.com/firebasejs/10.8.0/firebase-app-compat.js'); +importScripts('https://www.gstatic.com/firebasejs/10.8.0/firebase-messaging-compat.js'); + + + +// Retrieve an instance of Firebase Messaging so that it can handle background +// messages. + +const firebaseConfig = { + apiKey: "AIzaSyBlWNhAbl1tIDCcWmDyk3yQ0rq0q-h_jrE", + authDomain: "push-notification-d0a87.firebaseapp.com", + projectId: "push-notification-d0a87", + storageBucket: "push-notification-d0a87.appspot.com", + messagingSenderId: "790648424032", + appId: "1:790648424032:web:2dfe62f14401f80b652505" + }; + + // Initialize Firebase + const app = firebase.initializeApp(firebaseConfig); + const messaging = firebase.messaging(); + + messaging.onBackgroundMessage((payload) => { + console.log('[firebase-messaging-sw.js] Received background message ', payload); + // Customize notification here + const notificationTitle = 'Background Message Title'; + const notificationOptions = { + body: 'Background Message body.', + icon: '/firebase-logo.png' + }; + + self.registration.showNotification(notificationTitle, + notificationOptions); + }); + ``` + + - Go to https://domain_name:port/fcm.html url using any browser. + - Open browser's developer console and you will see your FCM Registration Token +