मोबाइल ऐप व्यवसायों के लिए लगभग अपरिहार्य हो गए हैं क्योंकि वे उपयोगकर्ताओं को आवश्यक सेवाएँ शीघ्रता से और आसानी से प्रदान करने की क्षमता रखते हैं। हालाँकि, क्या होगा अगर मैं आपको बताऊँ कि वेब पर मोबाइल ऐप जैसा अनुभव प्राप्त करना संभव है? प्रोग्रेसिव वेब ऐप (PWA) इसी के लिए हैं।
टॉप डिज़ाइन फ़र्म सर्वे के अनुसार, मोबाइल ऐप की मांग बढ़ रही है। 2022 में, लगभग आधे - 48% - छोटे व्यवसायों के पास अपने मोबाइल ऐप थे, जबकि 2021 में यह संख्या एक तिहाई यानी 32% थी। यह प्रवृत्ति सभी प्लेटफ़ॉर्म पर मोबाइल जैसी सहभागिता की मांग करने वाले उपयोगकर्ता की ज़रूरतों में बदलाव को दर्शाती है।
PWA विकसित करके, व्यवसाय सीधे वेब ब्राउज़र के माध्यम से इस मूल-ऐप अनुभव को प्रदान कर सकते हैं, जिससे अंतिम उपयोगकर्ताओं को एक अलग मोबाइल एप्लिकेशन की आवश्यकता के बिना एक भरोसेमंद और आकर्षक एप्लिकेशन मिल सकता है
प्रोग्रेसिव वेब ऐप एक ऐसा ऐप है जो उपयोगकर्ताओं को मूल समर्थन प्रदान करता है, बिना मोबाइल डिवाइस के, प्लेटफ़ॉर्म-विशिष्ट विचारों के साथ निर्माण करना जो एंड्रॉइड से लेकर आईओएस से लेकर डेस्कटॉप तक भिन्न होते हैं। वे हल्के होते हैं, सभी डिवाइस पर सुलभ होते हैं, और इंटरनेट से कनेक्ट होने पर स्वचालित रूप से अपडेट होते हैं।
मैं हाल ही में अपने NextJs ऐप को प्रगतिशील वेब ऐप बनाने के सर्वोत्तम तरीकों पर शोध कर रहा था, तभी मेरी नजर नीचे Reddit पर Next.js के हालिया अपडेट के बारे में आई, जिसमें PWA के लिए मूल समर्थन भी शामिल था।
टिप्पणी यहाँ देखें.
अद्यतन की समीक्षा करने के बाद, मैं कह सकता हूं कि PWAs बनाना पहले कभी इतना आसान नहीं था और मैं इसे साबित भी करूंगा।
पी.एस.: आपके ऐप को PWA के रूप में मान्यता दिलाने के लिए दो फ़ाइलें बहुत महत्वपूर्ण हैं - मैनिफ़ेस्ट फ़ाइल और सर्विस वर्कर फ़ाइल ।
npx create-next-app@latest my-pwa-app
या
yarn create next-app my-pwa-app
कमांड चलाने के बाद, अपनी स्थापना के विवरण के लिए संकेतों का पालन करें और फिर प्रोजेक्ट निर्देशिका में नेविगेट करें
cd my-pwa-app
डेव सर्वर प्रारंभ करें
npm run dev
app
निर्देशिका में manifest.json
या manifest.ts
फ़ाइल बनाएँ.
import type { MetadataRoute } from 'next' export default function manifest(): MetadataRoute.Manifest { return { name: 'Next.js PWA', short_name: 'NextPWA', description: 'A Progressive Web App built with Next.js', start_url: '/', display: 'standalone', background_color: '#ffffff', theme_color: '#000000', icons: [ { src: '/icon-192x192.png', sizes: '192x192', type: 'image/png', }, { src: '/icon-512x512.png', sizes: '512x512', type: 'image/png', }, ], } }
standalone
minimal-ui
fullscreen
या browser
में से कोई भी हो सकती हैsrc
, size
और type
निर्दिष्ट करते हैं। आपके PWA के लिए, कम से कम 192x192
और 512x512
आकार वाले आइकन होना महत्वपूर्ण है।मैनिफ़ेस्ट-जेनरेटर जैसी वेबसाइटों का उपयोग मैनिफ़ेस्ट फ़ाइल और विभिन्न आकारों के आइकन को शीघ्रता से उत्पन्न करने के लिए किया जा सकता है
सेवा कार्यकर्ता पुश घटनाओं को सुनेगा और पुश सूचनाओं के लिए नीचे दिए गए कार्य को पूरा करेगा
self.addEventListener("push", function (event) { if (event.data) { const data = event.data.json(); const options = { body: data.body, icon: data.icon || '/icon.png', badge: "/icons/timer-icon-144.png", vibrate: [100, 50, 100], data: { dateOfArrival: Date.now(), primaryKey: "5", }, }; event.waitUntil(self.registration.showNotification(data.title, options)); } }); self.addEventListener("notificationclick", function (event) { console.log("Notification click received."); event.notification.close(); event.waitUntil(clients.openWindow("<https://your-website.com>")); //This should be the url to your website });
सेवा कार्यकर्ता को पंजीकृत करने के लिए, आपको वह रूट प्रदान करना होगा जहां सेवा कार्यकर्ता बनाया गया है।
const registration = await navigator.serviceWorker.register("/sw.js", { //provide the route to the service worker scope: "/", updateViaCache: "none", });
नोटिफ़िकेशन और सदस्यता को संभालने के लिए वेब-पुश इंस्टॉल करें
npm install web-push --save
फिर हमें सब्सक्रिप्शन प्राप्त करने की आवश्यकता है यदि उपयोगकर्ता के पास कोई सब्सक्रिप्शन है या उपयोगकर्ता को सब्सक्राइब करने के लिए ईवेंट पुश करना है। वास्तविक एप्लिकेशन में, इस सब्सक्रिप्शन को स्टोरेज के लिए सर्वर पर भेजा जाना चाहिए
async function registerServiceWorker() { const registration = await navigator.serviceWorker.register("/sw.js", { scope: "/", updateViaCache: "none", }); const sub = await registration.pushManager.getSubscription(); if (sub) { setSubscription(sub); //This would be sent to a server } else { const pushSubscription = await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY, // Your VAPID public key }); setSubscription(pushSubscription); } }
VAPID कुंजियाँ उत्पन्न करने के लिए चलाएँ:
npx web-push generate-vapid-keys
पुश नोटिफिकेशन का परीक्षण करने के लिए एक फ़ंक्शन के साथ UI के लिए यह सब एक साथ रखना
"use client"; import { useEffect, useState } from "react"; const Home = () => { const [subscription, setSubscription] = useState<PushSubscription | null>( null ); useEffect(() => { if ("serviceWorker" in navigator && "PushManager" in window) { registerServiceWorker(); } }, []); async function registerServiceWorker() { const registration = await navigator.serviceWorker.register("/sw.js", { //provide the route to the service worker scope: "/", updateViaCache: "none", }); const sub = await registration.pushManager.getSubscription(); if (sub) { setSubscription(sub); //This would be sent to a server } else { const pushSubscription = await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY, // Your VAPID public key }); setSubscription(pushSubscription); } } //Create a function to test the notification const handleSendNotification = async () => { await fetch("/api/sendNotification", { method: "POST", body: JSON.stringify({ message: "Your timer has completed!", subscription: subscription, // This ideally, should not be included in the body. It should have already been saved on the server }), headers: { "Content-Type": "application/json", }, }); }; return ( <div> <h1>My PWA with Push Notifications</h1> <button onClick={handleSendNotification}>Notify Me!</button> </div> ); }; export default Home;
app
निर्देशिका के अंदर, api
नाम से एक नया फ़ोल्डर बनाएं।api
फ़ोल्डर के भीतर, sendNotification
नाम से एक और फ़ोल्डर बनाएँ।sendNotification
फ़ोल्डर के अंदर route.ts
नाम की एक फ़ाइल बनाएँ।
संरचना इस प्रकार होनी चाहिए
app/ └── api/ └── sendNotification/ └── route.ts
Route.ts फ़ाइल में कोड की निम्नलिखित पंक्तियाँ शामिल करें
import { NextResponse } from "next/server"; import webpush from "web-push"; webpush.setVapidDetails( "mailto:[email protected]", // Your email process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY!, process.env.VAPID_PRIVATE_KEY! ); export async function POST(req: Request) { const { message, subscription } = await req.json(); if (!subscription) { return NextResponse.json( { error: "No subscription available" }, { status: 400 } ); } try { await webpush.sendNotification( subscription, JSON.stringify({ title: "Notification", body: message }) ); return NextResponse.json({ success: true }); } catch (error) { console.error("Error sending notification:", error); return NextResponse.json( { error: "Failed to send notification" }, { status: 500 } ); } }
यह पुष्टि करने के लिए कि ऐप अब PWA है, डाउनलोड आइकन URL बार में सबसे दाईं ओर दिखाई देना चाहिए। आपको एप्लिकेशन टैब में वेब मैनिफ़ेस्ट के बारे में जानकारी भी देखने में सक्षम होना चाहिए।
Next.js के हाल ही में किए गए अपडेट में नेटिव PWA सपोर्ट के साथ प्रोग्रेसिव वेब ऐप बनाने की प्रक्रिया को बहुत सहज बना दिया है। Next.js के साथ, PWA को विकसित करना और तैनात करना अब आधुनिक वेब डेवलपमेंट के हिस्से में एक सीधी प्रक्रिया है क्योंकि डेवलपर्स अब वेब ब्राउज़र के भीतर से ही उपयोगकर्ताओं की अपेक्षा के अनुसार नेटिव जैसी सुविधाओं के साथ एप्लिकेशन बना सकते हैं।