{"id":37155,"date":"2024-11-01T09:55:18","date_gmt":"2024-11-01T09:55:18","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=37155"},"modified":"2024-11-01T11:36:26","modified_gmt":"2024-11-01T11:36:26","slug":"java-android-app-development-course-receive-notifications-from-server","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/37155\/","title":{"rendered":"Java Android App Development Course, Receive Notifications from Server"},"content":{"rendered":"<p>In Android app development, communication with the server is a very important element, and the ability to deliver information from the server to the client can greatly enhance user experience. In this course, we will explain in detail how to receive notifications sent from the server in an Android app using Java. In this process, we will implement the push notification feature using FCM (Firebase Cloud Messaging).<\/p>\n<h2>1. Introduction to FCM (Firebase Cloud Messaging)<\/h2>\n<p>FCM is a service provided by Google that is used to deliver push notifications to Android, iOS, and web applications. Through this service, developers can send information even when the user is not running the app. FCM is easy to use and provides a variety of features, which is why it is used in many apps.<\/p>\n<h2>2. Setting up FCM<\/h2>\n<h3>2.1. Creating a Firebase Project<\/h3>\n<p>To use FCM, you first need to create a Firebase project.<\/p>\n<ol>\n<li>Log in to the Firebase console (https:\/\/console.firebase.google.com\/).<\/li>\n<li>Create a new project and enter the project name.<\/li>\n<li>After setting up additional options such as Google Analytics, create the project.<\/li>\n<\/ol>\n<h3>2.2. Registering the Android App<\/h3>\n<p>Once the project is created, register the Android app in the Firebase project.<\/p>\n<ol>\n<li>Go to Project Settings in the Firebase console.<\/li>\n<li>Click on the Android icon to register the app.<\/li>\n<li>Enter the package name of the app and also add the SHA-1 certificate fingerprint. (Both debug and release certificates)<\/li>\n<li>Download the google-services.json file and place it in the app folder of the Android project.<\/li>\n<\/ol>\n<h3>2.3. Configuring Gradle<\/h3>\n<p>Edit the build.gradle file for basic dependency settings.<\/p>\n<pre><code>dependencies {\n    implementation 'com.google.firebase:firebase-messaging:23.0.0'\n}<\/code><\/pre>\n<p>Add the Google services plugin to the project-level build.gradle file.<\/p>\n<pre><code>buildscript {\n    dependencies {\n        classpath 'com.google.gms:google-services:4.3.10'\n    }\n}<\/code><\/pre>\n<h3>2.4. Configuring AndroidManifest.xml<\/h3>\n<p>Add the necessary permissions for Firebase in the AndroidManifest.xml file.<\/p>\n<pre><code>&lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    package=\"com.example.pushnotification\"&gt;\n    \n    &lt;application \n        ... &gt;\n        &lt;meta-data\n            android:name=\"com.google.firebase.messaging.default_notification_channel_id\"\n            android:value=\"default_channel\"&gt;\n        &lt;\/meta-data&gt;\n\n        &lt;service\n            android:name=\".MyFirebaseMessagingService\"\n            android:exported=\"false\"&gt;\n            &lt;intent-filter&gt;\n                &lt;action android:name=\"com.google.firebase.MESSAGING_EVENT\"\/&gt;\n            &lt;\/intent-filter&gt;\n        &lt;\/service&gt;\n    &lt;\/application&gt;\n&lt;\/manifest&gt;<\/code><\/pre>\n<h2>3. Implementing Server Code<\/h2>\n<p>To send notifications using FCM from the server, we will introduce an example of a Node.js server using the Firebase Admin SDK.<\/p>\n<h3>3.1. Setting up Node.js Environment<\/h3>\n<p>After installing Node.js, install the Firebase Admin SDK.<\/p>\n<pre><code>npm install firebase-admin<\/code><\/pre>\n<h3>3.2. Writing Server Code<\/h3>\n<pre><code>const admin = require(\"firebase-admin\");\n\n\/\/ Path to Firebase service account key JSON file\nconst serviceAccount = require(\".\/path\/to\/serviceAccountKey.json\");\n\n\/\/ Firebase initialization\nadmin.initializeApp({\n    credential: admin.credential.cert(serviceAccount)\n});\n\n\/\/ Function to send notifications\nfunction sendNotification(token, message) {\n    const payload = {\n        notification: {\n            title: message.title,\n            body: message.body,\n        },\n    };\n\n    admin\n        .messaging()\n        .sendToDevice(token, payload)\n        .then((response) =&gt; {\n            console.log(\"Successfully sent message:\", response);\n        })\n        .catch((error) =&gt; {\n            console.log(\"Error sending message:\", error);\n        });\n}\n\n\/\/ Client device's token and message content\nconst registrationToken = \"Device's registration token\";\nconst message = {\n    title: \"Push Notification Title\",\n    body: \"This is the body of the push notification.\",\n};\n\n\/\/ Sending notification\nsendNotification(registrationToken, message);<\/code><\/pre>\n<h2>4. Implementing Android Client<\/h2>\n<h3>4.1. Extending FirebaseMessagingService<\/h3>\n<p>To receive push notifications, create a class that extends FirebaseMessagingService.<\/p>\n<pre><code>import com.google.firebase.messaging.FirebaseMessagingService;\nimport com.google.firebase.messaging.RemoteMessage;\nimport android.util.Log;\n\npublic class MyFirebaseMessagingService extends FirebaseMessagingService {\n    private static final String TAG = \"MyFirebaseMsgService\";\n\n    @Override\n    public void onMessageReceived(RemoteMessage remoteMessage) {\n        \/\/ Handle received notification\n        Log.d(TAG, \"From: \" + remoteMessage.getFrom());\n\n        if (remoteMessage.getNotification() != null) {\n            Log.d(TAG, \"Message Notification Body: \" + remoteMessage.getNotification().getBody());\n            \/\/ Call method to display notification\n            showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());\n        }\n    }\n\n    private void showNotification(String title, String messageBody) {\n        \/\/ Implement code to display notification using NotificationCompat.Builder\n    }\n\n    @Override\n    public void onNewToken(String token) {\n        Log.d(TAG, \"Refreshed token: \" + token);\n        \/\/ Implement code to send the new token to the server\n    }\n}<\/code><\/pre>\n<h3>4.2. Displaying Notifications<\/h3>\n<p>To display notifications, implement a method to create and show notifications using NotificationCompat.Builder.<\/p>\n<pre><code>import android.app.NotificationChannel;\nimport android.app.NotificationManager;\nimport android.os.Build;\n\nprivate void showNotification(String title, String messageBody) {\n    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);\n    String channelId = \"default_channel\";\n\n    if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.O) {\n        NotificationChannel channel = new NotificationChannel(channelId, \"Channel human readable title\", NotificationManager.IMPORTANCE_DEFAULT);\n        notificationManager.createNotificationChannel(channel);\n    }\n\n    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channelId)\n            .setAutoCancel(true)\n            .setContentTitle(title)\n            .setContentText(messageBody)\n            .setSmallIcon(R.drawable.ic_stat_ic_notification);\n\n    notificationManager.notify(0, notificationBuilder.build());\n}<\/code><\/pre>\n<h2>5. Testing and Debugging<\/h2>\n<p>If you have completed all configurations and code, it is now time to conduct a real test. Run the server and try sending a notification using the registration token. Check if the notification is properly received on the client app.<\/p>\n<h3>5.1. Checking Receipt of Notifications<\/h3>\n<p>If a notification is received, verify that a push notification appears at the top of the app and that a specific activity is executed when the notification is clicked.<\/p>\n<h3>5.2. Troubleshooting<\/h3>\n<p>If notifications are not being received, check the following:<\/p>\n<ul>\n<li>Check if the FCM registration token is valid.<\/li>\n<li>Check if the Firebase project settings are correct.<\/li>\n<li>Ensure that the necessary permissions and services are added in AndroidManifest.xml.<\/li>\n<\/ul>\n<h2>6. Conclusion<\/h2>\n<p>In this course, we learned how to receive notifications sent from the server in an Android app using Java. We confirmed that we can easily implement push notifications using Firebase Cloud Messaging. Consider the potential to expand by adding various features needed for actual applications.<\/p>\n<p>In the future, we will cover various FCM features such as customizing notifications, grouping, and delayed delivery, so please stay tuned. Thank you!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Android app development, communication with the server is a very important element, and the ability to deliver information from the server to the client can greatly enhance user experience. In this course, we will explain in detail how to receive notifications sent from the server in an Android app using Java. In this process, &hellip; <a href=\"https:\/\/atmokpo.com\/w\/37155\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Java Android App Development Course, Receive Notifications from Server&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[137],"tags":[],"class_list":["post-37155","post","type-post","status-publish","format-standard","hentry","category-java-android-app-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java Android App Development Course, Receive Notifications from Server - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/37155\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java Android App Development Course, Receive Notifications from Server - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In Android app development, communication with the server is a very important element, and the ability to deliver information from the server to the client can greatly enhance user experience. In this course, we will explain in detail how to receive notifications sent from the server in an Android app using Java. In this process, &hellip; \ub354 \ubcf4\uae30 &quot;Java Android App Development Course, Receive Notifications from Server&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/37155\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:55:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:36:26+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/37155\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37155\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Java Android App Development Course, Receive Notifications from Server\",\"datePublished\":\"2024-11-01T09:55:18+00:00\",\"dateModified\":\"2024-11-01T11:36:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37155\/\"},\"wordCount\":550,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Java Android app development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/37155\/\",\"url\":\"https:\/\/atmokpo.com\/w\/37155\/\",\"name\":\"Java Android App Development Course, Receive Notifications from Server - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:55:18+00:00\",\"dateModified\":\"2024-11-01T11:36:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37155\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/37155\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/37155\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java Android App Development Course, Receive Notifications from Server\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Java Android App Development Course, Receive Notifications from Server - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/37155\/","og_locale":"ko_KR","og_type":"article","og_title":"Java Android App Development Course, Receive Notifications from Server - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In Android app development, communication with the server is a very important element, and the ability to deliver information from the server to the client can greatly enhance user experience. In this course, we will explain in detail how to receive notifications sent from the server in an Android app using Java. In this process, &hellip; \ub354 \ubcf4\uae30 \"Java Android App Development Course, Receive Notifications from Server\"","og_url":"https:\/\/atmokpo.com\/w\/37155\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:55:18+00:00","article_modified_time":"2024-11-01T11:36:26+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/37155\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/37155\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Java Android App Development Course, Receive Notifications from Server","datePublished":"2024-11-01T09:55:18+00:00","dateModified":"2024-11-01T11:36:26+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/37155\/"},"wordCount":550,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Java Android app development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/37155\/","url":"https:\/\/atmokpo.com\/w\/37155\/","name":"Java Android App Development Course, Receive Notifications from Server - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:55:18+00:00","dateModified":"2024-11-01T11:36:26+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/37155\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/37155\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/37155\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Java Android App Development Course, Receive Notifications from Server"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=37155"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37155\/revisions"}],"predecessor-version":[{"id":37156,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37155\/revisions\/37156"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=37155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=37155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=37155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}