{"id":6097,"date":"2026-07-19T00:46:33","date_gmt":"2026-07-18T21:16:33","guid":{"rendered":"https:\/\/notes.yummybrands.studio\/?p=6097"},"modified":"2026-07-23T01:51:18","modified_gmt":"2026-07-22T22:21:18","slug":"%d8%b3%d8%a7%d8%ae%d8%aa-%d8%a7%d9%be%d9%84%db%8c%da%a9%db%8c%d8%b4%d9%86-%d8%a7%d9%86%d8%af%d8%b1%d9%88%d8%a6%db%8c%d8%af-%d8%af%d9%88%d9%85","status":"publish","type":"post","link":"https:\/\/notes.yummybrands.studio\/?p=6097","title":{"rendered":"\u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u062f\u0631\u0648\u0626\u06cc\u062f (\u062f\u0648\u0645)"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">\u0628\u062e\u0634 \u0686\u0647\u0627\u0631\u0645 \u2014 \u067e\u0631\u0648\u0698\u0647 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0628\u06cc\u0633\u062a\u200c\u0648\u06cc\u06a9\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0645\u06cc\u200c\u0632\u0646\u0647\u060c \u067e\u0634\u062a \u0635\u062d\u0646\u0647 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0645\u06cc\u200c\u0627\u0641\u062a\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631\u0628\u0627\u0631\u0647 \u0642\u0637\u0639\u0627\u062a \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062d\u0631\u0641 \u0632\u062f\u06cc\u0645. Retrofit \u0631\u0648 \u0634\u0646\u0627\u062e\u062a\u06cc\u0645\u060c ViewModel \u0648 Repository \u0631\u0648 \u062f\u06cc\u062f\u06cc\u0645\u060c \u062f\u0631\u0628\u0627\u0631\u0647 State\u060c Session \u0648 Token \u0647\u0645 \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u06cc\u0645. \u062d\u0627\u0644\u0627 \u0648\u0642\u062a\u0634\u0647 \u0627\u06cc\u0646 \u0642\u0637\u0639\u0627\u062a \u0631\u0648 \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646\u200c\u0628\u0627\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc\u0645 \u0648 \u06cc\u06a9 \u0641\u0631\u0627\u06cc\u0646\u062f \u0648\u0627\u0642\u0639\u06cc \u0628\u0633\u0627\u0632\u06cc\u0645: <strong>\u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06cc\u06a9 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0633\u062e\u0647 \u0648\u0628\u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u06cc\u06a9 \u0641\u0631\u0645 HTML \u0645\u06cc\u200c\u0633\u0627\u062e\u062a\u06cc\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0628\u0627 JavaScript \u06cc\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u0639\u0645\u0648\u0644\u06cc \u0641\u0631\u0645 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0627\u062f\u06cc \u0648 \u0628\u0639\u062f \u0628\u0631\u0627\u0633\u0627\u0633 \u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631\u060c \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0645\u06cc\u200c\u06a9\u0631\u062f\u06cc. \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u0627\u0635\u0644 \u0645\u0627\u062c\u0631\u0627 \u0647\u0645\u06cc\u0646\u0647\u060c \u0627\u0645\u0627 \u0686\u0648\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0646\u062f\u0644\u0627\u06cc\u0647 \u0627\u0633\u062a\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 \u062f\u06a9\u0645\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0628\u0647 Retrofit \u0628\u0631\u0633\u0646. \u0647\u0631 \u0628\u062e\u0634 \u0628\u0627\u06cc\u062f \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0645\u0634\u062e\u0635 \u062e\u0648\u062f\u0634 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631\u0634 \u0631\u0648 \u0648\u0627\u0631\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0645\u06cc\u200c\u0632\u0646\u0647. \u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u062c\u0645\u0639 \u06a9\u0646\u0647 \u0648 \u0628\u0647 ViewModel \u062a\u062d\u0648\u06cc\u0644 \u0628\u062f\u0647. ViewModel \u0648\u0636\u0639\u06cc\u062a \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Repository \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647\u060c \u067e\u0627\u0633\u062e \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u0645\u0648\u0641\u0642\u06cc\u062a\u060c Token \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0639\u062f ViewModel \u0628\u0647 \u0635\u0641\u062d\u0647 \u062e\u0628\u0631 \u0645\u06cc\u062f\u0647 \u06a9\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0645\u0648\u0641\u0642 \u0628\u0648\u062f\u0647 \u0648 \u0635\u0641\u062d\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u0628\u062e\u0634 \u0627\u0635\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u06a9\u0644\u06cc \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">RegisterScreen<br>\u2193<br>RegisterViewModel<br>\u2193<br>AuthRepository<br>\u2193<br>AuthApi<br>\u2193<br>Server<br>\u2193<br>Access Token<br>\u2193<br>TokenStorage<br>\u2193<br>Home<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0646\u0645\u0648\u062f\u0627\u0631 \u0634\u0627\u06cc\u062f \u0633\u0627\u062f\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u0647\u060c \u0627\u0645\u0627 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u0645\u0647 \u0645\u0641\u0627\u0647\u06cc\u0645\u06cc \u06a9\u0647 \u062f\u0631 \u062f\u0631\u0633\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u06cc\u0627\u062f \u06af\u0631\u0641\u062a\u06cc\u0645\u060c \u062f\u0627\u062e\u0644\u0634 \u062d\u0636\u0648\u0631 \u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0641\u0631\u0645 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0686\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Compose\u060c \u0647\u0631 \u06a9\u0627\u062f\u0631 \u0648\u0631\u0648\u062f\u06cc \u0628\u0627\u06cc\u062f \u06cc\u06a9 State \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u062a\u0627 \u0645\u0642\u062f\u0627\u0631 \u0641\u0639\u0644\u06cc \u0627\u0648\u0646 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0634\u0647. \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u06a9\u0644 \u0638\u0627\u0647\u0631 \u0641\u0631\u0645 \u0631\u0648 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645. \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u0647\u0645\u06cc\u062a \u062f\u0627\u0631\u0647\u060c \u0646\u062d\u0648\u0647 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc\u0647 \u06a9\u0647 \u0642\u0631\u0627\u0631\u0647 \u0628\u0631\u0627\u06cc \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0646.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>var businessName by remember { mutableStateOf(\"\") }\nvar phone by remember { mutableStateOf(\"\") }\nvar password by remember { mutableStateOf(\"\") }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">var<\/span><span style=\"color: #24292E\"> businessName <\/span><span style=\"color: #D73A49\">by<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">remember<\/span><span style=\"color: #24292E\"> { <\/span><span style=\"color: #6F42C1\">mutableStateOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">) }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">var<\/span><span style=\"color: #24292E\"> phone <\/span><span style=\"color: #D73A49\">by<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">remember<\/span><span style=\"color: #24292E\"> { <\/span><span style=\"color: #6F42C1\">mutableStateOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">) }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">var<\/span><span style=\"color: #24292E\"> password <\/span><span style=\"color: #D73A49\">by<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">remember<\/span><span style=\"color: #24292E\"> { <\/span><span style=\"color: #6F42C1\">mutableStateOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">) }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0645\u062a\u063a\u06cc\u0631\u060c \u0645\u0642\u062f\u0627\u0631 \u06cc\u06a9\u06cc \u0627\u0632 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u0641\u0631\u0645 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. \u0645\u0642\u062f\u0627\u0631 \u0627\u0648\u0644\u06cc\u0647 <code>\"\"<\/code> \u06cc\u0639\u0646\u06cc \u062f\u0631 \u0634\u0631\u0648\u0639\u060c \u0641\u06cc\u0644\u062f \u062e\u0627\u0644\u06cc\u0647. \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 TextField \u0686\u06cc\u0632\u06cc \u0645\u06cc\u200c\u0646\u0648\u06cc\u0633\u0647\u060c \u0645\u0642\u062f\u0627\u0631 \u0647\u0645\u06cc\u0646 \u0645\u062a\u063a\u06cc\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Compose \u0647\u0645 \u0628\u062e\u0634 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0635\u0641\u062d\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0627\u0632 remember \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u06cc\u0645\u060c \u0686\u0648\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0642\u0637 \u0628\u0647 \u062e\u0648\u062f \u0641\u0631\u0645 \u062a\u0639\u0644\u0642 \u062f\u0627\u0631\u0646. \u0627\u0645\u0627 \u06cc\u06a9 \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647: \u0627\u06af\u0631 \u0635\u0641\u062d\u0647 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06cc\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc Activity \u062f\u0648\u0628\u0627\u0631\u0647 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647\u060c remember \u0645\u0645\u06a9\u0646\u0647 \u0645\u0642\u062f\u0627\u0631\u0647\u0627 \u0631\u0648 \u0627\u0632 \u062f\u0633\u062a \u0628\u062f\u0647. \u0628\u0631\u0627\u06cc \u0641\u0631\u0645\u200c\u0647\u0627\u06cc \u0645\u0647\u0645\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0645\u06cc\u0634\u0647 \u0627\u0632 rememberSaveable \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>var businessName by rememberSaveable { mutableStateOf(\"\") }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">var<\/span><span style=\"color: #24292E\"> businessName <\/span><span style=\"color: #D73A49\">by<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">rememberSaveable<\/span><span style=\"color: #24292E\"> { <\/span><span style=\"color: #6F42C1\">mutableStateOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">) }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">rememberSaveable \u0634\u0628\u06cc\u0647 remember \u0639\u0645\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0645\u0642\u062f\u0627\u0631\u0647\u0627\u06cc \u0633\u0627\u062f\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 \u0645\u062a\u0646 \u0631\u0648 \u062f\u0631 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0635\u0641\u062d\u0647 \u0647\u0645 \u062d\u0641\u0638 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06af\u0631 \u0635\u0641\u062d\u0647 \u0645\u0648\u0642\u062a\u0627\u064b \u062f\u0648\u0628\u0627\u0631\u0647 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u060c \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0648\u0634\u062a\u0647 \u0646\u0627\u067e\u062f\u06cc\u062f \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u0647\u0645\u0647 State\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0627\u062e\u0644 ViewModel \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0646. \u0645\u062a\u0646 \u0645\u0648\u0642\u062a\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u0641\u06cc\u0644\u062f \u0646\u0648\u0634\u062a\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u0627\u062e\u0644 \u062e\u0648\u062f \u0635\u0641\u062d\u0647 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647. \u0627\u0645\u0627 \u0648\u0636\u0639\u06cc\u062a \u0627\u0635\u0644\u06cc \u0641\u0631\u0627\u06cc\u0646\u062f\u060c \u0645\u062b\u0644 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0631\u0633\u0627\u0644 \u0628\u0648\u062f\u0646\u060c \u0645\u0648\u0641\u0642\u06cc\u062a \u06cc\u0627 \u062e\u0637\u0627\u060c \u0628\u0647\u062a\u0631\u0647 \u062f\u0627\u062e\u0644 ViewModel \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u06a9\u0644\u06cc\u06a9 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u0645\u06cc\u200c\u0632\u0646\u0647\u060c \u0635\u0641\u062d\u0647 \u0646\u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0634 Retrofit \u0631\u0648 \u0635\u062f\u0627 \u0628\u0632\u0646\u0647 \u06cc\u0627 Token \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u0647. \u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u062a\u062d\u0648\u06cc\u0644 ViewModel \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>viewModel.register(\n    businessName = businessName.trim(),\n    phone = phone.trim(),\n    password = password\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">viewModel.<\/span><span style=\"color: #6F42C1\">register<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    businessName <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> businessName.<\/span><span style=\"color: #6F42C1\">trim<\/span><span style=\"color: #24292E\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    phone <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> phone.<\/span><span style=\"color: #6F42C1\">trim<\/span><span style=\"color: #24292E\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    password <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627 \u0686\u0646\u062f \u0646\u06a9\u062a\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0627\u0648\u0644 \u0627\u06cc\u0646\u06a9\u0647 \u0635\u0641\u062d\u0647 \u0645\u0642\u0627\u062f\u06cc\u0631 \u0641\u0639\u0644\u06cc \u0641\u0631\u0645 \u0631\u0648 \u0628\u0631\u0627\u06cc ViewModel \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647. \u062f\u0648\u0645 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0631\u0627\u06cc \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0648 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0627\u0632 <code>trim<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u06cc\u0645 \u062a\u0627 \u0641\u0627\u0635\u0644\u0647\u200c\u0647\u0627\u06cc \u0646\u0627\u062e\u0648\u0627\u0633\u062a\u0647 \u0627\u0628\u062a\u062f\u0627 \u0648 \u0627\u0646\u062a\u0647\u0627\u06cc \u0645\u062a\u0646 \u062d\u0630\u0641 \u0628\u0634\u0646. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f \u0627\u0632 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u06cc\u06a9 \u0641\u0627\u0635\u0644\u0647 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0647\u0645\u0648\u0646 \u0641\u0627\u0635\u0644\u0647 \u0646\u0628\u0627\u06cc\u062f \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0644\u0632\u0627\u0645\u0627\u064b \u0627\u0632 <code>trim<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u06a9\u0631\u062f\u06cc\u0645\u060c \u0686\u0648\u0646 \u0641\u0627\u0635\u0644\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u062e\u0634\u06cc \u0627\u0632 \u0631\u0645\u0632 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0627\u0644\u0628\u062a\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0646\u0647\u0627\u06cc\u06cc \u0628\u0647 \u0642\u0648\u0627\u0646\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647. \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0627\u0635\u0644\u0627\u064b \u0627\u062c\u0627\u0632\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0641\u0627\u0635\u0644\u0647 \u062f\u0631 \u0631\u0645\u0632 \u0631\u0648 \u0646\u0645\u06cc\u062f\u0646 \u0648 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0631\u0648 \u062f\u0631 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u0645\u06cc\u06af\u0647: \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u062f\u0627\u0631\u0647. \u0635\u0641\u062d\u0647 \u0646\u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u0627\u06cc\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0686\u0637\u0648\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647 \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0627\u0632 \u0686\u0647 \u0645\u0633\u06cc\u0631\u06cc \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u062f\u0631 \u06a9\u062c\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0628\u0627\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0634\u0646. \u0645\u062b\u0644\u0627\u064b \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062e\u0627\u0644\u06cc \u0646\u0628\u0627\u0634\u0647\u060c \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0633\u0627\u062e\u062a\u0627\u0631 \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u06a9\u0648\u062a\u0627\u0647 \u0646\u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0633\u0627\u062f\u0647 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0642\u0628\u0644 \u0627\u0632 \u0648\u0631\u0648\u062f \u0628\u0647 Repository \u0648 \u062f\u0627\u062e\u0644 ViewModel \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (businessName.isBlank()) {\n    showError(\"\u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u06a9\u0646\")\n    return\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (businessName.<\/span><span style=\"color: #6F42C1\">isBlank<\/span><span style=\"color: #24292E\">()) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">showError<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u06a9\u0646&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">isBlank \u0641\u0642\u0637 \u062e\u0627\u0644\u06cc \u0628\u0648\u062f\u0646 \u0645\u062a\u0646 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647\u061b \u0645\u062a\u0646\u06cc \u0631\u0648 \u06a9\u0647 \u0641\u0642\u0637 \u0627\u0632 \u0641\u0627\u0635\u0644\u0647 \u062a\u0634\u06a9\u06cc\u0644 \u0634\u062f\u0647 \u0647\u0645 \u062e\u0627\u0644\u06cc \u062f\u0631 \u0646\u0638\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0645\u062b\u0644\u0627\u064b &#8221; &#8221; \u0627\u0632 \u0646\u0638\u0631 isBlank \u06cc\u06a9 \u0645\u0642\u062f\u0627\u0631 \u0646\u0627\u0645\u0639\u062a\u0628\u0631\u0647. \u062f\u0633\u062a\u0648\u0631 return \u0647\u0645 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0627\u062c\u0631\u0627\u06cc \u062a\u0627\u0628\u0639 \u062f\u0631 \u0647\u0645\u06cc\u0646 \u0646\u0642\u0637\u0647 \u0645\u062a\u0648\u0642\u0641 \u0628\u0634\u0647. \u06cc\u0639\u0646\u06cc \u0648\u0642\u062a\u06cc \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0648\u0627\u0631\u062f \u0646\u0634\u062f\u0647\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u06cc\u0647\u0648\u062f\u0647\u200c\u0627\u06cc \u0628\u0647 \u0633\u0631\u0648\u0631 \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u06cc\u06a9 \u0642\u0627\u0646\u0648\u0646 \u0627\u0648\u0644\u06cc\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (password.length &lt; 8) {\n    showError(\"\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u0627\u06cc\u062f \u062d\u062f\u0627\u0642\u0644 \u06f8 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0628\u0627\u0634\u0647\")\n    return\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (password.length <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">8<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">showError<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u0627\u06cc\u062f \u062d\u062f\u0627\u0642\u0644 \u06f8 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0628\u0627\u0634\u0647&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0628\u0631\u0627\u06cc \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc\u0647. \u06cc\u0639\u0646\u06cc \u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 \u0633\u0631\u0648\u0631 \u0628\u0631\u0647 \u0648 \u0628\u0639\u062f \u0633\u0631\u0648\u0631 \u062e\u0637\u0627 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0631\u06cc\u0639\u0627\u064b \u0645\u0634\u06a9\u0644 \u0631\u0648 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u06af\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u062f\u0627\u062e\u0644 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0633\u0631\u0648\u0631 \u062f\u06cc\u06af\u0647 \u0646\u0628\u0627\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0646\u0633\u062e\u0647 \u062f\u0633\u062a\u200c\u06a9\u0627\u0631\u06cc\u200c\u0634\u062f\u0647\u200c\u0627\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0627\u0635\u0644\u0627\u064b \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648 \u0627\u0632 \u0627\u0628\u0632\u0627\u0631 \u062f\u06cc\u06af\u0647\u200c\u0627\u06cc \u0628\u0631\u0627\u06cc API \u0628\u0641\u0631\u0633\u062a\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0642\u0648\u0627\u0646\u06cc\u0646 \u0645\u0647\u0645 \u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631 \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u0647\u0645 \u0628\u0631\u0631\u0633\u06cc \u0628\u0634\u0646. \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u0631\u0627\u06cc \u0633\u0631\u0639\u062a \u0648 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647\u061b \u0633\u0631\u0648\u0631 \u0628\u0631\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a \u0648 \u062d\u0641\u0638 \u0635\u062d\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u062f\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062b\u0628\u062a\u200c\u0646\u0627\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0631\u0648\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0631\u0648 \u062f\u0631 \u0642\u0627\u0644\u0628 JSON \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>{\n  \"business_name\": \"\u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0645\u0631\u06a9\u0632\u06cc\",\n  \"phone\": \"09121234567\",\n  \"password\": \"12345678\"\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #032F62\">&quot;business_name&quot;<\/span><span style=\"color: #24292E\">: <\/span><span style=\"color: #032F62\">&quot;\u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0645\u0631\u06a9\u0632\u06cc&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #032F62\">&quot;phone&quot;<\/span><span style=\"color: #24292E\">: <\/span><span style=\"color: #032F62\">&quot;09121234567&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #032F62\">&quot;password&quot;<\/span><span style=\"color: #24292E\">: <\/span><span style=\"color: #032F62\">&quot;12345678&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0646 \u0686\u0646\u06cc\u0646 JSON\u0627\u06cc\u060c \u06cc\u06a9 \u0645\u062f\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class RegisterRequest(\n    val businessName: String,\n    val phone: String,\n    val password: String\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">RegisterRequest<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> businessName: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> phone: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> password: <\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u0641\u0642\u0637 \u06cc\u06a9 \u0638\u0631\u0641 \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u0642\u0627\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u0647. \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u062f\u0627\u062e\u0644\u0634 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646 \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 Serialization \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 JSON \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06af\u0631 \u0646\u0627\u0645 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc API \u0628\u0627 \u0646\u0627\u0645 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc Kotlin \u06cc\u06a9\u0633\u0627\u0646 \u0646\u0628\u0627\u0634\u0647\u060c \u0628\u0627\u06cc\u062f \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u0645. \u0645\u062b\u0644\u0627\u064b \u0633\u0631\u0648\u0631 \u0627\u0632 business_name \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u062f\u0631 Kotlin \u0637\u0628\u0642 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0627\u0632 businessName \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@SerialName(\"business_name\")\nval businessName: String\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@SerialName<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;business_name&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> businessName: <\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">@SerialName \u0645\u06cc\u06af\u0647 \u0647\u0646\u06af\u0627\u0645 \u062a\u0628\u062f\u06cc\u0644 \u0622\u0628\u062c\u06a9\u062a Kotlin \u0628\u0647 JSON\u060c \u0627\u06cc\u0646 \u0645\u062a\u063a\u06cc\u0631 \u0628\u0627 \u0646\u0627\u0645 business_name \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645\u0686\u0646\u0627\u0646 \u06a9\u062f \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u0645\u062b\u0644 businessName \u062f\u0627\u0631\u06cc\u0645\u060c \u0627\u0645\u0627 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0633\u0631\u0648\u0631 \u0647\u0645 \u0631\u0639\u0627\u06cc\u062a \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0639\u0631\u06cc\u0641 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0631 Retrofit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 Retrofit \u0628\u06af\u06cc\u0645 \u0628\u0631\u0627\u06cc \u062b\u0628\u062a\u200c\u0646\u0627\u0645\u060c \u0686\u0647 \u0622\u062f\u0631\u0633\u06cc \u0631\u0648 \u0635\u062f\u0627 \u0628\u0632\u0646\u0647 \u0648 \u0686\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0631\u0648 \u0628\u0641\u0631\u0633\u062a\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@POST(\"auth\/register\")\nsuspend fun register(\n    @Body request: RegisterRequest\n): RegisterResponse\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@POST<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;auth\/register&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">register<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">@Body<\/span><span style=\"color: #24292E\"> request: <\/span><span style=\"color: #6F42C1\">RegisterRequest<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">): <\/span><span style=\"color: #6F42C1\">RegisterResponse<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">@POST \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0646\u0648\u0639 \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP \u0627\u0632 \u0646\u0648\u0639 POST \u0647\u0633\u062a. \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0628\u0627\u0639\u062b \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u06cc\u0627 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062c\u062f\u06cc\u062f \u062f\u0631 \u0633\u0631\u0648\u0631 \u0645\u06cc\u0634\u0647\u060c \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 POST \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. \u0639\u0628\u0627\u0631\u062a &#8220;auth\/register&#8221; \u0645\u0633\u06cc\u0631 Endpoint \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647. Retrofit \u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u0631\u0648 \u0628\u0647 Base URL \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 Base URL \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;api.gheymatban.com\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0622\u062f\u0631\u0633 \u06a9\u0627\u0645\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u062f\u0631\u0645\u06cc\u0627\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;api.gheymatban.com\/auth\/register\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">@Body \u06cc\u0639\u0646\u06cc \u0622\u0628\u062c\u06a9\u062a RegisterRequest \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 \u0628\u062f\u0646\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647. Serialization \u0647\u0645 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 JSON \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u06a9\u0644\u0645\u0647 suspend \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a \u0632\u0645\u0627\u0646\u200c\u0628\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647 \u0648 \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 Coroutine \u0627\u062c\u0631\u0627 \u0628\u0634\u0647. \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0645\u0645\u06a9\u0646\u0647 \u06cc\u06a9 \u06cc\u0627 \u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647 \u0637\u0648\u0644 \u0628\u06a9\u0634\u0647\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0628\u0627\u06cc\u062f Thread \u0627\u0635\u0644\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0648 \u0645\u062a\u0648\u0642\u0641 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0631\u0648\u062c\u06cc \u062a\u0627\u0628\u0639 \u0647\u0645 RegisterResponse \u0647\u0633\u062a\u061b \u06cc\u0639\u0646\u06cc Retrofit \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647 \u067e\u0627\u0633\u062e \u0645\u0648\u0641\u0642 \u0633\u0631\u0648\u0631 \u0631\u0648 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u062f\u0644 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631 \u0634\u0627\u0645\u0644 \u0686\u06cc\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0645\u0648\u0641\u0642\u060c \u0633\u0631\u0648\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0648 Token\u0647\u0627\u06cc \u0648\u0631\u0648\u062f \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class RegisterResponse(\n    val accessToken: String,\n    val refreshToken: String,\n    val business: BusinessDto\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">RegisterResponse<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> accessToken: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> refreshToken: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> business: <\/span><span style=\"color: #6F42C1\">BusinessDto<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0641\u0642\u0637 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0627\u0632 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0627\u062d\u062a\u0645\u0627\u0644\u06cc API \u0647\u0633\u062a. \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0642\u06cc\u0642 \u067e\u0627\u0633\u062e \u0628\u0627\u06cc\u062f \u0628\u0627 Backend \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">accessToken \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a\u200c\u0634\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. refreshToken \u0647\u0645 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f \u062f\u0627\u0631\u0647 \u06a9\u0647 Access Token \u0645\u0646\u0642\u0636\u06cc \u0634\u062f\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0628\u062f\u0648\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631\u060c Token \u062c\u062f\u06cc\u062f \u0628\u06af\u06cc\u0631\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a business \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0634\u0627\u0645\u0644 \u0634\u0646\u0627\u0633\u0647\u060c \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0633\u0627\u06cc\u0631 \u0645\u0634\u062e\u0635\u0627\u062a \u062d\u0633\u0627\u0628 \u0633\u0627\u062e\u062a\u0647\u200c\u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u0645\u062f\u0644 \u062f\u0631 \u0648\u0627\u0642\u0639 \u062a\u0631\u062c\u0645\u0647 \u067e\u0627\u0633\u062e JSON \u0633\u0631\u0648\u0631 \u0628\u0647 \u06cc\u06a9 \u0622\u0628\u062c\u06a9\u062a \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0627\u062e\u0644 Kotlin \u0647\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Repository\u061b \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b api.register \u0631\u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0647. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u0628\u0647 Repository \u0645\u06cc\u200c\u0633\u067e\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val response = api.register(\n    RegisterRequest(\n        businessName = businessName,\n        phone = phone,\n        password = password\n    )\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> response <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> api.<\/span><span style=\"color: #6F42C1\">register<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">RegisterRequest<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        businessName <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> businessName,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        phone <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> phone,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        password <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 Repository \u0627\u0628\u062a\u062f\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 RegisterRequest \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647. \u0628\u0639\u062f \u0627\u06cc\u0646 \u0645\u062f\u0644 \u0631\u0648 \u0628\u0631\u0627\u06cc Retrofit \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647. Retrofit \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647\u060c JSON \u0631\u0648 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631 \u0631\u0648 \u0628\u0647 RegisterResponse \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0635\u0648\u0631\u062a \u0645\u0648\u0641\u0642\u06cc\u062a\u060c Token\u0647\u0627 \u0628\u0627\u06cc\u062f \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>tokenStorage.saveTokens(\n    accessToken = response.accessToken,\n    refreshToken = response.refreshToken\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">tokenStorage.<\/span><span style=\"color: #6F42C1\">saveTokens<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    accessToken <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> response.accessToken,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    refreshToken <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> response.refreshToken<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u062e\u0634 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f \u0627\u0632 \u062b\u0628\u062a\u200c\u0646\u0627\u0645\u060c \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0648\u0627\u0631\u062f \u062d\u0633\u0627\u0628\u0634 \u0628\u0634\u0647. \u0627\u06af\u0631 Token\u0647\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0646\u0634\u0646\u060c \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647\u060c \u0627\u0645\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0627\u062c\u0631\u0627\u06cc \u0628\u0639\u062f\u06cc \u0646\u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f \u062d\u0633\u0627\u0628 \u0634\u062f\u0647. \u0627\u06cc\u0646\u062c\u0627 Repository \u062f\u0648 \u06a9\u0627\u0631 \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0647\u0645\u0627\u0647\u0646\u06af \u0645\u06cc\u200c\u06a9\u0646\u0647: \u0627\u0648\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0627\u0632 API \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f \u0646\u062a\u06cc\u062c\u0647 \u0644\u0627\u0632\u0645 \u0631\u0648 \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u0627\u0645\u0646 \u06af\u0648\u0634\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. ViewModel \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0628\u062f\u0648\u0646\u0647 Token \u062f\u0642\u06cc\u0642\u0627\u064b \u062f\u0631 \u06a9\u062c\u0627 \u06cc\u0627 \u0628\u0627 \u0686\u0647 \u0631\u0648\u0634\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u067e\u0627\u06cc\u0627\u0646\u060c Repository \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0633\u0627\u062e\u062a\u0647\u200c\u0634\u062f\u0647 \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>return response.business\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> response.business<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 \u0627\u06cc\u0646\u062c\u0627 \u0628\u0647 \u0628\u0639\u062f ViewModel \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0645\u0648\u0641\u0642 \u0628\u0648\u062f\u0647\u060c \u0627\u0645\u0627 \u0647\u0645\u0686\u0646\u0627\u0646 \u0648\u0627\u0631\u062f \u062c\u0632\u0626\u06cc\u0627\u062a \u0634\u0628\u06a9\u0647 \u0648 Token \u0646\u0634\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ViewModel \u0686\u0637\u0648\u0631 \u0648\u0636\u0639\u06cc\u062a \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0641\u0642\u0637 \u062f\u0648 \u062d\u0627\u0644\u062a \u0645\u0648\u0641\u0642 \u0648 \u0646\u0627\u0645\u0648\u0641\u0642 \u0646\u062f\u0627\u0631\u0647. \u0627\u0632 \u0644\u062d\u0638\u0647\u200c\u0627\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u0645\u06cc\u200c\u0632\u0646\u0647 \u062a\u0627 \u0648\u0642\u062a\u06cc \u062c\u0648\u0627\u0628 \u0633\u0631\u0648\u0631 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0647\u060c \u0686\u0646\u062f \u0648\u0636\u0639\u06cc\u062a \u0645\u062e\u062a\u0644\u0641 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sealed interface RegisterUiState {\n    data object Idle : RegisterUiState\n    data object Loading : RegisterUiState\n    data object Success : RegisterUiState\n    data class Error(val message: String) : RegisterUiState\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">sealed<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">interface<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">RegisterUiState<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">object<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Idle<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">RegisterUiState<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">object<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Loading<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">RegisterUiState<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">object<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Success<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">RegisterUiState<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Error<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> message: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">) : <\/span><span style=\"color: #6F42C1\">RegisterUiState<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Idle \u06cc\u0639\u0646\u06cc \u0647\u0646\u0648\u0632 \u0641\u0631\u0627\u06cc\u0646\u062f \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0634\u0631\u0648\u0639 \u0646\u0634\u062f\u0647. Loading \u06cc\u0639\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647 \u0648 \u0645\u0646\u062a\u0638\u0631 \u067e\u0627\u0633\u062e \u0647\u0633\u062a\u06cc\u0645. Success \u06cc\u0639\u0646\u06cc \u062d\u0633\u0627\u0628 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0648 Error \u06cc\u0639\u0646\u06cc \u0645\u0634\u06a9\u0644\u06cc \u0627\u062a\u0641\u0627\u0642 \u0627\u0641\u062a\u0627\u062f\u0647. \u0627\u0632 sealed interface \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0686\u0648\u0646 \u0648\u0636\u0639\u06cc\u062a \u0635\u0641\u062d\u0647 \u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u06cc\u06a9\u06cc \u0627\u0632 \u0647\u0645\u06cc\u0646 \u062d\u0627\u0644\u062a\u200c\u0647\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641\u200c\u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u0633\u0627\u062e\u062a\u0627\u0631 \u0627\u062c\u0627\u0632\u0647 \u0646\u0645\u06cc\u062f\u0647 \u0635\u0641\u062d\u0647 \u0648\u0627\u0631\u062f \u0648\u0636\u0639\u06cc\u062a \u0645\u0628\u0647\u0645\u06cc \u0628\u0634\u0647 \u06a9\u0647 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0647\u0645 Loading \u0628\u0627\u0634\u0647\u060c \u0647\u0645 Success \u0648 \u0647\u0645 Error.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u06cc\u06a9 StateFlow \u0627\u0632 \u0627\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>private val _uiState =\n    MutableStateFlow&lt;RegisterUiState>(RegisterUiState.Idle)\n\nval uiState = _uiState.asStateFlow()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">private<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> _uiState <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">MutableStateFlow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">RegisterUiState<\/span><span style=\"color: #24292E\">&gt;(RegisterUiState.Idle)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> uiState <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> _uiState.<\/span><span style=\"color: #6F42C1\">asStateFlow<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0633\u062e\u0647 _uiState \u062e\u0635\u0648\u0635\u06cc \u0648 \u0642\u0627\u0628\u0644 \u062a\u063a\u06cc\u06cc\u0631\u0647\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0641\u0642\u0637 \u062e\u0648\u062f ViewModel \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0648\u0636\u0639\u06cc\u062a \u0631\u0648 \u0639\u0648\u0636 \u06a9\u0646\u0647. \u0646\u0633\u062e\u0647 uiState \u0639\u0645\u0648\u0645\u06cc \u0627\u0645\u0627 \u0641\u0642\u0637 \u062e\u0648\u0627\u0646\u062f\u0646\u06cc\u0647. \u0635\u0641\u062d\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u0634 \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647\u060c \u0627\u0645\u0627 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0645\u0642\u062f\u0627\u0631\u0634 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647. \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u062c\u0644\u0648\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u06a9\u0646\u062a\u0631\u0644\u200c\u0646\u0634\u062f\u0647 State \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u0631\u0648\u06cc\u062f\u0627\u062f \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 ViewModel \u062a\u0646\u0647\u0627 \u0645\u0631\u062c\u0639 \u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u062c\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u062b\u0628\u062a\u200c\u0646\u0627\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc\u060c ViewModel \u0639\u0645\u0644\u06cc\u0627\u062a \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0631\u0648 \u062f\u0627\u062e\u0644 Coroutine \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>_uiState.value = RegisterUiState.Loading\n\nviewModelScope.launch {\n    repository.register(\n        businessName = businessName,\n        phone = phone,\n        password = password\n    )\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">_uiState.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> RegisterUiState.Loading<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">viewModelScope.<\/span><span style=\"color: #6F42C1\">launch<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    repository.<\/span><span style=\"color: #6F42C1\">register<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        businessName <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> businessName,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        phone <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> phone,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        password <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c State \u0631\u0648\u06cc Loading \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. Compose \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647 \u0648 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u06a9\u0645\u0647 \u0631\u0648 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u06a9\u0646\u0647 \u06cc\u0627 \u06cc\u06a9 \u0646\u0634\u0627\u0646\u06af\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 viewModelScope.launch \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0686\u0648\u0646 \u062a\u0627\u0628\u0639 Repository \u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a suspend \u062f\u0627\u0631\u0647. viewModelScope \u0647\u0645 \u0628\u0647 \u0639\u0645\u0631 ViewModel \u0645\u062a\u0635\u0644\u0647. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0635\u0641\u062d\u0647 \u0631\u0648 \u062a\u0631\u06a9 \u06a9\u0646\u0647 \u0648 ViewModel \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u0647\u060c Coroutine\u0647\u0627\u06cc \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 \u0627\u0648\u0646 \u0647\u0645 \u0644\u063a\u0648 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u0627\u0633\u062e \u0645\u0648\u0641\u0642\u060c \u0648\u0636\u0639\u06cc\u062a \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>_uiState.value = RegisterUiState.Success\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">_uiState.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> RegisterUiState.Success<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0647\u0645\u06cc\u0634\u0647 \u0645\u0648\u0641\u0642 \u0646\u06cc\u0633\u062a. \u0645\u0645\u06a9\u0646\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0627\u0634\u0647\u060c \u0633\u0631\u0648\u0631 \u062c\u0648\u0627\u0628 \u0646\u062f\u0647\u060c \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0642\u0628\u0644\u0627\u064b \u062b\u0628\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0631\u0633\u0627\u0644\u06cc \u0645\u0639\u062a\u0628\u0631 \u0646\u0628\u0627\u0634\u0646. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u062e\u0637\u0627 \u0631\u0648 \u0647\u0645 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>try {\n    repository.register(businessName, phone, password)\n    _uiState.value = RegisterUiState.Success\n} catch (error: Exception) {\n    _uiState.value = RegisterUiState.Error(\n        message = error.toUserMessage()\n    )\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">try<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    repository.<\/span><span style=\"color: #6F42C1\">register<\/span><span style=\"color: #24292E\">(businessName, phone, password)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    _uiState.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> RegisterUiState.Success<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">} <\/span><span style=\"color: #D73A49\">catch<\/span><span style=\"color: #24292E\"> (error: <\/span><span style=\"color: #6F42C1\">Exception<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    _uiState.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> RegisterUiState.<\/span><span style=\"color: #6F42C1\">Error<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        message <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> error.<\/span><span style=\"color: #6F42C1\">toUserMessage<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">try \u0628\u062e\u0634\u06cc \u0627\u0632 \u06a9\u062f\u0647 \u06a9\u0647 \u0645\u0645\u06a9\u0646\u0647 \u062e\u0637\u0627 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0647. \u0627\u06af\u0631 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0645\u0648\u0641\u0642 \u0628\u0627\u0634\u0647\u060c State \u0628\u0647 Success \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06af\u0631 Exception \u0631\u062e \u0628\u062f\u0647\u060c \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f \u0648\u0627\u0631\u062f catch \u0645\u06cc\u0634\u0647 \u0648 \u0648\u0636\u0639\u06cc\u062a \u062e\u0637\u0627 \u0628\u0647 \u0635\u0641\u062d\u0647 \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u062a\u0627\u0628\u0639 toUserMessage \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0641\u0631\u0636\u06cc\u0647 \u06a9\u0647 \u062e\u0637\u0627\u06cc \u0641\u0646\u06cc \u0631\u0648 \u0628\u0647 \u067e\u06cc\u0627\u0645 \u0642\u0627\u0628\u0644 \u0641\u0647\u0645 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0628\u0647 \u062c\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0639\u0628\u0627\u0631\u062a \u067e\u06cc\u0686\u06cc\u062f\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 SocketTimeoutException\u060c \u067e\u06cc\u0627\u0645 \u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631 \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0637\u0648\u0644 \u06a9\u0634\u06cc\u062f \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0686\u0646\u062f\u0628\u0627\u0631 \u062b\u0628\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0686\u0646\u062f \u0628\u0627\u0631 \u067e\u0634\u062a \u0633\u0631 \u0647\u0645 \u0636\u0631\u0628\u0647 \u0628\u0632\u0646\u0647. \u0627\u06af\u0631 \u062f\u06a9\u0645\u0647 \u0647\u0645\u0686\u0646\u0627\u0646 \u0641\u0639\u0627\u0644 \u0628\u0645\u0648\u0646\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u0686\u0646\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06cc\u06a9\u0633\u0627\u0646 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0628\u0634\u0647. \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642\u060c \u0647\u0646\u06af\u0627\u0645 Loading \u062f\u06a9\u0645\u0647 \u0631\u0648 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">Button(\n    enabled = uiState !is RegisterUiState.Loading,\n    onClick = {\n        viewModel.register(businessName, phone, password)\n    }\n)\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0635\u0648\u0635\u06cc\u062a <code>enabled<\/code> \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u06a9\u0645\u0647 \u0642\u0627\u0628\u0644 \u06a9\u0644\u06cc\u06a9 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0646\u0647. \u0648\u0642\u062a\u06cc State \u0627\u0632 \u0646\u0648\u0639 Loading \u0628\u0627\u0634\u0647\u060c \u0646\u062a\u06cc\u062c\u0647 \u0634\u0631\u0637 false \u0645\u06cc\u0634\u0647 \u0648 \u062f\u06a9\u0645\u0647 \u0645\u0648\u0642\u062a\u0627\u064b \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 \u06cc\u06a9 \u062e\u0637 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u062c\u0644\u0648\u06cc \u062e\u0637\u0627\u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647\u061b \u0627\u0632 \u0633\u0627\u062e\u062a \u0686\u0646\u062f \u062d\u0633\u0627\u0628 \u062a\u06a9\u0631\u0627\u0631\u06cc \u06af\u0631\u0641\u062a\u0647 \u062a\u0627 \u0627\u0631\u0633\u0627\u0644 \u0686\u0646\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0648 \u06af\u06cc\u062c \u0634\u062f\u0646 \u06a9\u0627\u0631\u0628\u0631. \u062f\u0627\u062e\u0644 \u062f\u06a9\u0645\u0647 \u0647\u0645 \u0645\u06cc\u0634\u0647 \u0628\u0631\u0627\u0633\u0627\u0633 \u0648\u0636\u0639\u06cc\u062a\u060c \u0645\u062a\u0646 \u06cc\u0627 Loading \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (uiState is RegisterUiState.Loading) {\n    CircularProgressIndicator()\n} else {\n    Text(\"\u062b\u0628\u062a\u200c\u0646\u0627\u0645\")\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (uiState <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> RegisterUiState.Loading) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">CircularProgressIndicator<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">} <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">Text<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u062b\u0628\u062a\u200c\u0646\u0627\u0645&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u0633\u062a\u060c \u0646\u0634\u0627\u0646\u06af\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u062f\u0631 \u062d\u0627\u0644\u062a \u0639\u0627\u062f\u06cc \u0647\u0645 \u0645\u062a\u0646 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 \u0628\u0627\u0632\u062e\u0648\u0631\u062f \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u06af\u0647 \u06a9\u0647 \u0644\u0645\u0633 \u062f\u06a9\u0645\u0647 \u062b\u0628\u062a \u0634\u062f\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0635\u0641\u062d\u0647 \u0686\u0637\u0648\u0631 \u0645\u0648\u0641\u0642\u06cc\u062a \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0628\u0627\u06cc\u062f StateFlow \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val uiState by viewModel.uiState.collectAsStateWithLifecycle()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> uiState <\/span><span style=\"color: #D73A49\">by<\/span><span style=\"color: #24292E\"> viewModel.uiState.<\/span><span style=\"color: #6F42C1\">collectAsStateWithLifecycle<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637 StateFlow \u062f\u0627\u062e\u0644 ViewModel \u0631\u0648 \u0628\u0647 State \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 Compose \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 ViewModel \u0645\u0642\u062f\u0627\u0631 <code>uiState<\/code> \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647\u060c Compose \u0645\u062a\u0648\u062c\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0648\u0627\u0628\u0633\u062a\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0639\u0628\u0627\u0631\u062a <code>WithLifecycle<\/code> \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u062c\u0645\u0639\u200c\u0622\u0648\u0631\u06cc State \u0628\u0627 \u0686\u0631\u062e\u0647 \u062d\u06cc\u0627\u062a \u0635\u0641\u062d\u0647 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0627\u0634\u0647. \u06cc\u0639\u0646\u06cc \u0648\u0642\u062a\u06cc \u0635\u0641\u062d\u0647 \u062f\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0639\u0627\u0644 \u0646\u06cc\u0633\u062a\u060c \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0648 \u062c\u0645\u0639\u200c\u0622\u0648\u0631\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0647\u0645 \u0645\u0635\u0631\u0641 \u0645\u0646\u0627\u0628\u0639 \u0631\u0648 \u06a9\u0645\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0645 \u0627\u0632 \u0628\u0631\u062e\u06cc \u062e\u0637\u0627\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Lifecycle \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 \u0645\u06cc\u0634\u0647 \u062f\u0631 \u0635\u0648\u0631\u062a \u0645\u0648\u0641\u0642\u06cc\u062a\u060c \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc \u06a9\u0631\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">LaunchedEffect(uiState) {\n    if (uiState is RegisterUiState.Success) {\n        navController.navigate(&#8220;home&#8221;) {\n            popUpTo(&#8220;register&#8221;) {\n                inclusive = true\n            }\n        }\n    }\n}\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LaunchedEffect \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 \u0627\u062b\u0631 \u062c\u0627\u0646\u0628\u06cc \u062f\u0631 \u0648\u0627\u06a9\u0646\u0634 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 State \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. Navigation \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0638\u0627\u0647\u0631 \u06cc\u06a9 Composable \u0646\u06cc\u0633\u062a\u061b \u06cc\u06a9 \u0639\u0645\u0644 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0647\u060c \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u062f\u0627\u062e\u0644 LaunchedEffect \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0648\u0642\u062a\u06cc State \u0628\u0647 Success \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 Home \u0645\u06cc\u0634\u0647. \u0628\u062e\u0634 popUpTo(&#8220;register&#8221;) \u0635\u0641\u062d\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0631\u0648 \u0627\u0632 Back Stack \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647. inclusive = true \u0647\u0645 \u06cc\u0639\u0646\u06cc \u062e\u0648\u062f \u0635\u0641\u062d\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0646\u06cc\u0632 \u062d\u0630\u0641 \u0628\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 Home \u062f\u06a9\u0645\u0647 Back \u0631\u0648 \u0628\u0632\u0646\u0647\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647 \u0641\u0631\u0645 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0628\u0631\u0646\u0645\u06cc\u200c\u06af\u0631\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u06a9\u0648\u0686\u06a9\u06cc\u0647\u060c \u0627\u0645\u0627 \u0631\u0641\u062a\u0627\u0631 Navigation \u0631\u0648 \u062d\u0631\u0641\u0647\u200c\u0627\u06cc\u200c\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u062e\u062a \u062d\u0633\u0627\u0628\u060c \u0628\u0631\u06af\u0634\u062a\u0646 \u0628\u0647 \u0641\u0631\u0645 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0645\u0639\u0646\u0627\u06cc\u06cc \u0646\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0637\u0627 \u0686\u0637\u0648\u0631 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 State \u0627\u0632 \u0646\u0648\u0639 Error \u0628\u0627\u0634\u0647\u060c \u0635\u0641\u062d\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (uiState is RegisterUiState.Error) {\n    Text(\n        text = (uiState as RegisterUiState.Error).message\n    )\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (uiState <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> RegisterUiState.Error) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">Text<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        text <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> (uiState <\/span><span style=\"color: #D73A49\">as<\/span><span style=\"color: #24292E\"> RegisterUiState.Error).message<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u062f\u0646 State \u06a9\u0645\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc\u0647. \u0633\u0627\u062e\u062a\u0627\u0631 <code>when<\/code> \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062e\u0648\u0627\u0646\u0627\u062a\u0631 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>when (val state = uiState) {\n    RegisterUiState.Idle -> Unit\n    RegisterUiState.Loading -> LoadingView()\n    RegisterUiState.Success -> Unit\n    is RegisterUiState.Error -> ErrorText(state.message)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">when<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> state <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> uiState) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    RegisterUiState.Idle <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> Unit<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    RegisterUiState.Loading <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">LoadingView<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    RegisterUiState.Success <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> Unit<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> RegisterUiState.Error <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ErrorText<\/span><span style=\"color: #24292E\">(state.message)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>when<\/code> \u062a\u0645\u0627\u0645 \u062d\u0627\u0644\u062a\u200c\u0647\u0627\u06cc RegisterUiState \u0631\u0648 \u062c\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0686\u0648\u0646 State \u0628\u0647 \u0634\u06a9\u0644 <code>sealed<\/code> \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647\u060c Kotlin \u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u0686\u0647 \u062d\u0627\u0644\u062a\u200c\u0647\u0627\u06cc\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646. \u0627\u06af\u0631 \u0628\u0639\u062f\u0627\u064b \u062d\u0627\u0644\u062a \u062c\u062f\u06cc\u062f\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645\u060c \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 \u06cc\u0627\u062f\u0622\u0648\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u0642\u0633\u0645\u062a \u0647\u0645 \u0628\u0627\u06cc\u062f \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0632\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u0637\u0631\u0627\u062d\u06cc State \u0628\u0647 \u0634\u06a9\u0644 \u0645\u0634\u062e\u0635 \u0648 \u0645\u062d\u062f\u0648\u062f \u0627\u0633\u062a. \u0628\u0647 \u062c\u0627\u06cc \u0686\u0646\u062f \u0645\u062a\u063a\u06cc\u0631 \u067e\u0631\u0627\u06a9\u0646\u062f\u0647 \u0645\u062b\u0644 isLoading\u060c isSuccess \u0648 errorMessage\u060c \u06cc\u06a9 \u0648\u0636\u0639\u06cc\u062a \u0648\u0627\u062d\u062f \u062f\u0627\u0631\u06cc\u0645 \u06a9\u0647 \u062f\u0642\u06cc\u0642\u0627\u064b \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0635\u0641\u062d\u0647 \u062f\u0631 \u0686\u0647 \u062d\u0627\u0644\u062a\u06cc \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0637\u0627\u06cc \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0642\u0628\u0644\u0627\u064b \u062b\u0628\u062a \u0634\u062f\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0647 \u062e\u0637\u0627\u0647\u0627 \u0641\u0646\u06cc \u0646\u06cc\u0633\u062a\u0646. \u06af\u0627\u0647\u06cc \u0633\u0631\u0648\u0631 \u0633\u0627\u0644\u0645\u0647\u060c \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0632 \u0646\u0638\u0631 \u0645\u0646\u0637\u0642 \u0628\u0631\u0646\u0627\u0645\u0647 \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644 \u0646\u06cc\u0633\u062a. \u0645\u062b\u0644\u0627\u064b \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0642\u0628\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062b\u0628\u062a \u0634\u062f\u0647. \u0633\u0631\u0648\u0631 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u06a9\u062f HTTP \u0645\u062b\u0644 409 Conflict \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647. Repository \u06cc\u0627 \u0644\u0627\u06cc\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u06cc\u06a9 \u062e\u0637\u0627\u06cc \u0642\u0627\u0628\u0644 \u0641\u0647\u0645 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (response.code() == 409) {\n    throw DuplicatePhoneException()\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (response.<\/span><span style=\"color: #6F42C1\">code<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">409<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">throw<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">DuplicatePhoneException<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u062f 409 \u06cc\u0639\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0627 \u0648\u0636\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0633\u0631\u0648\u0631 \u062a\u0639\u0627\u0631\u0636 \u062f\u0627\u0631\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u060c \u062a\u0639\u0627\u0631\u0636 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0627\u0632 \u0642\u0628\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0628\u0639\u062f \u0627\u06cc\u0646 \u062e\u0637\u0627 \u0628\u0647 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0645\u0646\u0627\u0633\u0628 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>is DuplicatePhoneException ->\n    \"\u0627\u06cc\u0646 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0642\u0628\u0644\u0627\u064b \u062b\u0628\u062a \u0634\u062f\u0647\"\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> DuplicatePhoneException <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;\u0627\u06cc\u0646 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0642\u0628\u0644\u0627\u064b \u062b\u0628\u062a \u0634\u062f\u0647&quot;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f \u0645\u062a\u0646 \u062e\u0627\u0645 \u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631 \u06cc\u0627 \u0646\u0627\u0645 Exception \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645. \u067e\u06cc\u0627\u0645 \u062e\u0637\u0627 \u0628\u0627\u06cc\u062f \u0628\u06af\u0647 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0627\u0641\u062a\u0627\u062f\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc \u062d\u0644\u0634 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u0645\u062b\u0644\u0627\u064b \u067e\u06cc\u0627\u0645 \u062e\u0637\u0627\u06cc 409 \u0647\u06cc\u0686 \u06a9\u0645\u06a9\u06cc \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0642\u0628\u0644\u0627\u064b \u062b\u0628\u062a \u0634\u062f\u0647\u061b \u0648\u0627\u0631\u062f \u062d\u0633\u0627\u0628 \u0634\u0648 \u0647\u0645 \u0645\u0634\u06a9\u0644 \u0631\u0648 \u062a\u0648\u0636\u06cc\u062d \u0645\u06cc\u062f\u0647 \u0648 \u0647\u0645 \u0645\u0633\u06cc\u0631 \u0628\u0639\u062f\u06cc \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646 \u0645\u0645\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062f\u0631\u0633 \u0642\u0628\u0644\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 Offline First \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u06cc\u0645. \u0627\u0645\u0627 \u0647\u0645\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a\u200c\u0647\u0627 \u0631\u0648 \u0646\u0645\u06cc\u200c\u0634\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u06a9\u0627\u0645\u0644 \u0622\u0641\u0644\u0627\u06cc\u0646 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f. \u0633\u0627\u062e\u062a \u062d\u0633\u0627\u0628 \u062c\u062f\u06cc\u062f \u06cc\u06a9\u06cc \u0627\u0632 \u0647\u0645\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f\u0647\u060c \u0686\u0648\u0646 \u0633\u0631\u0648\u0631 \u0628\u0627\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u062a\u06a9\u0631\u0627\u0631\u06cc \u0646\u0628\u0627\u0634\u0647\u060c \u0634\u0646\u0627\u0633\u0647 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0647 \u0648 Token \u0645\u0639\u062a\u0628\u0631 \u0635\u0627\u062f\u0631 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0627\u0634\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0648\u0627\u0646\u0645\u0648\u062f \u06a9\u0646\u0647 \u06a9\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06a9\u0627\u0645\u0644 \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a \u0628\u0647\u062a\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 \u0641\u0631\u0645 \u062d\u0641\u0638 \u0628\u0634\u0646 \u0648 \u067e\u06cc\u0627\u0645 \u0645\u0646\u0627\u0633\u0628\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">&#8220;No internet connection&#8221;\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0628\u062a\u0647 \u067e\u06cc\u0627\u0645 \u0648\u0627\u0642\u0639\u06cc \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0641\u0627\u0631\u0633\u06cc \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0635\u0644 \u0646\u06cc\u0633\u062a. \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0631\u0645 \u062d\u0641\u0638 \u0634\u062f\u0647\u061b \u0628\u0639\u062f \u0627\u0632 \u0627\u062a\u0635\u0627\u0644 \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 Offline First \u0628\u0647 \u0645\u0639\u0646\u06cc \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u062c\u0639\u0644\u06cc \u0646\u06cc\u0633\u062a. \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0646\u0628\u0648\u062f \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0631\u0641\u062a\u0627\u0631 \u0645\u0646\u0627\u0633\u0628\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648\u0627\u0631\u062f\u0634\u062f\u0647 \u0631\u0648 \u0627\u0632 \u0628\u06cc\u0646 \u0646\u0628\u0631\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0645\u062c\u0628\u0648\u0631 \u0646\u06a9\u0646\u0647 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0627\u06cc\u067e \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0639\u062f \u0627\u0632 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0686\u0647 \u0686\u06cc\u0632\u0647\u0627\u06cc\u06cc \u0628\u0627\u06cc\u062f \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0646\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0646\u060c Token\u0647\u0627\u06cc Session \u0647\u0633\u062a\u0646. \u0627\u0645\u0627 \u0645\u0645\u06a9\u0646\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0635\u0644\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0647\u0645 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>businessDao.insert(\n    response.business.toEntity()\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">businessDao.<\/span><span style=\"color: #6F42C1\">insert<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    response.business.<\/span><span style=\"color: #6F42C1\">toEntity<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">response.business \u0645\u062f\u0644\u06cc\u0647 \u06a9\u0647 \u0627\u0632 API \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647. \u0627\u0645\u0627 \u0645\u062f\u0644 API \u0644\u0632\u0648\u0645\u0627\u064b \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647. \u062a\u0627\u0628\u0639 toEntity \u0645\u062f\u0644 \u0634\u0628\u06a9\u0647 \u0631\u0648 \u0628\u0647 \u0645\u062f\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 JSON \u0633\u0631\u0648\u0631 \u0648 \u0633\u0627\u062e\u062a\u0627\u0631 \u062c\u062f\u0648\u0644 Room \u0628\u0647 \u0647\u0645 \u0648\u0627\u0628\u0633\u062a\u0647 \u0646\u0634\u0646. \u0627\u06af\u0631 API \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u060c \u0645\u062c\u0628\u0648\u0631 \u0646\u06cc\u0633\u062a\u06cc\u0645 \u06a9\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u062d\u0644\u06cc \u0631\u0648 \u0647\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u06cc\u0645. \u0628\u0639\u062f \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 Token \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0635\u0641\u062d\u0647 Home \u0631\u0648 \u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0644\u06cc \u062a\u063a\u0630\u06cc\u0647 \u06a9\u0646\u0647. \u0627\u06cc\u0646\u062c\u0627 \u0645\u0641\u0627\u0647\u06cc\u0645 Repository\u060c Room\u060c Cache \u0648 Offline First \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647 \u0647\u0645 \u0648\u0635\u0644 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06cc\u06a9 \u062f\u06a9\u0645\u0647 \u0646\u06cc\u0633\u062a\u061b \u06cc\u06a9 \u0641\u0631\u0627\u06cc\u0646\u062f\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u0686\u0646\u062f \u0641\u06cc\u0644\u062f \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647 \u0648 \u06cc\u06a9 \u062f\u06a9\u0645\u0647 \u0631\u0648 \u0644\u0645\u0633 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0645\u0627 \u067e\u0634\u062a \u0647\u0645\u06cc\u0646 \u062f\u06a9\u0645\u0647\u060c \u0686\u0646\u062f \u0627\u062a\u0641\u0627\u0642 \u0647\u0645\u0627\u0647\u0646\u06af \u0631\u062e \u0645\u06cc\u062f\u0647. \u0648\u0631\u0648\u062f\u06cc\u200c\u0647\u0627 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0645\u06cc\u0634\u0646\u060c State \u0628\u0647 Loading \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0645\u062f\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647\u060c Retrofit JSON \u0631\u0648 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647\u060c \u0633\u0631\u0648\u0631 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Token\u0647\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0646\u060c Repository \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 ViewModel \u0648\u0636\u0639\u06cc\u062a \u0645\u0648\u0641\u0642\u06cc\u062a \u0631\u0648 \u0628\u0647 \u0635\u0641\u062d\u0647 \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a Navigation \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f Home \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u062e\u0648\u062f \u0641\u0631\u0645 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0646\u0628\u0648\u062f. \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u060c <strong>\u062a\u0642\u0633\u06cc\u0645 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a\u200c\u0647\u0627 \u062f\u0631 \u06cc\u06a9 \u0641\u0631\u0627\u06cc\u0646\u062f \u0648\u0627\u0642\u0639\u06cc<\/strong> \u0628\u0648\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u0648\u0636\u0639\u06cc\u062a \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. ViewModel \u0641\u0631\u0627\u06cc\u0646\u062f \u0648 State \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. Repository \u06a9\u0627\u0631\u0647\u0627\u06cc \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0647\u0645\u0627\u0647\u0646\u06af \u0645\u06cc\u200c\u06a9\u0646\u0647. Retrofit \u0628\u0627 \u0633\u0631\u0648\u0631 \u062d\u0631\u0641 \u0645\u06cc\u200c\u0632\u0646\u0647. TokenStorage \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648\u0631\u0648\u062f \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u0648 Room \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u062a\u0645\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u0647\u0627 \u0631\u0648 \u062f\u0627\u062e\u0644 <code>onClick<\/code> \u062f\u06a9\u0645\u0647 \u0645\u06cc\u200c\u0646\u0648\u0634\u062a\u06cc\u0645\u060c \u0634\u0627\u06cc\u062f \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631 \u067e\u06cc\u0634 \u0645\u06cc\u200c\u0631\u0641\u062a\u06cc\u0645\u061b \u0627\u0645\u0627 \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f \u06a9\u062f\u06cc \u0634\u0644\u0648\u063a\u060c \u0634\u06a9\u0646\u0646\u062f\u0647 \u0648 \u063a\u06cc\u0631\u0642\u0627\u0628\u0644 \u0622\u0632\u0645\u0627\u06cc\u0634 \u062f\u0627\u0634\u062a\u06cc\u0645. \u0645\u0639\u0645\u0627\u0631\u06cc \u062f\u0631\u0633\u062a \u0628\u0627\u0639\u062b \u0646\u0645\u06cc\u0634\u0647 \u06a9\u062f \u06a9\u0645\u062a\u0631\u06cc \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645\u061b \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0647\u0631 \u06a9\u062f \u0631\u0648 \u062f\u0631 \u062c\u0627\u06cc \u062f\u0631\u0633\u062a \u062e\u0648\u062f\u0634 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u067e\u0627\u06cc\u0627\u0646\u060c \u0645\u0633\u06cc\u0631 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u062f\u0631 \u06cc\u06a9 \u062c\u0645\u0644\u0647 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f: \u0635\u0641\u062d\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0631\u0648 \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c ViewModel \u0641\u0631\u0627\u06cc\u0646\u062f \u0631\u0648 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Repository \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647 \u0648 State \u0646\u062a\u06cc\u062c\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647 \u0635\u0641\u062d\u0647 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0628\u06cc\u0633\u062a\u200c\u0648\u062f\u0648\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062f\u0648\u0628\u0627\u0631\u0647 \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u0634\u0647\u060c \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0686\u0637\u0648\u0631 \u0647\u0648\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc \u0627\u0648\u0646 \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u0648\u0631\u0648\u062f \u0628\u0647 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0641\u0642\u0637 \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647\u060c \u0627\u0645\u0627 \u0648\u0631\u0648\u062f \u0645\u0645\u06a9\u0646\u0647 \u0628\u0627\u0631\u0647\u0627 \u062a\u06a9\u0631\u0627\u0631 \u0628\u0634\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u062c\u062f\u06cc\u062f \u0646\u0635\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0632 \u062d\u0633\u0627\u0628 \u062e\u0627\u0631\u062c \u0645\u06cc\u0634\u0647\u060c Token \u0642\u0628\u0644\u06cc \u0645\u0646\u0642\u0636\u06cc \u0645\u06cc\u0634\u0647 \u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u067e\u0627\u06a9 \u0645\u06cc\u0634\u0647. \u062f\u0631 \u0647\u0645\u0647 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u200c\u0647\u0627\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648\u0631\u0648\u062f \u0631\u0648 \u0628\u06af\u06cc\u0631\u0647 \u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0628\u062e\u0648\u0627\u062f \u0647\u0648\u06cc\u062a \u0627\u0648\u0646 \u0631\u0648 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u06af\u0627\u0647 \u0627\u0648\u0644\u060c \u0648\u0631\u0648\u062f \u062e\u06cc\u0644\u06cc \u0634\u0628\u06cc\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u062f\u0631\u0633\u062a \u0628\u0648\u062f\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u060c Token \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0645\u0627 \u062a\u0641\u0627\u0648\u062a \u0645\u0647\u0645\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u062f\u0631 \u062b\u0628\u062a\u200c\u0646\u0627\u0645\u060c \u0633\u0631\u0648\u0631 \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u062c\u062f\u06cc\u062f \u0645\u06cc\u200c\u0633\u0627\u0632\u0647\u061b \u062f\u0631 \u0648\u0631\u0648\u062f\u060c \u0633\u0631\u0648\u0631 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u0645\u0648\u062c\u0648\u062f \u0631\u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647\u060c \u0631\u0645\u0632 \u0648\u0627\u0631\u062f\u0634\u062f\u0647 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647 \u0648 \u0641\u0642\u0637 \u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u0637\u0627\u0628\u0642\u060c \u0627\u062c\u0627\u0632\u0647 \u0648\u0631\u0648\u062f \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u06a9\u0644\u06cc \u0648\u0631\u0648\u062f \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">LoginScreen<br>\u2193<br>LoginViewModel<br>\u2193<br>AuthRepository<br>\u2193<br>AuthApi<br>\u2193<br>Server<br>\u2193<br>Access Token + Refresh Token<br>\u2193<br>TokenStorage<br>\u2193<br>Home<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0638\u0627\u0647\u0631 \u0645\u0633\u06cc\u0631 \u0634\u0628\u06cc\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645\u0647\u060c \u0627\u0645\u0627 \u0645\u0639\u0646\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u0641\u0631\u0642 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0628\u0627\u0631 \u0633\u0631\u0648\u0631 \u0686\u06cc\u0632\u06cc \u0646\u0645\u06cc\u200c\u0633\u0627\u0632\u0647\u061b \u0641\u0642\u0637 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0622\u06cc\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0642\u0639\u0627\u064b \u0647\u0645\u0648\u0646 \u0641\u0631\u062f\u06cc\u0647 \u06a9\u0647 \u0627\u062f\u0639\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06cc\u0627 \u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0635\u0641\u062d\u0647 \u0648\u0631\u0648\u062f \u0686\u0647 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a\u06cc \u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0648\u0631\u0648\u062f \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u06af\u06cc\u0631\u0647\u060c \u0631\u0648\u06cc\u062f\u0627\u062f \u06a9\u0644\u06cc\u06a9 \u0631\u0648 \u0628\u0647 ViewModel \u0628\u0641\u0631\u0633\u062a\u0647 \u0648 \u0648\u0636\u0639\u06cc\u062a \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647. \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0646\u0628\u0627\u06cc\u062f \u062f\u0631\u0628\u0627\u0631\u0647 \u0631\u0645\u0632\u0646\u06af\u0627\u0631\u06cc \u0631\u0645\u0632\u060c \u062c\u0633\u062a\u200c\u0648\u062c\u0648\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u06cc\u0627 \u0633\u0627\u062e\u062a Token \u0686\u06cc\u0632\u06cc \u0628\u062f\u0648\u0646\u0647. \u0628\u0631\u0627\u06cc \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0631\u0645\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0627\u0632 rememberSaveable \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>var phone by rememberSaveable { mutableStateOf(\"\") }\nvar password by rememberSaveable { mutableStateOf(\"\") }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">var<\/span><span style=\"color: #24292E\"> phone <\/span><span style=\"color: #D73A49\">by<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">rememberSaveable<\/span><span style=\"color: #24292E\"> { <\/span><span style=\"color: #6F42C1\">mutableStateOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">) }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">var<\/span><span style=\"color: #24292E\"> password <\/span><span style=\"color: #D73A49\">by<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">rememberSaveable<\/span><span style=\"color: #24292E\"> { <\/span><span style=\"color: #6F42C1\">mutableStateOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">) }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 rememberSaveable \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0627\u06af\u0631 Activity \u062f\u0648\u0628\u0627\u0631\u0647 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u060c \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u0648\u0627\u0631\u062f\u0634\u062f\u0647 \u0641\u0648\u0631\u0627\u064b \u0646\u0627\u067e\u062f\u06cc\u062f \u0646\u0634\u0646. \u0627\u0644\u0628\u062a\u0647 \u062f\u0631\u0628\u0627\u0631\u0647 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u0627\u06cc\u062f \u06a9\u0645\u06cc \u0645\u062d\u062a\u0627\u0637 \u0628\u0627\u0634\u06cc\u0645. \u062d\u0641\u0638 \u0645\u0648\u0642\u062a \u0645\u0642\u062f\u0627\u0631 \u0631\u0645\u0632 \u062f\u0631 State \u0635\u0641\u062d\u0647 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u0641\u0631\u0645 \u0648\u0631\u0648\u062f \u0639\u0627\u062f\u06cc\u0647\u060c \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0627\u0648\u0646 \u0631\u0648 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633\u060c Log \u06cc\u0627 \u062d\u0627\u0641\u0638\u0647 \u062f\u0627\u0626\u0645\u06cc \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u0645. \u0635\u0641\u062d\u0647 \u0648\u0631\u0648\u062f \u0641\u0642\u0637 \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u062d\u0627\u0644 \u062a\u06a9\u0645\u06cc\u0644 \u0641\u0631\u0645\u0647\u060c \u0631\u0645\u0632 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0645\u0648\u0641\u0642\u060c \u062f\u06cc\u06af\u0631 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u062d\u0641\u0638 \u062e\u0648\u062f \u0631\u0645\u0632 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647\u061b \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647 Token\u0647\u0633\u062a\u060c \u0646\u0647 Password.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0631\u0633\u0627\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0647 ViewModel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u0648\u0631\u0648\u062f \u0645\u06cc\u200c\u0632\u0646\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0631\u0645 \u0628\u0647 ViewModel \u062a\u062d\u0648\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>viewModel.login(\n    phone = phone.trim(),\n    password = password\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">viewModel.<\/span><span style=\"color: #6F42C1\">login<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    phone <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> phone.<\/span><span style=\"color: #6F42C1\">trim<\/span><span style=\"color: #24292E\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    password <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0627\u0632 trim \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u06cc\u0645 \u062a\u0627 \u0641\u0627\u0635\u0644\u0647\u200c\u0647\u0627\u06cc \u0627\u0628\u062a\u062f\u0627 \u0648 \u0627\u0646\u062a\u0647\u0627\u06cc \u0627\u0648\u0646 \u062d\u0630\u0641 \u0628\u0634\u0646. \u0627\u0645\u0627 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0648 \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u06cc\u0645\u060c \u0686\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0686\u06cc\u0632\u06cc \u0631\u0648 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0631\u0645\u0632 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647\u060c \u062e\u0648\u062f\u0633\u0631\u0627\u0646\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647. \u0627\u06cc\u0646 \u06a9\u062f \u0646\u0645\u06cc\u06af\u0647 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0648\u0635\u0644 \u0634\u0648. \u0641\u0642\u0637 \u0628\u0647 ViewModel \u0645\u06cc\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648\u0631\u0648\u062f \u062f\u0627\u062f\u0647 \u0648 \u0627\u06cc\u0646 \u0647\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc\u0647 \u06a9\u0647 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0627\u06af\u0631 \u0628\u0639\u062f\u0627\u064b \u0631\u0648\u0634 \u0648\u0631\u0648\u062f \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u060c \u0645\u062b\u0644\u0627\u064b \u0648\u0631\u0648\u062f \u0628\u0627 \u0627\u06cc\u0645\u06cc\u0644\u060c \u06a9\u062f \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u06cc\u0627 \u0627\u062b\u0631 \u0627\u0646\u06af\u0634\u062a \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u060c \u0635\u0641\u062d\u0647 \u0645\u062c\u0628\u0648\u0631 \u0646\u0628\u0627\u0634\u0647 \u062a\u0645\u0627\u0645 \u062c\u0632\u0626\u06cc\u0627\u062a \u0641\u0646\u06cc \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0648\u0631\u0648\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0628\u0627\u06cc\u062f \u062e\u0637\u0627\u0647\u0627\u06cc \u0633\u0627\u062f\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645. \u0645\u062b\u0644\u0627\u064b \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u062e\u0627\u0644\u06cc \u0646\u0628\u0627\u0634\u0647 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0647\u0645 \u0648\u0627\u0631\u062f \u0634\u062f\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (phone.isBlank() || password.isBlank()) {\n    showError(\"\u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u06a9\u0646\")\n    return\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (phone.<\/span><span style=\"color: #6F42C1\">isBlank<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">||<\/span><span style=\"color: #24292E\"> password.<\/span><span style=\"color: #6F42C1\">isBlank<\/span><span style=\"color: #24292E\">()) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">showError<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u06a9\u0646&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u0631\u0631\u0633\u06cc \u0641\u0642\u0637 \u062c\u0644\u0648\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0628\u06cc\u0647\u0648\u062f\u0647 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0648\u0642\u062a\u06cc \u0647\u06cc\u0686 \u0634\u0645\u0627\u0631\u0647 \u06cc\u0627 \u0631\u0645\u0632\u06cc \u0648\u0627\u0631\u062f \u0646\u0634\u062f\u0647\u060c \u062f\u0644\u06cc\u0644\u06cc \u0646\u062f\u0627\u0631\u0647 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u0628\u06a9\u0647 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647. \u0627\u0645\u0627 \u0628\u0631\u062e\u0644\u0627\u0641 \u062b\u0628\u062a\u200c\u0646\u0627\u0645\u060c \u062f\u0631 \u0648\u0631\u0648\u062f \u0628\u0647\u062a\u0631\u0647 \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u062f\u0631\u0628\u0627\u0631\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0631\u0645\u0632 \u0633\u062e\u062a\u200c\u06af\u06cc\u0631\u06cc \u0646\u06a9\u0646\u06cc\u0645. \u0641\u0631\u0636 \u06a9\u0646 \u0642\u0648\u0627\u0646\u06cc\u0646 \u0641\u0639\u0644\u06cc \u0645\u06cc\u06af\u0646 \u0631\u0645\u0632 \u0628\u0627\u06cc\u062f \u062d\u062f\u0627\u0642\u0644 \u0647\u0634\u062a \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u0628\u0639\u0636\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0642\u062f\u06cc\u0645\u06cc \u0642\u0628\u0644\u0627\u064b \u0628\u0627 \u0631\u0645\u0632 \u0634\u0634\u200c\u06a9\u0627\u0631\u0627\u06a9\u062a\u0631\u06cc \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06a9\u0631\u062f\u0646. \u0627\u06af\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0642\u0628\u0644 \u0627\u0632 \u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0631\u062f \u06a9\u0646\u0647\u060c \u0627\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062d\u062a\u06cc \u0641\u0631\u0635\u062a \u0628\u0631\u0631\u0633\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062a\u0648\u0633\u0637 \u0633\u0631\u0648\u0631 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0646. \u067e\u0633 \u062f\u0631 \u0648\u0631\u0648\u062f\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0633\u0645\u062a \u0627\u067e \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u0647. \u0628\u0631\u0631\u0633\u06cc \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u0634\u0645\u0627\u0631\u0647 \u0648 \u0631\u0645\u0632 \u0648\u0627\u0642\u0639\u0627\u064b \u062f\u0631\u0633\u062a \u0647\u0633\u062a\u0646\u060c \u0628\u0627\u06cc\u062f \u062f\u0631 \u0633\u0631\u0648\u0631 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u062f\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648\u0631\u0648\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0631\u0648\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f\u060c \u06cc\u06a9 JSON \u0633\u0627\u062f\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>{\n  \"phone\": \"09121234567\",\n  \"password\": \"12345678\"\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #032F62\">&quot;phone&quot;<\/span><span style=\"color: #24292E\">: <\/span><span style=\"color: #032F62\">&quot;09121234567&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #032F62\">&quot;password&quot;<\/span><span style=\"color: #24292E\">: <\/span><span style=\"color: #032F62\">&quot;12345678&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062f\u0644 Kotlin \u0645\u062a\u0646\u0627\u0638\u0631 \u0628\u0627 \u0627\u06cc\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class LoginRequest(\n    val phone: String,\n    val password: String\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">LoginRequest<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> phone: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> password: <\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u062f\u0644 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648\u0631\u0648\u062f \u0628\u06cc\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0648 \u0633\u0631\u0648\u0631\u0647. Retrofit \u0648 Serialization \u0627\u06cc\u0646 \u0622\u0628\u062c\u06a9\u062a \u0631\u0648 \u0628\u0647 JSON \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0648 \u062f\u0631 \u0628\u062f\u0646\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0646. \u0634\u0627\u06cc\u062f \u0628\u06af\u06cc \u0686\u0631\u0627 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0634\u0645\u0627\u0631\u0647 \u0648 \u0631\u0645\u0632 \u0631\u0648 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0628\u0647 Retrofit \u0628\u062f\u06cc\u0645\u061f \u0627\u0632 \u0646\u0638\u0631 \u0641\u0646\u06cc \u06af\u0627\u0647\u06cc \u0645\u06cc\u0634\u0647\u060c \u0627\u0645\u0627 \u062f\u0627\u0634\u062a\u0646 \u06cc\u06a9 \u0645\u062f\u0644 \u0645\u0634\u062e\u0635 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648\u0634\u0646\u200c\u062a\u0631 \u0648 \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc\u200c\u062a\u0631 \u0628\u0627\u0634\u0647. \u0647\u0631 \u06a9\u0633\u06cc \u06a9\u062f \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647\u060c \u0633\u0631\u06cc\u0639 \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 Endpoint \u0648\u0631\u0648\u062f \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0639\u0631\u06cc\u0641 Endpoint \u0648\u0631\u0648\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0644\u0627\u06cc\u0647 Retrofit\u060c \u0641\u0642\u0637 \u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 \u0648\u0631\u0648\u062f \u0631\u0648 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@POST(\"auth\/login\")\nsuspend fun login(\n    @Body request: LoginRequest\n): LoginResponse\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@POST<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;auth\/login&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">login<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">@Body<\/span><span style=\"color: #24292E\"> request: <\/span><span style=\"color: #6F42C1\">LoginRequest<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">): <\/span><span style=\"color: #6F42C1\">LoginResponse<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">@POST \u06cc\u0639\u0646\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648\u0631\u0648\u062f \u062f\u0627\u062e\u0644 \u0628\u062f\u0646\u0647 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a POST \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646. \u0645\u0633\u06cc\u0631 auth\/login \u0647\u0645 Endpoint \u0648\u0631\u0648\u062f \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0632 GET \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u0686\u0648\u0646 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc GET \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0627\u062e\u0644 URL \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646 \u0648 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u062a\u0627\u0631\u06cc\u062e\u0686\u0647\u060c Log\u0647\u0627 \u06cc\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u0627\u0646\u06cc\u062a\u0648\u0631\u06cc\u0646\u06af \u062b\u0628\u062a \u0628\u0634\u0646. \u0648\u0631\u0648\u062f \u0628\u0627\u06cc\u062f \u0627\u0632 \u06cc\u06a9 \u0627\u062a\u0635\u0627\u0644 \u0627\u0645\u0646 HTTPS \u0648 \u0628\u062f\u0646\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0647. \u06a9\u0644\u0645\u0647 suspend \u0647\u0645 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc\u0647 \u06a9\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0648\u0631\u0648\u062f \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 Coroutine \u0627\u062c\u0631\u0627 \u0628\u0634\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0647\u0646\u06af\u0627\u0645 \u0627\u0646\u062a\u0638\u0627\u0631 \u0628\u0631\u0627\u06cc \u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631\u060c \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0648 \u0645\u062a\u0648\u0642\u0641 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0627\u0633\u062e \u0648\u0631\u0648\u062f \u0686\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0627\u0633\u062e \u0645\u0648\u0641\u0642 \u0648\u0631\u0648\u062f \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0634\u0628\u06cc\u0647 \u067e\u0627\u0633\u062e \u062b\u0628\u062a\u200c\u0646\u0627\u0645\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class LoginResponse(\n    val accessToken: String,\n    val refreshToken: String,\n    val business: BusinessDto\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">LoginResponse<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> accessToken: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> refreshToken: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> business: <\/span><span style=\"color: #6F42C1\">BusinessDto<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">accessToken \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0631\u0648\u0632\u0645\u0631\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0644\u06cc\u0633\u062a \u06a9\u0627\u0644\u0627\u0647\u0627 \u06cc\u0627 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062e\u0648\u062f\u0634 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647\u060c \u0627\u06cc\u0646 Token \u0647\u0645\u0631\u0627\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. refreshToken \u0628\u0631\u0627\u06cc \u06af\u0631\u0641\u062a\u0646 Access Token \u062c\u062f\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0686\u0648\u0646 Access Token \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0639\u0645\u0631 \u06a9\u0648\u062a\u0627\u0647\u200c\u062a\u0631\u06cc \u062f\u0627\u0631\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 \u0647\u0631 \u0627\u0646\u0642\u0636\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0646\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0634\u0645\u0627\u0631\u0647 \u0648 \u0631\u0645\u0632 \u0631\u0648 \u0648\u0627\u0631\u062f \u06a9\u0646\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a business \u0647\u0645 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0628\u062f\u0648\u0646\u0647 \u0627\u06cc\u0646 Session \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u06a9\u062f\u0648\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0642\u06cc\u0642 \u0627\u06cc\u0646 \u067e\u0627\u0633\u062e \u0628\u0647 Backend \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 \u0645\u0646\u0637\u0642 \u06a9\u0644\u06cc \u0647\u0645\u06cc\u0646 \u0645\u06cc\u200c\u0645\u0648\u0646\u0647: \u0633\u0631\u0648\u0631 \u0628\u0639\u062f \u0627\u0632 \u062a\u0623\u06cc\u06cc\u062f \u0647\u0648\u06cc\u062a\u060c \u0645\u062f\u0631\u06a9\u06cc \u0645\u0648\u0642\u062a \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u0627\u0631\u062a\u0628\u0627\u0637 \u0635\u0627\u062f\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Repository \u0639\u0645\u0644\u06cc\u0627\u062a \u0648\u0631\u0648\u062f \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0628\u0647 Repository \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 Repository \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648\u0627\u0642\u0639\u06cc \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val response = api.login(\n    LoginRequest(\n        phone = phone,\n        password = password\n    )\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> response <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> api.<\/span><span style=\"color: #6F42C1\">login<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">LoginRequest<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        phone <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> phone,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        password <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u062f\u0627\u062e\u0644 LoginRequest \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646 \u0648 \u0628\u0647 Retrofit \u062a\u062d\u0648\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646. Retrofit \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 \u067e\u0627\u0633\u062e JSON \u0631\u0648 \u0628\u0647 LoginResponse \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0645\u0648\u0641\u0642\u060c Token\u0647\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>tokenStorage.saveTokens(\n    accessToken = response.accessToken,\n    refreshToken = response.refreshToken\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">tokenStorage.<\/span><span style=\"color: #6F42C1\">saveTokens<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    accessToken <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> response.accessToken,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    refreshToken <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> response.refreshToken<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627 \u0647\u0645\u06cc\u0646 \u062f\u0648 Token\u060c Session \u06a9\u0627\u0631\u0628\u0631 \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0627\u0632 \u0627\u06cc\u0646 \u0644\u062d\u0638\u0647 \u0628\u0647 \u0628\u0639\u062f\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0648\u0628\u0627\u0631\u0647 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u0631\u0648 \u0628\u0641\u0631\u0633\u062a\u0647. \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u062e\u06cc\u0644\u06cc \u0645\u0647\u0645\u0647: <strong>\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0628\u0632\u0627\u0631 \u0627\u062b\u0628\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0647\u0648\u06cc\u062a\u0647\u060c \u0627\u0645\u0627 Token \u0645\u062f\u0631\u06a9 \u0627\u062f\u0627\u0645\u0647 Session<\/strong> \u0647\u0633\u062a. \u06cc\u0639\u0646\u06cc \u06a9\u0627\u0631\u0628\u0631 \u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0627 \u0631\u0645\u0632 \u062e\u0648\u062f\u0634 \u0631\u0648 \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f \u0633\u0631\u0648\u0631 Token\u06cc \u0635\u0627\u062f\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u062f\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc \u0646\u0642\u0634 \u06a9\u0627\u0631\u062a \u0648\u0631\u0648\u062f \u0631\u0648 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0647\u0645 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f\u060c Repository \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u06cc\u0627 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>businessDao.insert(\n    response.business.toEntity()\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">businessDao.<\/span><span style=\"color: #6F42C1\">insert<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    response.business.<\/span><span style=\"color: #6F42C1\">toEntity<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0645\u06a9\u0646\u0647 \u0642\u0628\u0644\u0627\u064b \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646. \u0645\u062b\u0644\u0627\u064b \u06a9\u0627\u0631\u0628\u0631 \u0642\u0628\u0644\u0627\u064b \u0648\u0627\u0631\u062f \u0634\u062f\u0647\u060c \u0627\u0632 \u062d\u0633\u0627\u0628 \u062e\u0627\u0631\u062c \u0634\u062f\u0647 \u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0648\u0627\u0631\u062f \u0647\u0645\u0648\u0646 \u062d\u0633\u0627\u0628 \u0634\u062f\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0628\u0647\u062a\u0631\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0630\u062e\u06cc\u0631\u0647 \u0637\u0648\u0631\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0646\u0633\u062e\u0647 \u0642\u0628\u0644\u06cc \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u06cc\u06a9 \u0631\u06a9\u0648\u0631\u062f \u062a\u06a9\u0631\u0627\u0631\u06cc \u0628\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u062f\u0641 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f\u060c \u0635\u0641\u062d\u0647 Home \u0645\u062c\u0628\u0648\u0631 \u0646\u0628\u0627\u0634\u0647 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0648\u0628\u0627\u0631\u0647 \u0645\u0646\u062a\u0638\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0628\u0645\u0648\u0646\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0627\u0632 Room \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646 \u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0628\u0639\u062f\u0627\u064b \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u06af\u0627\u0645 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">State \u0635\u0641\u062d\u0647 \u0648\u0631\u0648\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0648\u0631\u0648\u062f \u0647\u0645 \u0645\u062b\u0644 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0686\u0646\u062f \u0648\u0636\u0639\u06cc\u062a \u0645\u062e\u062a\u0644\u0641 \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sealed interface LoginUiState {\n    data object Idle : LoginUiState\n    data object Loading : LoginUiState\n    data object Success : LoginUiState\n    data class Error(val message: String) : LoginUiState\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">sealed<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">interface<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">LoginUiState<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">object<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Idle<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">LoginUiState<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">object<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Loading<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">LoginUiState<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">object<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Success<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">LoginUiState<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Error<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> message: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">) : <\/span><span style=\"color: #6F42C1\">LoginUiState<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Idle \u06cc\u0639\u0646\u06cc \u0647\u0646\u0648\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc \u0627\u0631\u0633\u0627\u0644 \u0646\u0634\u062f\u0647. Loading \u06cc\u0639\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646\u062a\u0638\u0631 \u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631\u0647. Success \u06cc\u0639\u0646\u06cc \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647 \u0648 Token\u0647\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0646. Error \u0647\u0645 \u06cc\u0639\u0646\u06cc \u0648\u0631\u0648\u062f \u06a9\u0627\u0645\u0644 \u0646\u0634\u062f\u0647. \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 \u062d\u0627\u0644\u062a\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0647\u0645 \u0627\u0636\u0627\u0641\u0647 \u0628\u0634\u0646\u061b \u0645\u062b\u0644\u0627\u064b \u062d\u0633\u0627\u0628 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644\u060c \u0646\u06cc\u0627\u0632 \u0628\u0647 \u062a\u0623\u06cc\u06cc\u062f \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u06cc\u0627 \u0627\u0644\u0632\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0645\u0632. \u0645\u0632\u06cc\u062a sealed interface \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a\u200c\u0647\u0627 \u0628\u0647 \u0634\u06a9\u0644 \u0631\u0648\u0634\u0646 \u0648 \u0645\u062d\u062f\u0648\u062f \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0647\u0645 StateFlow \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0627\u0648\u0646 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">private val _uiState =\n    MutableStateFlow&lt;LoginUiState&gt;(LoginUiState.Idle)\n\nval uiState = _uiState.asStateFlow()\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0641\u0642\u0637 uiState \u0631\u0648 \u0645\u06cc\u200c\u062e\u0648\u0646\u0647. \u062a\u0646\u0647\u0627 ViewModel \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u0631\u0647 \u0645\u0642\u062f\u0627\u0631 _uiState \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647. \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628\u060c \u0648\u0636\u0639\u06cc\u062a \u0648\u0631\u0648\u062f \u0627\u0632 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u0645\u0631\u06a9\u0632\u06cc \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u062c\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u062f\u0627\u062e\u0644 ViewModel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0648\u0636\u0639\u06cc\u062a \u0631\u0648 \u0631\u0648\u06cc Loading \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">_uiState.value = LoginUiState.Loading\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0627\u062e\u0644 <code>viewModelScope<\/code> \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">viewModelScope.launch {\n    repository.login(phone, password)\n}\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0632\u0645\u0627\u0646\u200c\u0628\u0631 \u0648\u0631\u0648\u062f \u062e\u0627\u0631\u062c \u0627\u0632 \u0631\u0648\u0646\u062f \u0639\u0627\u062f\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u062c\u0631\u0627 \u0628\u0634\u0647. ViewModel \u0647\u0645 \u0645\u0633\u0626\u0648\u0644 \u0639\u0645\u0631 Coroutine \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0633\u062e\u0647 \u06a9\u0627\u0645\u0644\u200c\u062a\u0631 \u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 \u0639\u0645\u0644\u06cc\u0627\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">viewModelScope.launch {\n    try {\n        repository.login(phone, password)\n        _uiState.value = LoginUiState.Success\n    } catch (error: Exception) {\n        _uiState.value = LoginUiState.Error(\n            error.toUserMessage()\n        )\n    }\n}\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 Repository \u0628\u062f\u0648\u0646 \u062e\u0637\u0627 \u06a9\u0627\u0631\u0634 \u0631\u0648 \u062a\u0645\u0627\u0645 \u06a9\u0646\u0647\u060c \u06cc\u0639\u0646\u06cc \u0633\u0631\u0648\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u067e\u0630\u06cc\u0631\u0641\u062a\u0647 \u0648 Token\u0647\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0646. \u067e\u0633 State \u0628\u0647 Success \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06af\u0631 \u062e\u0637\u0627\u06cc\u06cc \u0631\u062e \u0628\u062f\u0647\u060c \u0627\u0648\u0646 \u062e\u0637\u0627 \u0628\u0647 \u067e\u06cc\u0627\u0645 \u0642\u0627\u0628\u0644 \u0641\u0647\u0645 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u0634\u0647 \u0648 \u0635\u0641\u062d\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0648\u0646 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a \u062e\u0637\u0627\u06cc \u0641\u0646\u06cc \u0648 \u062e\u0637\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648\u0631\u0648\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0648\u0631\u0648\u062f\u060c \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0647\u0645\u0647 \u062e\u0637\u0627\u0647\u0627 \u06cc\u06a9\u0633\u0627\u0646 \u0646\u06cc\u0633\u062a\u0646. \u0645\u0645\u06a9\u0646\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0627\u0634\u0647\u060c \u0633\u0631\u0648\u0631 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u0628\u0627\u0634\u0647 \u06cc\u0627 \u0634\u0645\u0627\u0631\u0647 \u0648 \u0631\u0645\u0632 \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0627\u0634\u0646. \u0627\u06cc\u0646 \u0633\u0647 \u0648\u0636\u0639\u06cc\u062a \u0627\u0632 \u062f\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0645\u0639\u0646\u0627\u06cc \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0631\u0646:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0627\u0633\u062a.<br>\u0633\u0631\u0648\u0631 \u0641\u0639\u0644\u0627\u064b \u067e\u0627\u0633\u062e \u0646\u0645\u06cc\u200c\u062f\u0647\u062f.<br>\u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u06cc\u0627 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0634\u062a\u0628\u0627\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0647\u0645\u0647 \u0627\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f \u0631\u0648 \u0628\u0627 \u067e\u06cc\u0627\u0645 \u0648\u0631\u0648\u062f \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0648\u062f \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645\u060c \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u0628\u0627\u06cc\u062f \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u0622\u06cc\u0627 \u0631\u0645\u0632 \u0631\u0648 \u0639\u0648\u0636 \u06a9\u0646\u0647\u061f \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647\u061f \u06cc\u0627 \u0686\u0646\u062f \u062f\u0642\u06cc\u0642\u0647 \u0635\u0628\u0631 \u06a9\u0646\u0647\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062e\u0637\u0627\u0647\u0627 \u0628\u0627\u06cc\u062f \u062f\u0631 \u0644\u0627\u06cc\u0647 \u0645\u0646\u0627\u0633\u0628 \u0627\u0632 \u0647\u0645 \u062a\u0641\u06a9\u06cc\u06a9 \u0628\u0634\u0646. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u0633\u0631\u0648\u0631 \u06a9\u062f 401 Unauthorized \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u062e\u0637\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648\u0631\u0648\u062f \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">if (response.code() == 401) {\n    throw InvalidCredentialsException()\n}\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u062f 401 \u06cc\u0639\u0646\u06cc \u0633\u0631\u0648\u0631 \u0647\u0648\u06cc\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u06a9\u0646\u0646\u062f\u0647 \u0631\u0648 \u0646\u067e\u0630\u06cc\u0631\u0641\u062a\u0647. \u062f\u0631 \u0635\u0641\u062d\u0647 \u0648\u0631\u0648\u062f\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u06cc\u0646 \u06cc\u0639\u0646\u06cc \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u06cc\u0627 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u062f\u0631\u0633\u062a \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u06cc\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631\u067e\u0633\u0646\u062f \u0627\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">is InvalidCredentialsException -&gt;\n    &#8220;\u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u06cc\u0627 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0634\u062a\u0628\u0627\u0647\u0647&#8221;\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0642\u062a \u06a9\u0646 \u06a9\u0647 \u0628\u0647\u062a\u0631\u0647 \u0645\u0634\u062e\u0635 \u0646\u06a9\u0646\u06cc\u0645 \u062f\u0642\u06cc\u0642\u0627\u064b \u06a9\u062f\u0648\u0645 \u0628\u062e\u0634 \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0648\u062f\u0647. \u0645\u062b\u0644\u0627\u064b \u0646\u06af\u06cc\u0645 \u0627\u06cc\u0646 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647\u060c \u0686\u0648\u0646 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 \u0627\u0641\u0631\u0627\u062f \u0645\u0647\u0627\u062c\u0645 \u06a9\u0645\u06a9 \u06a9\u0646\u0647 \u0634\u0645\u0627\u0631\u0647\u200c\u0647\u0627\u06cc \u062b\u0628\u062a\u200c\u0634\u062f\u0647 \u0631\u0648 \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u06a9\u0646\u0646. \u067e\u06cc\u0627\u0645 \u0639\u0645\u0648\u0645\u06cc \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u06cc\u0627 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0634\u062a\u0628\u0627\u0647\u0647 \u0627\u0632 \u0646\u0638\u0631 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0645\u0646\u0627\u0633\u0628\u200c\u062a\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0646\u0628\u0627\u06cc\u062f \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0648 Log \u06a9\u0646\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0646\u06af\u0627\u0645 \u062a\u0648\u0633\u0639\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0648\u0633\u0648\u0633\u0647 \u0628\u0634\u06cc\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0631\u0633\u0627\u0644\u06cc \u0631\u0648 \u0628\u0627 Logcat \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">Log.d(&#8220;LOGIN&#8221;, &#8220;phone=$phone password=$password&#8221;)\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0634\u062a\u0628\u0627\u0647\u0647. Log\u0647\u0627 \u0645\u0645\u06a9\u0646\u0647 \u0631\u0648\u06cc \u062f\u0633\u062a\u06af\u0627\u0647\u060c \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062e\u0637\u0627\u06cc\u0627\u0628\u06cc \u06cc\u0627 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u06af\u0632\u0627\u0631\u0634 \u062e\u0637\u0627 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0646. \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0646\u0628\u0627\u06cc\u062f \u062f\u0631 \u0647\u06cc\u0686 Log\u060c \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u062d\u0644\u06cc \u06cc\u0627 \u0641\u0627\u06cc\u0644 \u0645\u0639\u0645\u0648\u0644\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647. \u062d\u062a\u06cc \u0627\u06af\u0631 \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0632 \u062d\u0633\u0627\u0628 \u0641\u0631\u0636\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u0628\u0647\u062a\u0631\u0647 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u0639\u0627\u062f\u062a \u06a9\u0646\u06cc\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062d\u0633\u0627\u0633 \u0631\u0648 \u0648\u0627\u0631\u062f Log \u0646\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0635\u0631\u0641\u0627\u064b \u0634\u0631\u0648\u0639 \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0648 \u062b\u0628\u062a \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">Log.d(&#8220;LOGIN&#8221;, &#8220;Login request started&#8221;)\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 Log \u0628\u0631\u0627\u06cc \u0641\u0647\u0645\u06cc\u062f\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u06a9\u0627\u0641\u06cc\u0647 \u0648 \u0647\u06cc\u0686 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0631\u0645\u0627\u0646\u0647\u200c\u0627\u06cc \u0631\u0648 \u0641\u0627\u0634 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062f\u06a9\u0645\u0647 \u0648\u0631\u0648\u062f \u0647\u0646\u06af\u0627\u0645 Loading<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 \u062b\u0628\u062a\u200c\u0646\u0627\u0645\u060c \u0647\u0646\u06af\u0627\u0645 \u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0627\u06cc\u062f \u062f\u06a9\u0645\u0647 \u0648\u0631\u0648\u062f \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>enabled = uiState !is LoginUiState.Loading\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">enabled <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> uiState <\/span><span style=\"color: #D73A49\">!is<\/span><span style=\"color: #24292E\"> LoginUiState.Loading<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627 \u0627\u06cc\u0646 \u0634\u0631\u0637\u060c \u062a\u0627 \u0648\u0642\u062a\u06cc \u067e\u0627\u0633\u062e \u0642\u0628\u0644\u06cc \u0628\u0631\u0646\u06af\u0634\u062a\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u0636\u0631\u0628\u0647 \u0628\u0632\u0646\u0647. \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0645\u06cc\u0634\u0647 \u062f\u0627\u062e\u0644 \u062f\u06a9\u0645\u0647 Loading \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (uiState is LoginUiState.Loading) {\n    CircularProgressIndicator()\n} else {\n    Text(\"\u0648\u0631\u0648\u062f\")\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (uiState <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoginUiState.Loading) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">CircularProgressIndicator<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">} <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">Text<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0648\u0631\u0648\u062f&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u0627\u0632\u062e\u0648\u0631\u062f \u0633\u0627\u062f\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0641\u0647\u0645\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645\u0647. \u0628\u062f\u0648\u0646 \u0627\u0648\u0646\u060c \u0645\u0645\u06a9\u0646\u0647 \u062a\u0635\u0648\u0631 \u06a9\u0646\u0647 \u062f\u06a9\u0645\u0647 \u06a9\u0627\u0631 \u0646\u06a9\u0631\u062f\u0647 \u0648 \u0686\u0646\u062f \u0628\u0627\u0631 \u062f\u0648\u0628\u0627\u0631\u0647 \u0644\u0645\u0633\u0634 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0646\u062a\u0642\u0627\u0644 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0635\u0641\u062d\u0647 Home<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 StateFlow \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val uiState by viewModel.uiState.collectAsStateWithLifecycle()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> uiState <\/span><span style=\"color: #D73A49\">by<\/span><span style=\"color: #24292E\"> viewModel.uiState.<\/span><span style=\"color: #6F42C1\">collectAsStateWithLifecycle<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0632\u0645\u0627\u0646 ViewModel \u0645\u0642\u062f\u0627\u0631 State \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647\u060c Compose \u0648\u0636\u0639\u06cc\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0648\u0642\u062a\u06cc \u0648\u0631\u0648\u062f \u0645\u0648\u0641\u0642 \u0634\u062f\u060c Navigation \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LaunchedEffect(uiState) {\n    if (uiState is LoginUiState.Success) {\n        navController.navigate(\"home\") {\n            popUpTo(\"login\") {\n                inclusive = true\n            }\n        }\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">LaunchedEffect<\/span><span style=\"color: #24292E\">(uiState) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (uiState <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoginUiState.Success) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        navController.<\/span><span style=\"color: #6F42C1\">navigate<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;home&quot;<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #6F42C1\">popUpTo<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;login&quot;<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                inclusive <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0645\u0648\u0641\u0642\u060c \u0635\u0641\u062d\u0647 Login \u0627\u0632 Back Stack \u062d\u0630\u0641 \u0645\u06cc\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0632\u062f\u0646 \u062f\u06a9\u0645\u0647 Back \u062f\u0648\u0628\u0627\u0631\u0647 \u0648\u0627\u0631\u062f \u0641\u0631\u0645 \u0648\u0631\u0648\u062f \u0646\u0645\u06cc\u0634\u0647. \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0627\u0642\u0639\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 Login\u060c \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc Welcome \u06cc\u0627 Register \u0647\u0645 \u0627\u0632 Back Stack \u062d\u0630\u0641 \u0628\u0634\u0646. \u062f\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u0648\u0627\u0644\u062f \u0645\u062b\u0644 <code>auth<\/code> \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0648 \u06a9\u0644 \u0628\u062e\u0634 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0648 \u0627\u0632 \u062a\u0627\u0631\u06cc\u062e\u0686\u0647 Navigation \u06a9\u0646\u0627\u0631 \u0645\u06cc\u200c\u0630\u0627\u0631\u06cc\u0645. \u0645\u0646\u0637\u0642 \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f Session\u060c \u0645\u0633\u06cc\u0631 \u0642\u0628\u0644\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u062f\u06cc\u06af\u0631 \u0646\u0628\u0627\u06cc\u062f \u0628\u062e\u0634\u06cc \u0627\u0632 \u0631\u0648\u0646\u062f \u0639\u0627\u062f\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0628\u0627\u06cc\u062f \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u067e\u0627\u06a9 \u0628\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0648\u0631\u0648\u062f \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0627\u0634\u0647\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0647\u062a\u0631\u0647 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u062d\u0641\u0638 \u0628\u0634\u0647 \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062c\u0628\u0648\u0631 \u0646\u0628\u0627\u0634\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0648\u0646 \u0631\u0648 \u062a\u0627\u06cc\u067e \u06a9\u0646\u0647. \u0627\u0645\u0627 \u062f\u0631\u0628\u0627\u0631\u0647 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u062f\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0627\u0631\u06cc\u0645. \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0631\u0645\u0632 \u0631\u0648 \u062d\u0641\u0638 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u0627\u0634\u062a\u0628\u0627\u0647 \u06a9\u0648\u0686\u06a9\u0634 \u0631\u0648 \u0627\u0635\u0644\u0627\u062d \u06a9\u0646\u0647. \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0628\u0639\u062f \u0627\u0632 \u062e\u0637\u0627\u06cc \u0648\u0631\u0648\u062f\u060c \u0641\u06cc\u0644\u062f \u0631\u0645\u0632 \u0631\u0648 \u067e\u0627\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u062a\u0627 \u0627\u0632 \u0628\u0627\u0642\u06cc \u0645\u0648\u0646\u062f\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062d\u0633\u0627\u0633 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0628\u0634\u0647. \u062f\u0631 \u0635\u0648\u0631\u062a \u0648\u0631\u0648\u062f \u0645\u0648\u0641\u0642\u060c \u0642\u0637\u0639\u0627\u064b \u0628\u0647\u062a\u0631\u0647 State \u0641\u0631\u0645 \u067e\u0627\u06a9 \u0628\u0634\u0647 \u06cc\u0627 \u0635\u0641\u062d\u0647 \u0627\u0632 Back Stack \u062d\u0630\u0641 \u0628\u0634\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\">password = &#8220;&#8221;\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0631\u0645\u0632 \u0631\u0648 \u0627\u0632 State \u0645\u062d\u0644\u06cc \u0635\u0641\u062d\u0647 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0644\u0628\u062a\u0647 \u0686\u0648\u0646 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0645\u0648\u0641\u0642 \u062d\u0630\u0641 \u0645\u06cc\u0634\u0647\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b State \u0627\u0648\u0646 \u0647\u0645 \u0647\u0645\u0631\u0627\u0647 \u0635\u0641\u062d\u0647 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u0631\u0647. \u0627\u0645\u0627 \u062e\u0627\u0644\u06cc \u06a9\u0631\u062f\u0646 \u0635\u0631\u06cc\u062d \u0631\u0645\u0632 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0631\u0641\u062a\u0627\u0631 \u0631\u0648\u0634\u0646\u200c\u062a\u0631 \u0648 \u0645\u0637\u0645\u0626\u0646\u200c\u062a\u0631\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u06af\u0632\u06cc\u0646\u0647 \u0645\u0631\u0627 \u0628\u0647 \u062e\u0627\u0637\u0631 \u0628\u0633\u067e\u0627\u0631 \u0686\u0647 \u0645\u0639\u0646\u06cc\u200c\u0627\u06cc \u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0641\u0631\u0645\u200c\u0647\u0627\u06cc \u0648\u0631\u0648\u062f\u060c \u06af\u0632\u06cc\u0646\u0647\u200c\u0627\u06cc \u0628\u0647 \u0646\u0627\u0645 \u0645\u0631\u0627 \u0628\u0647 \u062e\u0627\u0637\u0631 \u0628\u0633\u067e\u0627\u0631 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0627\u0645\u0627 \u062f\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0645\u0648\u0628\u0627\u06cc\u0644\u060c \u0645\u0641\u0647\u0648\u0645 \u0627\u0648\u0646 \u0628\u0627 \u0648\u0628 \u06a9\u0645\u06cc \u0641\u0631\u0642 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0634\u0645\u0627\u0631\u0647 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u0645 \u0648 \u0647\u0631 \u0628\u0627\u0631 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0628\u0641\u0631\u0633\u062a\u06cc\u0645. \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u062d\u0641\u0638 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 Token\u0647\u0627\u06cc Session \u0647\u0633\u062a\u0646. \u0627\u06af\u0631 Token\u0647\u0627 \u0647\u0646\u0648\u0632 \u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0634\u0646 \u06cc\u0627 \u0628\u0627 Refresh Token \u0642\u0627\u0628\u0644 \u062a\u0645\u062f\u06cc\u062f \u0628\u0627\u0634\u0646\u060c \u06a9\u0627\u0631\u0628\u0631 \u0628\u062f\u0648\u0646 \u062f\u06cc\u062f\u0646 \u0635\u0641\u062d\u0647 \u0648\u0631\u0648\u062f \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 Auto Login \u06cc\u0639\u0646\u06cc:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u062c\u0648\u062f Token \u0645\u0639\u062a\u0628\u0631\n\u06cc\u0627\n\u0627\u0645\u06a9\u0627\u0646 \u06af\u0631\u0641\u062a\u0646 Access Token \u062c\u062f\u06cc\u062f \u0628\u0627 Refresh Token\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062f\u0627\u062e\u0644 \u06af\u0648\u0634\u06cc \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645. \u062f\u0631 \u0648\u0627\u0642\u0639 \u0648\u0631\u0648\u062f \u0645\u0648\u0641\u0642 \u0641\u0642\u0637 \u067e\u0627\u06cc\u0627\u0646 \u0635\u0641\u062d\u0647 Login \u0646\u06cc\u0633\u062a\u061b \u0634\u0631\u0648\u0639 Session\u06cc\u0647 \u06a9\u0647 \u062f\u0631 \u062f\u0631\u0633\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u0648\u0646 \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0648\u0631\u0648\u062f \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u0627\u062c\u0631\u0627\u06cc \u0628\u0639\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 Token\u0647\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0646\u060c \u0627\u062c\u0631\u0627\u06cc \u0628\u0639\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645 \u0635\u0641\u062d\u0647 Login \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0646\u0647. \u0635\u0641\u062d\u0647 \u0622\u063a\u0627\u0632\u06cc\u0646 \u06cc\u0627 Splash \u0628\u0627\u06cc\u062f \u0648\u0636\u0639\u06cc\u062a Session \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val hasSession = tokenStorage.hasRefreshToken()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> hasSession <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> tokenStorage.<\/span><span style=\"color: #6F42C1\">hasRefreshToken<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 Refresh Token \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646\u0647 Session \u0631\u0648 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u0647. \u0627\u06af\u0631 Token \u0645\u0639\u062a\u0628\u0631 \u0628\u0648\u062f\u060c \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 Home \u0645\u06cc\u0631\u0647. \u0627\u06af\u0631 \u0645\u0646\u0642\u0636\u06cc \u06cc\u0627 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u0628\u0648\u062f\u060c Token\u0647\u0627 \u067e\u0627\u06a9 \u0645\u06cc\u0634\u0646 \u0648 \u0635\u0641\u062d\u0647 Login \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0635\u0631\u0641\u0627\u064b \u0648\u062c\u0648\u062f \u06cc\u06a9 Access Token \u0628\u0647 \u0645\u0639\u0646\u06cc \u0645\u0639\u062a\u0628\u0631 \u0628\u0648\u062f\u0646 \u0627\u0648\u0646 \u0646\u06cc\u0633\u062a. \u0645\u0645\u06a9\u0646\u0647 Token \u0645\u0646\u0642\u0636\u06cc \u0634\u062f\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0633\u0631\u0648\u0631 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0627\u0637\u0644 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0646\u0647\u0627\u06cc\u06cc \u0628\u0627\u06cc\u062f \u0628\u0627 \u0645\u0646\u0637\u0642 Session \u0648 Refresh Token \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0627\u0634\u0647. \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0631\u0645\u0632\u060c \u0641\u0642\u0637 \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0627\u0647\u200c\u0647\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f Session \u0647\u0633\u062a. \u0628\u0639\u062f \u0627\u0632 \u0627\u0648\u0646\u060c \u0645\u062f\u06cc\u0631\u06cc\u062a Session \u0628\u0627\u06cc\u062f \u0627\u062f\u0627\u0645\u0647 \u0645\u0633\u06cc\u0631 \u0631\u0648 \u0628\u0631 \u0639\u0647\u062f\u0647 \u0628\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0648\u0631\u0648\u062f \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u062e\u0644\u0627\u0641 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u06a9\u0634\u200c\u0634\u062f\u0647\u060c \u0648\u0631\u0648\u062f \u0627\u0648\u0644\u06cc\u0647 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0647. \u0633\u0631\u0648\u0631 \u0628\u0627\u06cc\u062f \u0631\u0645\u0632 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0648 Token \u0645\u0639\u062a\u0628\u0631 \u0635\u0627\u062f\u0631 \u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0648\u0642\u062a\u06cc \u0647\u06cc\u0686 Session \u0642\u0628\u0644\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0648\u0631\u0648\u062f \u0648\u0627\u0642\u0639\u06cc \u0631\u0648 \u06a9\u0627\u0645\u0644\u0627\u064b \u0622\u0641\u0644\u0627\u06cc\u0646 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u06cc\u06a9 \u0648\u0636\u0639\u06cc\u062a \u0645\u062a\u0641\u0627\u0648\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0642\u0628\u0644\u0627\u064b \u0648\u0627\u0631\u062f \u0634\u062f\u0647 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a Session \u062f\u0627\u062e\u0644 \u06af\u0648\u0634\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 \u0627\u0644\u0627\u0646 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0634\u062f\u0647. \u062f\u0631 \u06cc\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc Offline First\u060c \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u062c\u0627\u0632\u0647 \u0628\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc\u06cc \u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0644\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u062f\u06cc\u06af\u0647 \u0648\u0631\u0648\u062f \u0628\u0627 \u0631\u0645\u0632 \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646 \u0646\u06cc\u0633\u062a\u061b \u0627\u062f\u0627\u0645\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 Session \u0642\u0628\u0644\u06cc \u0648 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc\u0647. \u0627\u06af\u0631 \u0647\u06cc\u0686 Session \u0642\u0628\u0644\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u067e\u06cc\u0627\u0645 \u0645\u0646\u0627\u0633\u0628 \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u0628\u0647 \u062d\u0633\u0627\u0628\u060c \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0644\u0627\u0632\u0645\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0631 Session \u0642\u0628\u0644\u06cc \u0645\u0648\u062c\u0648\u062f\u0647 \u0648 \u0641\u0642\u0637 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0634\u062f\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0622\u062e\u0631\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647 \u0648 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0628\u0647 \u0628\u0639\u062f \u0645\u0648\u06a9\u0648\u0644 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0645\u0646\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u062f\u0631 \u0633\u0645\u062a \u0633\u0631\u0648\u0631<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0631\u0645\u0632 \u0631\u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 HTTPS \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647\u060c \u0627\u0645\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645 \u0646\u0628\u0627\u06cc\u062f \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u0647. \u0633\u0631\u0648\u0631 \u0628\u0627\u06cc\u062f \u0631\u0645\u0632 \u0631\u0648 \u0628\u0627 \u0627\u0644\u06af\u0648\u0631\u06cc\u062a\u0645 \u0645\u0646\u0627\u0633\u0628 Hash \u06a9\u0646\u0647 \u0648 \u0641\u0642\u0637 Hash \u0627\u0648\u0646 \u0631\u0648 \u0646\u06af\u0647 \u062f\u0627\u0631\u0647. \u0647\u0646\u06af\u0627\u0645 \u0648\u0631\u0648\u062f\u060c \u0633\u0631\u0648\u0631 \u0631\u0645\u0632 \u0648\u0627\u0631\u062f\u0634\u062f\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627 \u0647\u0645\u0648\u0646 \u0631\u0648\u0634 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0648 \u0628\u0627 Hash \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0645\u0642\u0627\u06cc\u0633\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u0633\u0626\u0648\u0644 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Hash \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0633\u0631\u0648\u0631 \u0646\u06cc\u0633\u062a. \u0627\u0645\u0627 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u06cc\u0645 \u06a9\u0647 \u0627\u0631\u0633\u0627\u0644 \u0631\u0645\u0632 \u0628\u0647 \u0645\u0639\u0646\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0646 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0648\u0646 \u0646\u06cc\u0633\u062a. \u0627\u0645\u0646\u06cc\u062a \u0648\u0631\u0648\u062f \u0646\u062a\u06cc\u062c\u0647 \u0647\u0645\u06a9\u0627\u0631\u06cc \u0686\u0646\u062f \u0628\u062e\u0634\u0647: HTTPS \u062f\u0631 \u0645\u0633\u06cc\u0631 \u0627\u0646\u062a\u0642\u0627\u0644\u060c Hash \u0645\u0646\u0627\u0633\u0628 \u062f\u0631 Backend\u060c Token \u0627\u0645\u0646 \u0628\u0631\u0627\u06cc Session \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u062f\u0631\u0633\u062a Token \u062f\u0631 \u06af\u0648\u0634\u06cc. \u0627\u06af\u0631 \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0628\u062e\u0634\u200c\u0647\u0627 \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0627\u0634\u0647\u060c \u0638\u0627\u0647\u0631 \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0635\u0641\u062d\u0647 \u0648\u0631\u0648\u062f \u0647\u06cc\u0686 \u0627\u0631\u0632\u0634\u06cc \u0646\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a \u0648\u0631\u0648\u062f \u0648 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0648 \u0648\u0631\u0648\u062f \u0627\u0632 \u0646\u0638\u0631 \u0633\u0627\u062e\u062a\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u06cc\u0627\u0631 \u0634\u0628\u06cc\u0647 \u0647\u0633\u062a\u0646. \u0647\u0631 \u062f\u0648 \u0641\u0631\u0645 \u062f\u0627\u0631\u0646\u060c \u0628\u0647 ViewModel \u0648\u0635\u0644 \u0645\u06cc\u0634\u0646\u060c \u0627\u0632 Repository \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a Retrofit \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0646 \u0648 Token \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646. \u0627\u0645\u0627 \u0647\u062f\u0641 \u0627\u0648\u0646\u200c\u0647\u0627 \u0641\u0631\u0642 \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062b\u0628\u062a\u200c\u0646\u0627\u0645:\n\u0633\u0627\u062e\u062a \u062d\u0633\u0627\u0628 \u062c\u062f\u06cc\u062f + \u0627\u06cc\u062c\u0627\u062f Session\n\n\u0648\u0631\u0648\u062f:\n\u062a\u0623\u06cc\u06cc\u062f \u062d\u0633\u0627\u0628 \u0645\u0648\u062c\u0648\u062f + \u0627\u06cc\u062c\u0627\u062f Session\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062b\u0628\u062a\u200c\u0646\u0627\u0645\u060c \u062e\u0637\u0627\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u062a\u06a9\u0631\u0627\u0631\u06cc \u0628\u0648\u062f\u0646 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0645\u0647\u0645 \u0647\u0633\u062a\u0646. \u062f\u0631 \u0648\u0631\u0648\u062f\u060c \u062e\u0637\u0627\u06cc \u0627\u0635\u0644\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u0627\u062f\u0631\u0633\u062a \u06cc\u0627 \u062d\u0633\u0627\u0628 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644\u0647. \u0627\u06cc\u0646 \u0634\u0628\u0627\u0647\u062a \u0628\u0627\u0639\u062b \u0646\u0645\u06cc\u0634\u0647 \u062a\u0645\u0627\u0645 \u06a9\u062f\u0647\u0627 \u0631\u0648 \u0628\u0627 \u0647\u0645 \u0642\u0627\u0637\u06cc \u06a9\u0646\u06cc\u0645. \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u0634\u062a\u0631\u06a9\u06cc \u0645\u062b\u0644 AuthRepository \u0648 TokenStorage \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645\u060c \u0627\u0645\u0627 State \u0635\u0641\u062d\u0647 \u0648\u0631\u0648\u062f \u0648 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0628\u0647\u062a\u0631\u0647 \u062c\u062f\u0627 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0646\u061b \u0686\u0648\u0646 \u0631\u0641\u062a\u0627\u0631 \u0648 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0627\u0648\u0646\u200c\u0647\u0627 \u06cc\u06a9\u0633\u0627\u0646 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0648\u0631\u0648\u062f \u0641\u0642\u0637 \u0628\u0631\u0631\u0633\u06cc \u0631\u0645\u0632 \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c \u0648\u0631\u0648\u062f \u06cc\u0639\u0646\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0634\u0645\u0627\u0631\u0647 \u0648 \u0631\u0645\u0632 \u0631\u0648 \u0648\u0627\u0631\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u06a9\u0645\u0647\u200c\u0627\u06cc \u0631\u0648 \u0645\u06cc\u200c\u0632\u0646\u0647. \u0627\u0645\u0627 \u067e\u0634\u062a \u0635\u062d\u0646\u0647 \u0686\u0646\u062f \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u062c\u062f\u0627 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. ViewModel \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0648 State \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. Repository \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648\u0631\u0648\u062f \u0631\u0648 \u0628\u0647 API \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647. \u0633\u0631\u0648\u0631 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. Token\u0647\u0627 \u062f\u0627\u062e\u0644 \u0641\u0636\u0627\u06cc \u0627\u0645\u0646 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0646. \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0648\u0627\u0631\u062f Room \u0645\u06cc\u0634\u0646 \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0635\u0641\u062d\u0647 Home \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0647\u06cc\u0686\u200c\u06a9\u062f\u0648\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a\u200c\u0647\u0627 \u0646\u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 \u06cc\u06a9 onClick \u0634\u0644\u0648\u063a \u062c\u0645\u0639 \u0628\u0634\u0646. \u0635\u0641\u062d\u0647 \u0646\u0628\u0627\u06cc\u062f Token \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u0647. ViewModel \u0646\u0628\u0627\u06cc\u062f \u062c\u0632\u0626\u06cc\u0627\u062a Retrofit \u0631\u0648 \u0628\u062f\u0648\u0646\u0647. Retrofit \u0646\u0628\u0627\u06cc\u062f \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647 \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0628\u0647 \u06a9\u062f\u0648\u0645 \u0635\u0641\u062d\u0647 \u0628\u0631\u06cc\u0645 \u0648 Navigation \u0647\u0645 \u0646\u0628\u0627\u06cc\u062f \u062f\u0631\u0628\u0627\u0631\u0647 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0686\u06cc\u0632\u06cc \u0628\u062f\u0648\u0646\u0647. \u0647\u0631 \u0628\u062e\u0634 \u0641\u0642\u0637 \u06a9\u0627\u0631 \u062e\u0648\u062f\u0634 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647 \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0648 \u0628\u0647 \u0628\u062e\u0634 \u0628\u0639\u062f\u06cc \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 \u0648\u0631\u0648\u062f \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u062f\u0631 \u06cc\u06a9 \u062c\u0645\u0644\u0647 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f: \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0631\u0645\u0632 \u0647\u0648\u06cc\u062a\u0634 \u0631\u0648 \u0627\u062b\u0628\u0627\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0633\u0631\u0648\u0631 Token \u0635\u0627\u062f\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 \u0630\u062e\u06cc\u0631\u0647 Token\u060c \u06cc\u06a9 Session \u0642\u0627\u0628\u0644 \u0627\u062f\u0627\u0645\u0647 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0628\u06cc\u0633\u062a\u200c\u0648\u0633\u0648\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0637\u0648\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0635\u0644\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u062c\u0645\u0639 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u0642\u0627\u0628\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u067e\u0646\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0648 \u0648\u0631\u0648\u062f \u0641\u0642\u0637 \u062f\u0631\u0648\u0627\u0632\u0647 \u0648\u0631\u0648\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0648\u062f\u0646. \u0627\u0631\u0632\u0634 \u0627\u0635\u0644\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0627\u0632 \u062c\u0627\u06cc\u06cc \u0634\u0631\u0648\u0639 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0635\u0627\u062d\u0628 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0648\u0627\u0631\u062f \u067e\u0646\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u0634\u0647 \u0648 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0648\u0636\u0639\u06cc\u062a \u0641\u0631\u0648\u0634\u06af\u0627\u0647\u060c \u06a9\u0627\u0644\u0627\u0647\u0627\u060c \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0648 \u0641\u0639\u0627\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0627\u062e\u06cc\u0631 \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u067e\u0646\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0641\u0642\u0637 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u0632\u06cc\u0628\u0627 \u0628\u0627 \u0686\u0646\u062f \u06a9\u0627\u0631\u062a \u0648 \u0639\u062f\u062f \u0646\u06cc\u0633\u062a\u061b \u0646\u0642\u0637\u0647\u200c\u0627\u06cc\u0647 \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646 \u0648 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647 \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0645\u062f\u06cc\u0631 \u06cc\u06a9 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0628\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0646\u062a\u0638\u0627\u0631 \u0646\u062f\u0627\u0631\u0647 \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u062e\u0627\u0644\u06cc \u0628\u0634\u0647 \u0648 \u062e\u0648\u062f\u0634 \u0628\u06cc\u0646 \u0686\u0646\u062f \u0645\u0646\u0648 \u0628\u06af\u0631\u062f\u0647 \u062a\u0627 \u0628\u0641\u0647\u0645\u0647 \u0686\u0647 \u062e\u0628\u0631 \u0634\u062f\u0647. \u0628\u0647\u062a\u0631\u0647 \u0647\u0645\u0627\u0646 \u0627\u0628\u062a\u062f\u0627 \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0644\u0627\u0647\u0627\u060c \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0645\u0631\u0648\u0632 \u062b\u0628\u062a \u0634\u062f\u0646\u060c \u0622\u062e\u0631\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0648 \u0686\u0646\u062f \u0645\u06cc\u0627\u0646\u200c\u0628\u0631 \u0645\u0647\u0645 \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u0632 \u0647\u0645\u0627\u0646 \u067e\u0646\u0644 \u0628\u062a\u0648\u0646\u0647 \u0648\u0627\u0631\u062f \u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0644\u0627\u0647\u0627 \u0628\u0634\u0647\u060c \u0642\u06cc\u0645\u062a \u062c\u062f\u06cc\u062f \u062b\u0628\u062a \u06a9\u0646\u0647 \u06cc\u0627 \u06a9\u0627\u0644\u0627\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631 \u0647\u0645\u0647 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646\u060c \u0627\u0645\u0627 \u0645\u0645\u06a9\u0646\u0647 \u0627\u0632 \u0686\u0646\u062f \u0645\u0646\u0628\u0639 \u0645\u062e\u062a\u0644\u0641 \u0628\u06cc\u0627\u0646. \u0645\u0634\u062e\u0635\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0627\u0632 Room \u062e\u0648\u0627\u0646\u062f\u0647 \u0628\u0634\u0647\u060c \u0622\u0645\u0627\u0631 \u062c\u062f\u06cc\u062f \u0627\u0632 API \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0647 \u0648 \u0622\u062e\u0631\u06cc\u0646 \u0641\u0639\u0627\u0644\u06cc\u062a\u200c\u0647\u0627 \u0647\u0645 \u062f\u0631 \u062c\u062f\u0648\u0644 \u062f\u06cc\u06af\u0631\u06cc \u0627\u0632 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u062d\u0644\u06cc \u0642\u0631\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u067e\u0646\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u062b\u0627\u0644 \u062e\u0648\u0628\u06cc \u0628\u0631\u0627\u06cc \u0641\u0647\u0645\u06cc\u062f\u0646 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639\u0647 \u06a9\u0647 ViewModel \u0686\u0637\u0648\u0631 \u0686\u0646\u062f \u062c\u0631\u06cc\u0627\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0628\u0647 \u06cc\u06a9 State \u0648\u0627\u062d\u062f \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u06a9\u0644\u06cc \u0635\u0641\u062d\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">DashboardScreen<br>\u2193<br>DashboardViewModel<br>\u2193<br>DashboardRepository<br>\u2193<br>Room + API<br>\u2193<br>DashboardUiState<br>\u2193<br>DashboardScreen<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0641\u0642\u0637 DashboardUiState \u0631\u0648 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647. \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0628\u062f\u0648\u0646\u0647 \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0627\u0632 Room \u0627\u0648\u0645\u062f\u0647\u060c \u0622\u0645\u0627\u0631 \u06a9\u0627\u0644\u0627\u0647\u0627 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647 \u06cc\u0627 \u0622\u062e\u0631\u06cc\u0646 \u0641\u0639\u0627\u0644\u06cc\u062a \u0627\u0632 Cache \u062e\u0648\u0646\u062f\u0647 \u0634\u062f\u0647. ViewModel \u0648 Repository \u0627\u06cc\u0646 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0631\u0648 \u067e\u0634\u062a \u06cc\u06a9 \u0648\u0636\u0639\u06cc\u062a \u0633\u0627\u062f\u0647 \u067e\u0646\u0647\u0627\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0646\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0686\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u0645 \u0635\u0641\u062d\u0647 \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0631\u0627\u06cc \u062d\u0644 \u0686\u0647 \u0645\u0633\u0626\u0644\u0647\u200c\u0627\u06cc \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647. \u0627\u06af\u0631 \u0647\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u06a9\u0647 \u062f\u0627\u0631\u06cc\u0645 \u062f\u0627\u062e\u0644 Dashboard \u0628\u0631\u06cc\u0632\u06cc\u0645\u060c \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f \u0628\u0627 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u0634\u0644\u0648\u063a \u0648 \u0628\u06cc\u200c\u0647\u062f\u0641 \u0631\u0648\u0628\u0647\u200c\u0631\u0648 \u0645\u06cc\u0634\u06cc\u0645. \u067e\u0646\u0644 \u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u062f\u06cc\u062f\u0646 \u0627\u0648\u0646\u200c\u0647\u0627 \u0628\u062a\u0648\u0646\u0647 \u0648\u0636\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc \u0631\u0648 \u0628\u0641\u0647\u0645\u0647 \u06cc\u0627 \u06cc\u06a9 \u0627\u0642\u062f\u0627\u0645 \u0645\u0647\u0645 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u0627\u0628\u062a\u062f\u0627\u06cc\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u067e\u0646\u0644 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0634\u0627\u0645\u0644 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631<br>\u062a\u0639\u062f\u0627\u062f \u06a9\u0644 \u06a9\u0627\u0644\u0627\u0647\u0627<br>\u062a\u0639\u062f\u0627\u062f \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\u06cc \u062b\u0628\u062a\u200c\u0634\u062f\u0647 \u0627\u0645\u0631\u0648\u0632<br>\u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0644\u0627\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a<br>\u0622\u062e\u0631\u06cc\u0646 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc<br>\u0645\u06cc\u0627\u0646\u200c\u0628\u0631 \u062b\u0628\u062a \u0642\u06cc\u0645\u062a \u062c\u062f\u06cc\u062f<br>\u0645\u06cc\u0627\u0646\u200c\u0628\u0631 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0627\u0644\u0627\u0647\u0627<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u06a9\u062f\u0648\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f \u0628\u0627\u06cc\u062f \u0628\u0647 \u06cc\u06a9 \u0646\u06cc\u0627\u0632 \u0648\u0627\u0642\u0639\u06cc \u067e\u0627\u0633\u062e \u0628\u062f\u0647. \u0645\u062b\u0644\u0627\u064b \u0639\u062f\u062f \u062a\u0639\u062f\u0627\u062f \u06a9\u0644 \u06a9\u0627\u0644\u0627\u0647\u0627 \u0628\u0647 \u062a\u0646\u0647\u0627\u06cc\u06cc \u0634\u0627\u06cc\u062f \u062e\u06cc\u0644\u06cc \u0645\u0647\u0645 \u0646\u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u06a9\u0627\u0644\u0627\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u06cc\u06a9 \u06a9\u0627\u0631 \u0646\u0627\u062a\u0645\u0627\u0645 \u0631\u0648 \u0628\u0647 \u0645\u062f\u06cc\u0631 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647. \u06cc\u0627 \u0622\u062e\u0631\u06cc\u0646 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0641\u0647\u0645\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u06a9\u0647 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647 \u062a\u0627\u0632\u0647 \u0647\u0633\u062a\u0646 \u06cc\u0627 \u0645\u0645\u06a9\u0646\u0647 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0686\u0646\u062f \u0633\u0627\u0639\u062a \u0642\u0628\u0644 \u0628\u0627\u0634\u0646. \u067e\u0633 Dashboard \u0646\u0628\u0627\u06cc\u062f \u0628\u0647 \u0627\u0646\u0628\u0627\u0631 \u062f\u0627\u062f\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0647. \u0648\u0638\u06cc\u0641\u0647 \u0627\u0648\u0646 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f\u0646 \u0648\u0636\u0639\u06cc\u062a \u0648 \u0647\u062f\u0627\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0627\u0642\u062f\u0627\u0645 \u0628\u0639\u062f\u06cc\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0633\u0627\u062e\u062a \u06cc\u06a9 \u0645\u062f\u0644 \u0648\u0627\u062d\u062f \u0628\u0631\u0627\u06cc \u0635\u0641\u062d\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u067e\u0646\u0644 \u0627\u0632 \u0645\u062f\u0644\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0628\u06cc\u0627\u0646\u060c \u0627\u0645\u0627 \u0635\u0641\u062d\u0647 \u0646\u0628\u0627\u06cc\u062f \u0645\u062c\u0628\u0648\u0631 \u0628\u0627\u0634\u0647 \u0628\u0627 \u0686\u0646\u062f \u0645\u062f\u0644 \u0634\u0628\u06a9\u0647 \u0648 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u06a9\u0627\u0631 \u06a9\u0646\u0647. \u0628\u0647\u062a\u0631\u0647 \u0628\u0631\u0627\u06cc \u062e\u0648\u062f \u0635\u0641\u062d\u0647 \u06cc\u06a9 \u0645\u062f\u0644 \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u0628\u0633\u0627\u0632\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class DashboardData(\n    val businessName: String,\n    val totalProducts: Int,\n    val todayPrices: Int,\n    val productsWithoutPrice: Int,\n    val lastUpdatedAt: String\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">DashboardData<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> businessName: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> totalProducts: <\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> todayPrices: <\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> productsWithoutPrice: <\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> lastUpdatedAt: <\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u062f\u0644 \u0646\u0645\u06cc\u06af\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u06a9\u062c\u0627 \u0627\u0648\u0645\u062f\u0646. \u0641\u0642\u0637 \u0645\u06cc\u06af\u0647 \u067e\u0646\u0644 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062e\u0648\u062f\u0634 \u0628\u0647 \u0686\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">businessName \u0646\u0627\u0645 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. totalProducts \u062a\u0639\u062f\u0627\u062f \u06a9\u0644 \u06a9\u0627\u0644\u0627\u0647\u0627\u0633\u062a. todayPrices \u062a\u0639\u062f\u0627\u062f \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0627\u0645\u0631\u0648\u0632 \u062b\u0628\u062a \u06cc\u0627 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0634\u062f\u0646. productsWithoutPrice \u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0644\u0627\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647 \u06a9\u0647 \u0647\u0646\u0648\u0632 \u0642\u06cc\u0645\u062a \u0646\u062f\u0627\u0631\u0646 \u0648 lastUpdatedAt \u0632\u0645\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. \u062f\u0644\u06cc\u0644 \u0633\u0627\u062e\u062a\u0646 \u0686\u0646\u06cc\u0646 \u0645\u062f\u0644\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0645\u062f\u0644 API \u06cc\u0627 Entity \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0631\u0627\u0633\u0627\u0633 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0644\u0627\u06cc\u0647 \u062e\u0648\u062f\u0634\u0648\u0646 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0646. \u0645\u062b\u0644\u0627\u064b \u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0647\u200c\u0647\u0627 \u0641\u06cc\u0644\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u067e\u0646\u0644 \u0628\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0627\u0648\u0646\u200c\u0647\u0627 \u0646\u06cc\u0627\u0632\u06cc \u0646\u062f\u0627\u0631\u0647. DashboardData \u0641\u0642\u0637 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 Backend \u0648\u0627\u0628\u0633\u062a\u0647 \u0646\u0634\u0647. \u0627\u06af\u0631 \u0641\u0631\u062f\u0627 \u0646\u0627\u0645 \u06cc\u06a9\u06cc \u0627\u0632 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc API \u0639\u0648\u0636 \u0634\u062f\u060c \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u062a\u0645\u0627\u0645 \u06a9\u062f\u0647\u0627\u06cc \u0635\u0641\u062d\u0647 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u06cc\u0645\u061b \u0641\u0642\u0637 \u062a\u0628\u062f\u06cc\u0644 \u0645\u062f\u0644\u200c\u0647\u0627 \u062f\u0631 Repository \u0627\u0635\u0644\u0627\u062d \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">State \u0635\u0641\u062d\u0647 \u067e\u0646\u0644<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0646\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0647\u0645 \u0645\u062b\u0644 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0648 \u0648\u0631\u0648\u062f\u060c \u0628\u0647 \u06cc\u06a9 State \u0645\u0634\u062e\u0635 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0647. \u0627\u0645\u0627 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u062a\u0641\u0627\u0648\u062a \u0645\u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u062f\u0631 \u0635\u0641\u062d\u0647 \u0648\u0631\u0648\u062f\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0646 \u06cc\u0627 \u062e\u0637\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u062f\u0631 Dashboard \u0645\u0645\u06a9\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u0645\u0648\u062c\u0648\u062f \u0628\u0627\u0634\u0646\u060c \u0627\u0645\u0627 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0647\u0645 \u062f\u0631 \u062d\u0627\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0627\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0633\u062e\u0647 \u0633\u0627\u062f\u0647 State \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sealed interface DashboardUiState {\n    data object Loading : DashboardUiState\n\n    data class Content(\n        val data: DashboardData,\n        val isRefreshing: Boolean = false\n    ) : DashboardUiState\n\n    data class Error(val message: String) : DashboardUiState\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">sealed<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">interface<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">DashboardUiState<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">object<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Loading<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">DashboardUiState<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Content<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\">: <\/span><span style=\"color: #6F42C1\">DashboardData<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isRefreshing: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) : <\/span><span style=\"color: #6F42C1\">DashboardUiState<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Error<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> message: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">) : <\/span><span style=\"color: #6F42C1\">DashboardUiState<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Loading \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0632\u0645\u0627\u0646\u06cc\u0647 \u06a9\u0647 \u0647\u0646\u0648\u0632 \u0647\u06cc\u0686 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0646\u062f\u0627\u0631\u06cc\u0645. Content \u06cc\u0639\u0646\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u067e\u0646\u0644 \u0645\u0648\u062c\u0648\u062f\u0646 \u0648 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645. Error \u0647\u0645 \u0632\u0645\u0627\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0647\u06cc\u0686 \u062f\u0627\u062f\u0647 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u06cc \u0646\u062f\u0627\u0631\u06cc\u0645 \u0648 \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0631\u06cc\u0627\u0641\u062a \u0647\u0645 \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u06cc\u0644\u062f isRefreshing \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646 State \u0627\u0633\u062a. \u0641\u0631\u0636 \u06a9\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0634\u200c\u0634\u062f\u0647 \u062f\u0627\u062e\u0644 Room \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0646. \u0635\u0641\u062d\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0647\u0645\u0627\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 Repository \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062a\u0627\u0632\u0647 \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0646\u0628\u0627\u06cc\u062f \u06a9\u0644 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0628\u0627 Loading \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u06cc\u0645. \u0635\u0641\u062d\u0647 \u0647\u0645\u0686\u0646\u0627\u0646 Content \u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 isRefreshing \u0628\u0631\u0627\u0628\u0631 true \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u0628\u06cc\u0646 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0648\u062c\u0648\u062f \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0648 \u062e\u06cc\u0644\u06cc \u0628\u0647\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0647\u0646\u06af\u0627\u0645 \u0647\u0631 Refresh \u0628\u0627 \u0635\u0641\u062d\u0647 \u0633\u0641\u06cc\u062f \u0631\u0648\u0628\u0647\u200c\u0631\u0648 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0646\u0644 \u0627\u0628\u062a\u062f\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0644\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u062f\u0631 \u062f\u0631\u0633\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc Offline First \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u06cc\u0645\u060c \u0635\u0641\u062d\u0647 \u0628\u0627\u06cc\u062f \u062a\u0627 \u062c\u0627\u06cc \u0645\u0645\u06a9\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062e\u0648\u062f\u0634 \u0631\u0648 \u0627\u0632 Room \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647. Repository \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0644\u06cc \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 \u06cc\u06a9 Flow \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 ViewModel \u0642\u0631\u0627\u0631 \u0628\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun observeDashboard(): Flow&lt;DashboardData> {\n    return dashboardDao.observeDashboard()\n        .map { entity -> entity.toDashboardData() }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeDashboard<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">DashboardData<\/span><span style=\"color: #24292E\">&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> dashboardDao.<\/span><span style=\"color: #6F42C1\">observeDashboard<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\"> { entity <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> entity.<\/span><span style=\"color: #6F42C1\">toDashboardData<\/span><span style=\"color: #24292E\">() }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0628\u062e\u0648\u0646\u0647 \u0648 \u062a\u0645\u0627\u0645 \u0628\u0634\u0647. <code>Flow<\/code> \u06cc\u0639\u0646\u06cc \u0647\u0631 \u0632\u0645\u0627\u0646 \u062f\u0627\u062f\u0647 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u067e\u0646\u0644 \u062f\u0631 Room \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647\u060c \u0645\u0642\u062f\u0627\u0631 \u062c\u062f\u06cc\u062f \u0628\u0647 ViewModel \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">dashboardDao.observeDashboard() \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062e\u0627\u0645 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062a\u0627\u0628\u0639 map \u0647\u0645 \u0647\u0631 Entity \u0631\u0648 \u0628\u0647 DashboardData \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061b \u06cc\u0639\u0646\u06cc \u0645\u062f\u0644 \u0645\u0646\u0627\u0633\u0628 \u0644\u0627\u06cc\u0647 UI \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0632\u06cc\u062a \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0635\u0641\u062d\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0627\u0628\u0633\u062a\u0647 \u0646\u06cc\u0633\u062a. \u0627\u06af\u0631 Repository \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0632 API \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u0647\u060c Flow \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0648 \u067e\u0646\u0644 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647\u200c\u0631\u0648\u0632 \u0645\u06cc\u0634\u0647. \u067e\u0633 API \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0635\u0641\u062d\u0647 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0645\u06cc\u062f\u0647. API \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u062d\u0644\u06cc \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u0646\u0628\u0639 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0635\u0641\u062d\u0647 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ViewModel \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u067e\u0646\u0644 \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0628\u0627\u06cc\u062f Flow \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Repository \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647 \u0648 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 State \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc Compose \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val uiState = repository.observeDashboard()\n    .map&lt;DashboardData, DashboardUiState> {\n        DashboardUiState.Content(data = it)\n    }\n    .stateIn(\n        scope = viewModelScope,\n        started = SharingStarted.WhileSubscribed(5_000),\n        initialValue = DashboardUiState.Loading\n    )\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> uiState <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> repository.<\/span><span style=\"color: #6F42C1\">observeDashboard<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">DashboardData<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #6F42C1\">DashboardUiState<\/span><span style=\"color: #24292E\">&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        DashboardUiState.<\/span><span style=\"color: #6F42C1\">Content<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> it)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">stateIn<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        scope <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> viewModelScope,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        started <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> SharingStarted.<\/span><span style=\"color: #6F42C1\">WhileSubscribed<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">5_000<\/span><span style=\"color: #24292E\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        initialValue <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> DashboardUiState.Loading<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u06a9\u062f\u0647\u0627\u06cc \u0627\u06cc\u0646 \u062f\u0631\u0633\u0647\u060c \u0686\u0648\u0646 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0686\u0637\u0648\u0631 \u0627\u0632 Repository \u0628\u0647 \u06cc\u06a9 State \u067e\u0627\u06cc\u062f\u0627\u0631 \u062f\u0627\u062e\u0644 ViewModel \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627\u0628\u0639 map \u0647\u0631 DashboardData \u0631\u0648 \u062f\u0627\u062e\u0644 DashboardUiState.Content \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647. \u0635\u0641\u062d\u0647 \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u0645\u062f\u0644 \u062e\u0627\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647\u061b State \u0645\u0634\u062e\u0635\u06cc \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u06a9\u0647 \u0645\u06cc\u06af\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0622\u0645\u0627\u062f\u0647 \u0627\u0633\u062a. stateIn \u06cc\u06a9 Flow \u0645\u0639\u0645\u0648\u0644\u06cc \u0631\u0648 \u0628\u0647 StateFlow \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628\u060c \u0647\u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u0645\u0642\u062f\u0627\u0631 \u0641\u0639\u0644\u06cc \u0628\u0631\u0627\u06cc \u0635\u0641\u062d\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u0648 Compose \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0648\u0646 \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u0647. scope = viewModelScope \u06cc\u0639\u0646\u06cc \u0627\u06cc\u0646 \u062c\u0631\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647 \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u0645\u0648\u0646\u0647 \u06a9\u0647 ViewModel \u0632\u0646\u062f\u0647 \u0627\u0633\u062a. initialValue \u0647\u0645 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0642\u0628\u0644 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0648\u0644\u06cc\u0646 \u062f\u0627\u062f\u0647\u060c \u0635\u0641\u062d\u0647 \u062f\u0631 \u0648\u0636\u0639\u06cc\u062a Loading \u0642\u0631\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0632\u06cc\u0631 \u0631\u0641\u062a\u0627\u0631 \u0627\u0634\u062a\u0631\u0627\u06a9\u200c\u06af\u0630\u0627\u0631\u06cc \u062c\u0631\u06cc\u0627\u0646 \u0631\u0648 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>started = SharingStarted.WhileSubscribed(5_000)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">started <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> SharingStarted.<\/span><span style=\"color: #6F42C1\">WhileSubscribed<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">5_000<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 State \u0628\u0627\u0634\u0647\u060c \u062c\u0631\u06cc\u0627\u0646 \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u0645\u0648\u0646\u0647. \u0627\u06af\u0631 \u0645\u0634\u0627\u0647\u062f\u0647\u200c\u06af\u0631\u0647\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u0646\u060c ViewModel \u067e\u0646\u062c \u062b\u0627\u0646\u06cc\u0647 \u0635\u0628\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u062c\u0631\u06cc\u0627\u0646 \u0631\u0648 \u0645\u062a\u0648\u0642\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0641\u0627\u0635\u0644\u0647 \u06a9\u0648\u062a\u0627\u0647 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0648\u0642\u062a\u06cc \u0645\u062b\u0644 \u0686\u0631\u062e\u0634 \u0635\u0641\u062d\u0647 \u06cc\u0627 \u062c\u0627\u0628\u0647\u200c\u062c\u0627\u06cc\u06cc \u06a9\u0648\u062a\u0627\u0647 \u0628\u0627\u0639\u062b \u062a\u0648\u0642\u0641 \u0648 \u0634\u0631\u0648\u0639 \u0645\u06a9\u0631\u0631 Flow \u0646\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062a\u0627\u0632\u0647 \u0627\u0632 \u0633\u0631\u0648\u0631<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a. Repository \u0628\u0627\u06cc\u062f \u062f\u0631 \u0635\u0648\u0631\u062a \u0648\u062c\u0648\u062f \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0647\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>suspend fun refreshDashboard() {\n    val response = api.getDashboard()\n    dashboardDao.upsert(response.toEntity())\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">refreshDashboard<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> response <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> api.<\/span><span style=\"color: #6F42C1\">getDashboard<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    dashboardDao.<\/span><span style=\"color: #6F42C1\">upsert<\/span><span style=\"color: #24292E\">(response.<\/span><span style=\"color: #6F42C1\">toEntity<\/span><span style=\"color: #24292E\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u062f\u0648 \u06a9\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647. \u0627\u0628\u062a\u062f\u0627 api.getDashboard() \u0622\u0645\u0627\u0631 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0628\u0639\u062f upsert \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0631\u06cc\u0627\u0641\u062a\u06cc \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u06cc\u0627 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0644\u0645\u0647 upsert \u062a\u0631\u06a9\u06cc\u0628\u06cc \u0627\u0632 insert \u0648 update \u0627\u0633\u062a. \u06cc\u0639\u0646\u06cc \u0627\u06af\u0631 \u0631\u06a9\u0648\u0631\u062f \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0627\u06af\u0631 \u0642\u0628\u0644\u0627\u064b \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u0634\u0647. \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0686\u06cc\u0632\u06cc \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 \u0635\u0641\u062d\u0647 \u0628\u0631\u0646\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647. \u0646\u062a\u06cc\u062c\u0647 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0647 \u0648 Flow \u0642\u0628\u0644\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0648 \u0628\u0647 ViewModel \u0645\u0646\u062a\u0642\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">API<br>\u2193<br>Room<br>\u2193<br>Flow<br>\u2193<br>ViewModel<br>\u2193<br>Compose<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0647\u0645 API \u0648 \u0647\u0645 Room \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0635\u0641\u062d\u0647 \u0631\u0648 \u062a\u063a\u0630\u06cc\u0647 \u06a9\u0646\u0646\u060c \u0645\u0645\u06a9\u0646\u0647 \u062f\u0648 \u0646\u0633\u062e\u0647 \u0645\u062a\u0641\u0627\u0648\u062a \u0627\u0632 \u06cc\u06a9 \u062f\u0627\u062f\u0647 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645. \u0627\u0645\u0627 \u0648\u0642\u062a\u06cc Room \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc\u0647\u060c \u062a\u0631\u062a\u06cc\u0628 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0634\u062e\u0635 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u062c\u0631\u0627\u06cc Refresh \u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0632 \u0634\u062f\u0646 \u0635\u0641\u062d\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u067e\u0646\u0644 \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646\u200c\u0628\u0627\u0631 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647\u060c ViewModel \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>init {\n    refresh()\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">init<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">refresh<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">init \u0647\u0646\u06af\u0627\u0645 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0646 ViewModel \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646\u062c\u0627 \u0641\u0642\u0637 \u062a\u0627\u0628\u0639 refresh() \u0631\u0648 \u0635\u062f\u0627 \u0645\u06cc\u200c\u0632\u0646\u06cc\u0645 \u062a\u0627 \u0645\u0646\u0637\u0642 \u0648\u0627\u0642\u0639\u06cc \u062f\u0627\u062e\u0644 \u062a\u0627\u0628\u0639 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647. \u062e\u0648\u062f Refresh \u062f\u0627\u062e\u0644 Coroutine \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun refresh() {\n    viewModelScope.launch {\n        repository.refreshDashboard()\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">refresh<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    viewModelScope.<\/span><span style=\"color: #6F42C1\">launch<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        repository.<\/span><span style=\"color: #6F42C1\">refreshDashboard<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a API \u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a <code>suspend<\/code> \u0648 \u0632\u0645\u0627\u0646\u200c\u0628\u0631\u0647\u060c \u062f\u0627\u062e\u0644 viewModelScope.launch \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0647\u0646\u0648\u0632 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627 \u06cc\u0627 \u0648\u0636\u0639\u06cc\u062a Refresh \u0646\u062f\u0627\u0631\u0647. \u062f\u0631 \u067e\u0646\u0644 \u0648\u0627\u0642\u0639\u06cc \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u06cc\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062c\u062f\u06cc\u062f \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u0633\u062a \u06cc\u0627 \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u062f\u0648\u0646 \u062d\u0630\u0641 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0628\u0644\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0635\u0641\u062d\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0634\u200c\u0634\u062f\u0647 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0628\u0647 \u067e\u0627\u06cc\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0634\u0647 \u062a\u0627 Refresh \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u0644\u062d\u0638\u0647 \u0646\u0628\u0627\u06cc\u062f State \u0631\u0648 \u0628\u0647 <code>Loading<\/code> \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u06cc\u0645\u060c \u0686\u0648\u0646 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u062d\u062a\u0648\u0627\u06cc \u0642\u0628\u0644\u06cc \u0631\u0648 \u0627\u0632 \u0635\u0641\u062d\u0647 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u06cc\u06a9 State \u062c\u062f\u0627 \u0628\u0631\u0627\u06cc \u0648\u0636\u0639\u06cc\u062a Refresh \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>private val _isRefreshing = MutableStateFlow(false)\nval isRefreshing = _isRefreshing.asStateFlow()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">private<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> _isRefreshing <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">MutableStateFlow<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isRefreshing <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> _isRefreshing.<\/span><span style=\"color: #6F42C1\">asStateFlow<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0645\u0642\u062f\u0627\u0631 \u0627\u0648\u0646 \u0631\u0648\u06cc <code>true<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u0628\u0639\u062f \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0648\u0628\u0627\u0631\u0647 <code>false<\/code> \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun refresh() {\n    viewModelScope.launch {\n        _isRefreshing.value = true\n\n        try {\n            repository.refreshDashboard()\n        } finally {\n            _isRefreshing.value = false\n        }\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">refresh<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    viewModelScope.<\/span><span style=\"color: #6F42C1\">launch<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        _isRefreshing.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">true<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">try<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            repository.<\/span><span style=\"color: #6F42C1\">refreshDashboard<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        } <\/span><span style=\"color: #D73A49\">finally<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            _isRefreshing.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 <code>finally<\/code> \u0686\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0648\u0641\u0642 \u0628\u0627\u0634\u0647 \u0648 \u0686\u0647 \u062e\u0637\u0627 \u0627\u062a\u0641\u0627\u0642 \u0628\u06cc\u0641\u062a\u0647\u060c \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0637\u0645\u0626\u0646 \u0645\u06cc\u0634\u06cc\u0645 \u062d\u0627\u0644\u062a Refresh \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0634\u0647 \u0631\u0648\u0634\u0646 \u0628\u0627\u0642\u06cc \u0646\u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0641\u0642\u0637 \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u0648\u0641\u0642 \u0645\u0642\u062f\u0627\u0631 \u0631\u0648 \u0628\u0647 <code>false<\/code> \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u06cc\u0645\u060c \u0645\u0645\u06a9\u0646\u0647 \u0647\u0646\u06af\u0627\u0645 \u062e\u0637\u0627 \u0646\u0634\u0627\u0646\u06af\u0631 Refresh \u0647\u0645\u0686\u0646\u0627\u0646 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0628\u0686\u0631\u062e\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0645\u06cc\u0634\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0635\u0644\u06cc \u0648 \u0648\u0636\u0639\u06cc\u062a Refresh \u0631\u0648 \u0628\u0627 \u0647\u0645 \u062a\u0631\u06a9\u06cc\u0628 \u06a9\u0631\u062f:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>combine(\n    repository.observeDashboard(),\n    isRefreshing\n) { data, refreshing ->\n    DashboardUiState.Content(\n        data = data,\n        isRefreshing = refreshing\n    )\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">combine<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    repository.<\/span><span style=\"color: #6F42C1\">observeDashboard<\/span><span style=\"color: #24292E\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    isRefreshing<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) { <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\">, refreshing <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    DashboardUiState.<\/span><span style=\"color: #6F42C1\">Content<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        isRefreshing <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> refreshing<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>combine<\/code> \u0622\u062e\u0631\u06cc\u0646 \u0645\u0642\u062f\u0627\u0631 \u062f\u0648 Flow \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u0627\u0632 \u062a\u0631\u06a9\u06cc\u0628 \u0627\u0648\u0646\u200c\u0647\u0627 State \u062c\u062f\u06cc\u062f \u0645\u06cc\u200c\u0633\u0627\u0632\u0647. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 Flow \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u067e\u0646\u0644 \u0631\u0648 \u0645\u06cc\u062f\u0647 \u0648 Flow \u062f\u0648\u0645 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645\u0647 \u06cc\u0627 \u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628\u060c \u0635\u0641\u062d\u0647 \u06cc\u06a9 State \u0648\u0627\u062d\u062f \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0647\u0645 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0648 \u0647\u0645 \u0648\u0636\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0648 \u062f\u0631 \u062e\u0648\u062f\u0634 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0635\u0641\u062d\u0647 \u0686\u0637\u0648\u0631 State \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Compose\u060c \u067e\u0646\u0644 StateFlow \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val uiState by viewModel.uiState.collectAsStateWithLifecycle()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> uiState <\/span><span style=\"color: #D73A49\">by<\/span><span style=\"color: #24292E\"> viewModel.uiState.<\/span><span style=\"color: #6F42C1\">collectAsStateWithLifecycle<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u062f\u0627\u062f\u0647 Room \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647 \u06cc\u0627 \u0648\u0636\u0639\u06cc\u062a Refresh \u0639\u0648\u0636 \u0628\u0634\u0647\u060c <code>uiState<\/code> \u0647\u0645 \u0628\u0647\u200c\u0631\u0648\u0632 \u0645\u06cc\u0634\u0647 \u0648 Compose \u0641\u0642\u0637 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0648\u0627\u0628\u0633\u062a\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0648\u0636\u0639\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0627\u0632 <code>when<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>when (val state = uiState) {\n    DashboardUiState.Loading -> LoadingView()\n\n    is DashboardUiState.Content ->\n        DashboardContent(state.data)\n\n    is DashboardUiState.Error ->\n        ErrorView(state.message)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">when<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> state <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> uiState) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    DashboardUiState.Loading <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">LoadingView<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> DashboardUiState.Content <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">DashboardContent<\/span><span style=\"color: #24292E\">(state.<\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> DashboardUiState.Error <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">ErrorView<\/span><span style=\"color: #24292E\">(state.message)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0633\u0627\u062e\u062a \u06a9\u0627\u0645\u0644 \u0635\u0641\u062d\u0647 \u0646\u06cc\u0633\u062a. \u0641\u0642\u0637 \u062a\u0635\u0645\u06cc\u0645 \u0627\u0635\u0644\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0648 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647: \u062f\u0631 \u0647\u0631 \u0648\u0636\u0639\u06cc\u062a \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0628\u0627\u06cc\u062f \u062f\u06cc\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647 \u0648 \u0647\u0646\u0648\u0632 \u0645\u0646\u062a\u0638\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0648\u0644\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc\u0645\u060c Loading \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0648\u0642\u062a\u06cc \u062f\u0627\u062f\u0647 \u0622\u0645\u0627\u062f\u0647 \u0627\u0633\u062a\u060c \u0645\u062d\u062a\u0648\u0627\u06cc \u067e\u0646\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0627\u06af\u0631 \u0647\u06cc\u0686 \u062f\u0627\u062f\u0647 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0635\u0641\u062d\u0647 \u062e\u0637\u0627 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 \u06a9\u0627\u0631\u062a\u200c\u0647\u0627<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0647\u0631 \u0639\u062f\u062f \u067e\u0646\u0644 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u06cc\u06a9 Composable \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0648 \u062c\u062f\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645. \u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0645\u0642\u062f\u0627\u0631\u0647\u0627 \u0631\u0648 \u0627\u0632 <code>DashboardData<\/code> \u0628\u06af\u06cc\u0631\u06cc\u0645\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0631 \u06a9\u0627\u0631\u062a \u062e\u0648\u062f\u0634 \u0627\u0632 ViewModel \u06cc\u0627 Repository \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u062e\u0648\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>DashboardStatCard(\n    title = \"\u06a9\u0627\u0644\u0627\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a\",\n    value = data.productsWithoutPrice.toString()\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">DashboardStatCard<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    title <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u06a9\u0627\u0644\u0627\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\">.productsWithoutPrice.<\/span><span style=\"color: #6F42C1\">toString<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u0627\u0631\u062a \u0641\u0642\u0637 \u062f\u0627\u062f\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. \u0646\u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u0639\u062f\u062f \u0627\u0632 API \u0627\u0648\u0645\u062f\u0647\u060c Room \u06cc\u0627 Cache.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0646\u0648\u0639 Composable \u0631\u0648 \u0628\u0647 \u0627\u0633\u0645 <strong>Stateless Composable<\/strong> \u0645\u06cc\u200c\u0634\u0646\u0627\u0633\u06cc\u0645\u061b \u06cc\u0639\u0646\u06cc \u062e\u0648\u062f\u0634 \u0645\u0627\u0644\u06a9 State \u0627\u0635\u0644\u06cc \u0646\u06cc\u0633\u062a \u0648 \u0641\u0642\u0637 \u0628\u0631\u0627\u0633\u0627\u0633 \u0648\u0631\u0648\u062f\u06cc\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 UI \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u06a9\u0627\u0631\u062a \u0631\u0648 \u062f\u0631 \u062c\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0647\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0631\u0627\u062d\u062a\u200c\u062a\u0631 Preview \u0628\u06af\u06cc\u0631\u06cc\u0645 \u0648 \u062f\u0631 \u062a\u0633\u062a\u200c\u0647\u0627 \u0645\u0642\u062f\u0627\u0631\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0628\u0647\u0634 \u0628\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0647\u0631 \u06a9\u0627\u0631\u062a \u062e\u0648\u062f\u0634 ViewModel \u0631\u0648 \u0635\u062f\u0627 \u0628\u0632\u0646\u0647\u060c \u0627\u062c\u0632\u0627\u06cc UI \u0628\u0647 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0642\u0641\u0644 \u0645\u06cc\u0634\u0646 \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 \u0627\u0648\u0646\u200c\u0647\u0627 \u0633\u062e\u062a\u200c\u062a\u0631 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u06cc\u0627\u0646\u200c\u0628\u0631\u0647\u0627\u06cc \u067e\u0646\u0644 \u0686\u0637\u0648\u0631 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u067e\u0646\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u0645\u06a9\u0646\u0647 \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u062b\u0628\u062a \u0642\u06cc\u0645\u062a \u062c\u062f\u06cc\u062f \u06cc\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0627\u0644\u0627\u0647\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646. Composable \u062f\u0627\u062e\u0644\u06cc \u067e\u0646\u0644 \u0646\u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0634 NavController \u0631\u0648 \u0628\u0634\u0646\u0627\u0633\u0647. \u0628\u0647\u062a\u0631\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0627\u0632 \u0628\u06cc\u0631\u0648\u0646 \u0628\u0647 \u0627\u0648\u0646 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>DashboardContent(\n    data = state.data,\n    onAddPriceClick = onAddPriceClick,\n    onProductsClick = onProductsClick\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">DashboardContent<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> state.<\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    onAddPriceClick <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> onAddPriceClick,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    onProductsClick <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> onProductsClick<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u062e\u0644 \u06a9\u0627\u0631\u062a \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062b\u0628\u062a \u0642\u06cc\u0645\u062a \u0641\u0642\u0637 Callback \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Button(onClick = onAddPriceClick) {\n    Text(\"\u062b\u0628\u062a \u0642\u06cc\u0645\u062a \u062c\u062f\u06cc\u062f\")\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">Button<\/span><span style=\"color: #24292E\">(onClick <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> onAddPriceClick) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">Text<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u062b\u0628\u062a \u0642\u06cc\u0645\u062a \u062c\u062f\u06cc\u062f&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Callback \u06cc\u0639\u0646\u06cc \u0635\u0641\u062d\u0647 \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0627\u0641\u062a\u0627\u062f\u0647\u060c \u0627\u0645\u0627 \u062a\u0635\u0645\u06cc\u0645 \u0646\u0647\u0627\u06cc\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 Navigation \u062f\u0631 \u0644\u0627\u06cc\u0647 \u0628\u0627\u0644\u0627\u062a\u0631 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u062f\u0631 \u0645\u0642\u0635\u062f Navigation \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>onAddPriceClick = {\n    navController.navigate(\"add-price\")\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">onAddPriceClick <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    navController.<\/span><span style=\"color: #6F42C1\">navigate<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;add-price&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0639\u0644\u062a \u0627\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 <code>DashboardContent<\/code> \u0648\u0638\u06cc\u0641\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0645\u062d\u062a\u0648\u0627\u06cc \u067e\u0646\u0644 \u0631\u0648 \u062f\u0627\u0631\u0647\u060c \u0646\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0633\u06cc\u0631\u0647\u0627\u06cc \u06a9\u0644 \u0628\u0631\u0646\u0627\u0645\u0647. \u0627\u06af\u0631 Navigation \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0627\u062e\u0644 \u0647\u0645\u0647 \u06a9\u0627\u0631\u062a\u200c\u0647\u0627 \u067e\u062e\u0634 \u06a9\u0646\u06cc\u0645\u060c Composable\u0647\u0627 \u0648\u0627\u0628\u0633\u062a\u0647 \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u0648\u0646\u200c\u0647\u0627 \u0633\u062e\u062a \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0627\u0632 Session \u06cc\u0627 Room\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0647\u0645 \u062f\u0627\u062e\u0644 \u067e\u0627\u0633\u062e \u0648\u0631\u0648\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0647\u0645 \u062f\u0631 Token \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0647\u0645 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0633\u0624\u0627\u0644 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0635\u0641\u062d\u0647 \u0628\u0627\u06cc\u062f \u0646\u0627\u0645 \u0631\u0648 \u0627\u0632 \u06a9\u062c\u0627 \u0628\u062e\u0648\u0646\u0647\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0627\u0632 Room \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0646. Token \u0628\u0631\u0627\u06cc \u0627\u062b\u0628\u0627\u062a \u0647\u0648\u06cc\u062a \u0648 \u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u0633\u062a\u060c \u0646\u0647 \u0628\u0631\u0627\u06cc \u062a\u063a\u0630\u06cc\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc. \u062d\u062a\u06cc \u0627\u06af\u0631 \u0628\u0631\u062e\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 JWT \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0632 \u0627\u0648\u0646\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc UI \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0646\u0627\u0645\u0646\u0627\u0633\u0628\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0639\u062f\u0627\u064b \u062f\u0631 \u0633\u0631\u0648\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647. \u0627\u06af\u0631 \u0641\u0642\u0637 \u0645\u0642\u062f\u0627\u0631 \u0642\u062f\u06cc\u0645\u06cc \u062f\u0627\u062e\u0644 Token \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645\u060c \u0635\u0641\u062d\u0647 \u062a\u0627 \u0632\u0645\u0627\u0646 \u0635\u062f\u0648\u0631 Token \u062c\u062f\u06cc\u062f \u0628\u0647\u200c\u0631\u0648\u0632 \u0646\u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a Room \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0647\u0646\u06af\u0627\u0645 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0631\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0642\u0627\u0639\u062f\u0647 \u0633\u0627\u062f\u0647 \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Token \u0628\u0631\u0627\u06cc \u0647\u0648\u06cc\u062a \u0648 \u0645\u062c\u0648\u0632<br>Room \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062f\u0648 \u0645\u0645\u06a9\u0646\u0647 \u0628\u062e\u0634\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u0634\u0627\u0628\u0647 \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u060c \u0627\u0645\u0627 \u0647\u062f\u0641 \u0627\u0648\u0646\u200c\u0647\u0627 \u06cc\u06a9\u0633\u0627\u0646 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0637\u0627\u06cc Refresh \u0646\u0628\u0627\u06cc\u062f \u06a9\u0644 \u067e\u0646\u0644 \u0631\u0648 \u0646\u0627\u0628\u0648\u062f \u06a9\u0646\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u062f\u0627\u062e\u0644 Room \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0646\u060c \u0627\u0645\u0627 \u0647\u0646\u06af\u0627\u0645 Refresh \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0645\u06cc\u0634\u0647. \u0622\u06cc\u0627 \u0628\u0627\u06cc\u062f \u062a\u0645\u0627\u0645 \u067e\u0646\u0644 \u0631\u0648 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u0645 \u0648 \u0641\u0642\u0637 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u062e\u0637\u0627 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645\u061f \u0646\u0647\u060c \u0686\u0648\u0646 \u0647\u0646\u0648\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u06cc \u062f\u0627\u0631\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a \u0628\u0647\u062a\u0631\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc \u0642\u0628\u0644\u06cc \u062d\u0641\u0638 \u0628\u0634\u0647 \u0648 \u0641\u0642\u0637 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u06a9\u0648\u062a\u0627\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u062f\u061b \u0622\u062e\u0631\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0686\u0646\u06cc\u0646 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc\u06cc \u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u062c\u062f\u0627 \u0627\u0632 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0645\u0648\u0642\u062a \u062f\u0627\u0634\u062a:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>private val _events = MutableSharedFlow&lt;DashboardEvent>()\nval events = _events.asSharedFlow()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">private<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> _events <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">MutableSharedFlow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">DashboardEvent<\/span><span style=\"color: #24292E\">&gt;()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> events <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> _events.<\/span><span style=\"color: #6F42C1\">asSharedFlow<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">State \u0628\u0627 Event \u0641\u0631\u0642 \u062f\u0627\u0631\u0647. State \u0648\u0636\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc \u0648 \u0645\u0627\u0646\u062f\u06af\u0627\u0631 \u0635\u0641\u062d\u0647 \u0627\u0633\u062a\u061b \u0645\u062b\u0644\u0627\u064b \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u067e\u0646\u0644 \u06cc\u0627 Loading. \u0627\u0645\u0627 Event \u0627\u062a\u0641\u0627\u0642\u06cc\u0647 \u06a9\u0647 \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0631\u062e \u0645\u06cc\u062f\u0647\u061b \u0645\u062b\u0644\u0627\u064b \u0646\u0645\u0627\u06cc\u0634 Snackbar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0632\u0645\u0627\u0646 \u062e\u0637\u0627\u06cc Refresh \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 Event \u0628\u0641\u0631\u0633\u062a\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>_events.emit(\n    DashboardEvent.ShowMessage(\n        \"\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u062f\"\n    )\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">_events.<\/span><span style=\"color: #6F42C1\">emit<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    DashboardEvent.<\/span><span style=\"color: #6F42C1\">ShowMessage<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #032F62\">&quot;\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u062f&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Snackbar \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647\u060c \u0627\u0645\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc \u067e\u0646\u0644 \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u067e\u06cc\u0627\u0645 \u0645\u0648\u0642\u062a \u0631\u0648 \u062f\u0627\u062e\u0644 State \u062f\u0627\u0626\u0645\u06cc \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc\u0645\u060c \u0645\u0645\u06a9\u0646\u0647 \u0628\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0635\u0641\u062d\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0631\u0648 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 State \u0627\u0635\u0644\u06cc \u062c\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0627\u0644\u06cc \u0628\u0648\u062f\u0646 \u067e\u0646\u0644 \u0628\u0627 \u062e\u0637\u0627 \u0641\u0631\u0642 \u062f\u0627\u0631\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062a\u0627\u0632\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06a9\u0631\u062f\u0647 \u0648 \u0647\u0646\u0648\u0632 \u0647\u06cc\u0686 \u06a9\u0627\u0644\u0627\u06cc\u06cc \u0646\u062f\u0627\u0631\u0647. \u0646\u0645\u0627\u06cc\u0634 \u0635\u0641\u0631 \u062f\u0631 \u062a\u0645\u0627\u0645 \u06a9\u0627\u0631\u062a\u200c\u0647\u0627 \u0627\u0632 \u0646\u0638\u0631 \u0641\u0646\u06cc \u062f\u0631\u0633\u062a\u0647\u060c \u0627\u0645\u0627 \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u062a\u062c\u0631\u0628\u0647 \u062e\u0648\u0628\u06cc \u0646\u06cc\u0633\u062a. \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0646\u062f\u0648\u0646\u0647 \u0642\u062f\u0645 \u0628\u0639\u062f\u06cc \u0686\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u062e\u0637\u0627 \u0646\u06cc\u0633\u062a. \u0633\u0631\u0648\u0631 \u062f\u0631\u0633\u062a \u06a9\u0627\u0631 \u06a9\u0631\u062f\u0647 \u0648 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0647\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0646\u061b \u0641\u0642\u0637 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0647\u0646\u0648\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u062b\u0628\u062a \u0646\u06a9\u0631\u062f\u0647. \u0628\u0647 \u0627\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a <strong>Empty State<\/strong> \u0645\u06cc\u06af\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u062f\u0627\u062e\u0644 \u0645\u062f\u0644 \u0635\u0641\u062d\u0647 \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u06cc\u0645 \u06a9\u0647 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val isEmpty: Boolean\n    get() = totalProducts == 0\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isEmpty: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">get<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> totalProducts <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 <code>isEmpty<\/code> \u062f\u0631\u0633\u062a \u0628\u0627\u0634\u0647\u060c \u0628\u0647 \u062c\u0627\u06cc \u0686\u0646\u062f \u06a9\u0627\u0631\u062a \u0635\u0641\u0631 \u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0631\u0627\u0647\u0646\u0645\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0646\u0648\u0632 \u06a9\u0627\u0644\u0627\u06cc\u06cc \u062b\u0628\u062a \u0646\u06a9\u0631\u062f\u06cc.<br>\u0627\u0648\u0644\u06cc\u0646 \u06a9\u0627\u0644\u0627\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u062a \u0631\u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0647\u0645 \u06cc\u06a9 \u062f\u06a9\u0645\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646 \u06a9\u0627\u0644\u0627 \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Empty State \u0628\u0627\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0647\u062f\u0627\u06cc\u062a \u06a9\u0646\u0647. \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0641\u0642\u0637 \u0645\u06cc\u06af\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f \u0639\u0645\u0644\u0627\u064b \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u062e\u0648\u062f\u0634 \u0631\u0648 \u0646\u0635\u0641\u0647 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0633\u0647 \u0648\u0636\u0639\u06cc\u062a \u0645\u062a\u0641\u0627\u0648\u062a \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Loading:<br><\/strong>\u0647\u0646\u0648\u0632 \u0646\u0645\u06cc\u200c\u062f\u0648\u0646\u06cc\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0686\u06cc\u0647.<br><br><strong>Error:<br><\/strong>\u0646\u062a\u0648\u0646\u0633\u062a\u06cc\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645.<br><br><strong>Empty:<\/strong><br>\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u06cc\u0645\u060c \u0627\u0645\u0627 \u0647\u0646\u0648\u0632 \u0686\u06cc\u0632\u06cc \u062b\u0628\u062a \u0646\u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0641\u06a9\u06cc\u06a9 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u200c\u0647\u0627 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0635\u0641\u062d\u0647 \u062f\u0631 \u0647\u0631 \u0634\u0631\u0627\u06cc\u0637 \u0631\u0641\u062a\u0627\u0631 \u0645\u0646\u0627\u0633\u0628\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u067e\u0646\u0644 \u0628\u0627\u06cc\u062f \u0647\u0631 \u0628\u0627\u0631 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06af\u06cc\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0635\u0641\u062d\u0647 \u067e\u0646\u0644 \u0648\u0627\u0631\u062f \u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0644\u0627\u0647\u0627 \u0628\u0634\u0647 \u0648 \u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647 \u0628\u0639\u062f \u0628\u0631\u06af\u0631\u062f\u0647\u060c \u0645\u0646\u0637\u0642\u06cc \u0646\u06cc\u0633\u062a \u0647\u0631 \u0628\u0627\u0631 \u062a\u0645\u0627\u0645 \u0622\u0645\u0627\u0631 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0627\u0646\u0644\u0648\u062f \u0628\u0634\u0646. Repository \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0632\u0645\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (cacheIsExpired()) {\n    refreshDashboard()\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #6F42C1\">cacheIsExpired<\/span><span style=\"color: #24292E\">()) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">refreshDashboard<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>cacheIsExpired()<\/code> \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0627\u0632 \u0622\u062e\u0631\u06cc\u0646 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0686\u0642\u062f\u0631 \u06af\u0630\u0634\u062a\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u06a9\u0645\u062a\u0631 \u0627\u0632 \u067e\u0646\u062c \u062f\u0642\u06cc\u0642\u0647 \u06af\u0630\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u067e\u0646\u0644 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0647\u0645\u0627\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647. \u0627\u06af\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u062f\u06cc\u0645\u06cc\u200c\u062a\u0631 \u0628\u0627\u0634\u0646\u060c Refresh \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0628\u062a\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0647\u0645\u06cc\u0634\u0647 \u0627\u0645\u06a9\u0627\u0646 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062f\u0633\u062a\u06cc \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u06cc\u0639\u0646\u06cc \u062d\u062a\u06cc \u0627\u06af\u0631 Cache \u0647\u0646\u0648\u0632 \u0645\u0639\u062a\u0628\u0631\u0647\u060c \u0628\u0627 Pull to Refresh \u0628\u062a\u0648\u0646\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 Cache \u0641\u0642\u0637 \u06cc\u06a9 \u0645\u062d\u0644 \u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u0646\u06cc\u0633\u062a\u061b \u062a\u0635\u0645\u06cc\u0645\u06cc\u0647 \u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u062f\u0627\u062f\u0647 \u0645\u0648\u062c\u0648\u062f \u06a9\u0627\u0641\u06cc \u0627\u0633\u062a \u0648 \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0628\u0627\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062a\u0627\u0632\u0647 \u0628\u06af\u06cc\u0631\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0646\u0644 \u0648 \u0645\u062c\u0648\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0633\u062e\u0647 \u0627\u0628\u062a\u062f\u0627\u06cc\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0634\u0627\u06cc\u062f \u0647\u0631 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0641\u0642\u0637 \u06cc\u06a9 \u0645\u062f\u06cc\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0627\u0645\u0627 \u0628\u0639\u062f\u0647\u0627 \u0645\u0645\u06a9\u0646\u0647 \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u0686\u0646\u062f \u06a9\u0627\u0631\u0645\u0646\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u061b \u0645\u062b\u0644\u0627\u064b \u0645\u062f\u06cc\u0631\u060c \u0635\u0646\u062f\u0648\u0642\u200c\u062f\u0627\u0631 \u0648 \u0627\u067e\u0631\u0627\u062a\u0648\u0631 \u062b\u0628\u062a \u0642\u06cc\u0645\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a\u060c \u0647\u0645\u0647 \u0627\u0641\u0631\u0627\u062f \u0646\u0628\u0627\u06cc\u062f \u062a\u0645\u0627\u0645 \u0645\u06cc\u0627\u0646\u200c\u0628\u0631\u0647\u0627 \u0631\u0648 \u0628\u0628\u06cc\u0646\u0646. \u0645\u062b\u0644\u0627\u064b \u06a9\u0627\u0631\u0645\u0646\u062f \u0639\u0627\u062f\u06cc \u0634\u0627\u06cc\u062f \u0627\u062c\u0627\u0632\u0647 \u062d\u0630\u0641 \u06a9\u0627\u0644\u0627 \u06cc\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0648 \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062f\u0644 \u0635\u0641\u062d\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val canManageProducts: Boolean\nval canViewReports: Boolean\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> canManageProducts: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> canViewReports: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0631\u0627\u0633\u0627\u0633 \u0645\u062c\u0648\u0632\u0647\u0627 \u0628\u0639\u0636\u06cc \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (data.canViewReports) {\n    ReportsShortcut()\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\">.canViewReports) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">ReportsShortcut<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u067e\u0646\u0647\u0627\u0646 \u06a9\u0631\u062f\u0646 \u062f\u06a9\u0645\u0647 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc\u0647\u060c \u0646\u0647 \u0627\u0645\u0646\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc. \u0633\u0631\u0648\u0631 \u0647\u0645 \u0628\u0627\u06cc\u062f \u0647\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648 \u0628\u0631\u0627\u0633\u0627\u0633 \u0645\u062c\u0648\u0632 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0641\u0631\u062f\u06cc \u0628\u0627 \u062f\u0633\u062a\u200c\u06a9\u0627\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b Endpoint \u06af\u0632\u0627\u0631\u0634\u200c\u0647\u0627 \u0631\u0648 \u0635\u062f\u0627 \u0632\u062f\u060c Backend \u0628\u0627\u06cc\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u063a\u06cc\u0631\u0645\u062c\u0627\u0632 \u0631\u0648 \u0631\u062f \u06a9\u0646\u0647. \u0647\u0645\u0627\u0646 \u0627\u0635\u0644\u06cc \u06a9\u0647 \u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u06af\u0641\u062a\u06cc\u0645\u060c \u0627\u06cc\u0646\u062c\u0627 \u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647: \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0631\u0641\u062a\u0627\u0631 \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u062a\u0635\u0645\u06cc\u0645 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0646\u0647\u0627\u06cc\u06cc \u0628\u0627 \u0633\u0631\u0648\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0631\u0648\u062c \u0627\u0632 \u062d\u0633\u0627\u0628 \u062f\u0631 \u067e\u0646\u0644<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0646\u0644 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062c\u0627\u06cc\u06cc\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06cc\u0627 \u062e\u0631\u0648\u062c \u0627\u0632 \u062d\u0633\u0627\u0628 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0647\u0646\u06af\u0627\u0645 \u062e\u0631\u0648\u062c\u060c \u0641\u0642\u0637 \u0631\u0641\u062a\u0646 \u0628\u0647 \u0635\u0641\u062d\u0647 Login \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a. \u0628\u0627\u06cc\u062f Session \u0648\u0627\u0642\u0639\u0627\u064b \u067e\u0627\u06a9 \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>suspend fun logout() {\n    tokenStorage.clear()\n    database.clearUserData()\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">logout<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    tokenStorage.<\/span><span style=\"color: #6F42C1\">clear<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    database.<\/span><span style=\"color: #6F42C1\">clearUserData<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>tokenStorage.clear()<\/code> Token\u0647\u0627 \u0631\u0648 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062a\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u06cc\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f\u0634\u062f\u0647 \u062f\u0631 \u0646\u0638\u0631 \u0646\u06af\u06cc\u0631\u0647. <code>database.clearUserData()<\/code> \u0647\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0644\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062d\u0633\u0627\u0628 \u0641\u0639\u0644\u06cc \u0631\u0648 \u067e\u0627\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u0645\u062e\u0635\u0648\u0635\u0627\u064b \u0632\u0645\u0627\u0646\u06cc \u0645\u0647\u0645\u0647 \u06a9\u0647 \u0686\u0646\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0628\u062a\u0648\u0646\u0646 \u0631\u0648\u06cc \u06cc\u06a9 \u06af\u0648\u0634\u06cc \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0634\u0646. \u0627\u06af\u0631 \u062f\u0627\u062f\u0647 \u062d\u0633\u0627\u0628 \u0642\u0628\u0644\u06cc \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0642\u0628\u0644\u06cc \u0631\u0648 \u0628\u0631\u0627\u06cc \u0686\u0646\u062f \u0644\u062d\u0638\u0647 \u0628\u0628\u06cc\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u067e\u0627\u06a9 \u0634\u062f\u0646 Session\u060c Navigation \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>navController.navigate(\"login\") {\n    popUpTo(\"home\") {\n        inclusive = true\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">navController.<\/span><span style=\"color: #6F42C1\">navigate<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;login&quot;<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">popUpTo<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;home&quot;<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        inclusive <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627 \u062d\u0630\u0641 \u0645\u0633\u06cc\u0631 \u0642\u0628\u0644\u06cc \u0627\u0632 Back Stack\u060c \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0639\u062f \u0627\u0632 \u062e\u0631\u0648\u062c \u0628\u0627 \u062f\u06a9\u0645\u0647 Back \u062f\u0648\u0628\u0627\u0631\u0647 \u0648\u0627\u0631\u062f \u067e\u0646\u0644 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0646\u0644 \u0646\u0642\u0637\u0647 \u0627\u062a\u0635\u0627\u0644 \u0686\u0646\u062f \u062f\u0631\u0633 \u0642\u0628\u0644\u06cc\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u0645\u0641\u0627\u0647\u06cc\u0645 \u0642\u0628\u0644\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646. Token \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a Dashboard \u0628\u0627 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647. Retrofit \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. Repository \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0686\u0637\u0648\u0631 \u062a\u0631\u06a9\u06cc\u0628 \u0648 \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0646. Room \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0635\u0641\u062d\u0647 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647. Flow \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0648 \u0645\u0646\u062a\u0642\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. ViewModel \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0628\u0647 UI State \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Compose \u0628\u0631\u0627\u0633\u0627\u0633 State \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Offline First \u0647\u0645 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u067e\u0646\u0644 \u062f\u0631 \u0646\u0628\u0648\u062f \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u062e\u0627\u0644\u06cc \u0646\u0634\u0647. Cache \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u062f\u0627\u062f\u0647 \u0645\u0648\u062c\u0648\u062f \u06a9\u0627\u0641\u06cc \u0627\u0633\u062a. Error Handling \u0647\u0645 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u062e\u0637\u0627\u06cc Refresh \u0628\u062f\u0648\u0646 \u0646\u0627\u0628\u0648\u062f \u06a9\u0631\u062f\u0646 \u0645\u062d\u062a\u0648\u0627\u06cc \u0642\u0628\u0644\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u0686\u0646\u062f \u06a9\u0627\u0631\u062a \u0648 \u062f\u06a9\u0645\u0647 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647\u061b \u0627\u0645\u0627 \u067e\u0634\u062a \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647\u060c \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0634\u0631\u0648\u0639 \u0628\u0647 \u06a9\u0627\u0631 \u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0646\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0641\u0642\u0637 \u0646\u0645\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9 Dashboard \u062e\u0648\u0628 \u0628\u0627\u06cc\u062f \u062f\u0631 \u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647 \u0628\u0647 \u0633\u0647 \u0633\u0624\u0627\u0644 \u067e\u0627\u0633\u062e \u0628\u062f\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0627\u0646 \u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0645\u0646 \u0686\u0637\u0648\u0631\u0647\u061f<br>\u0686\u0647 \u0686\u06cc\u0632\u06cc \u0646\u06cc\u0627\u0632 \u0628\u0647 \u062a\u0648\u062c\u0647 \u062f\u0627\u0631\u0647\u061f<br>\u0642\u062f\u0645 \u0628\u0639\u062f\u06cc \u0645\u0646 \u0686\u06cc\u0647\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u067e\u0646\u0644 \u0641\u0642\u0637 \u0686\u0646\u062f \u0639\u062f\u062f \u0628\u06cc\u200c\u0645\u0639\u0646\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647\u060c \u062d\u062a\u06cc \u0627\u06af\u0631 \u0627\u0632 \u0646\u0638\u0631 \u0641\u0646\u06cc \u0628\u06cc\u200c\u0646\u0642\u0635 \u0628\u0627\u0634\u0647\u060c \u06a9\u0627\u0631 \u062e\u0648\u062f\u0634 \u0631\u0648 \u062f\u0631\u0633\u062a \u0627\u0646\u062c\u0627\u0645 \u0646\u062f\u0627\u062f\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0627\u06cc\u062f \u0627\u0646\u062a\u062e\u0627\u0628 \u0648 \u0627\u0648\u0644\u0648\u06cc\u062a\u200c\u0628\u0646\u062f\u06cc \u0628\u0634\u0646 \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0628\u062a\u0648\u0646\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0646\u0645\u0627\u06cc\u0634 \u06a9\u0627\u0644\u0627\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0627\u0632 \u0646\u0645\u0627\u06cc\u0634 \u062a\u0639\u062f\u0627\u062f \u06a9\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc API \u0627\u0631\u0632\u0634\u0645\u0646\u062f\u062a\u0631\u0647\u061b \u0686\u0648\u0646 \u0627\u0648\u0644\u06cc \u06cc\u06a9 \u0627\u0642\u062f\u0627\u0645 \u0645\u0634\u062e\u0635 \u062c\u0644\u0648\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u0630\u0627\u0631\u0647 \u0648 \u062f\u0648\u0645\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0645\u0639\u0646\u0627 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0637\u0631\u0627\u062d\u06cc \u067e\u0646\u0644 \u0641\u0642\u0637 \u0645\u0633\u0626\u0644\u0647 Compose \u0648 \u06a9\u0627\u0631\u062a\u200c\u0647\u0627 \u0646\u06cc\u0633\u062a. \u0645\u0647\u0645\u200c\u062a\u0631 \u0627\u0632 \u0627\u0648\u0646\u060c \u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc\u0647 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0635\u0627\u062d\u0628 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u0631\u0632\u0634 \u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 \u067e\u0646\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c ViewModel \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u0631\u0648 \u0628\u0647 \u06cc\u06a9 State \u0642\u0627\u0628\u0644 \u0641\u0647\u0645 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u067e\u0646\u0644 \u0628\u0631\u0627\u0633\u0627\u0633 \u0647\u0645\u0627\u0646 State\u060c \u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0648 \u0627\u0642\u062f\u0627\u0645\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u0631\u0648 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0628\u06cc\u0633\u062a\u200c\u0648\u0686\u0647\u0627\u0631\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u0634 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0637\u0648\u0631 \u0645\u0637\u0645\u0626\u0646 \u0645\u06cc\u0634\u0647 \u062f\u0627\u062f\u0647 \u062c\u062f\u06cc\u062f \u062f\u0631\u0633\u062a \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0648 \u0647\u0645\u0647\u200c\u062c\u0627\u06cc \u0627\u067e \u0628\u0647\u200c\u0631\u0648\u0632 \u0634\u062f\u0647\u061f<\/em><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u067e\u0646\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0645\u062b\u0644 \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633\u060c \u0622\u062f\u0631\u0633 \u06cc\u0627 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646. \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062b\u0627\u0628\u062a \u0646\u06cc\u0633\u062a\u0646. \u0645\u0645\u06a9\u0646\u0647 \u0646\u0627\u0645 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647\u060c \u0634\u0639\u0628\u0647 \u062c\u0627\u0628\u0647\u200c\u062c\u0627 \u0628\u0634\u0647 \u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0628\u062e\u0648\u0627\u062f \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u062c\u062f\u06cc\u062f\u06cc \u062b\u0628\u062a \u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0639\u0644\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647\u060c \u0627\u062c\u0627\u0632\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0628\u062f\u0647 \u0648 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0628\u0647\u200c\u062f\u0631\u0633\u062a\u06cc \u062f\u0627\u062e\u0644 \u0633\u0631\u0648\u0631 \u0648 \u062d\u0627\u0641\u0638\u0647 \u0645\u062d\u0644\u06cc \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062e\u06cc\u0644\u06cc \u0633\u0627\u062f\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u0631\u0633\u0647. \u0686\u0646\u062f TextField \u062f\u0627\u0631\u06cc\u0645 \u06a9\u0647 \u0645\u0642\u062f\u0627\u0631\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u062f\u0627\u062e\u0644\u0634\u0648\u0646 \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0646 \u0648 \u06cc\u06a9 \u062f\u06a9\u0645\u0647 \u0630\u062e\u06cc\u0631\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0647\u0645 \u067e\u0627\u06cc\u06cc\u0646 \u0635\u0641\u062d\u0647 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u067e\u0634\u062a \u0627\u06cc\u0646 \u0641\u0631\u0645 \u0686\u0646\u062f \u0645\u0633\u0626\u0644\u0647 \u0645\u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0627\u0632 \u06a9\u062c\u0627 \u0645\u06cc\u0627\u0646\u061f \u0686\u0637\u0648\u0631 \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u06cc\u0645 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0642\u0639\u0627\u064b \u0686\u06cc\u0632\u06cc \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647\u061f \u0627\u06af\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0633\u0637 \u0630\u062e\u06cc\u0631\u0647 \u0642\u0637\u0639 \u0634\u062f\u060c \u0628\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 Room \u0686\u0647 \u06a9\u0627\u0631 \u06a9\u0646\u06cc\u0645\u061f \u0648 \u0628\u0639\u062f \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u0645\u0648\u0641\u0642\u060c \u0686\u0637\u0648\u0631 \u06a9\u0627\u0631\u06cc \u06a9\u0646\u06cc\u0645 \u0646\u0627\u0645 \u062c\u062f\u06cc\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0631 \u067e\u0646\u0644 \u0647\u0645 \u0641\u0648\u0631\u0627\u064b \u062f\u06cc\u062f\u0647 \u0628\u0634\u0647\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u06a9\u0644\u06cc \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">EditBusinessScreen<br>\u2193<br>EditBusinessViewModel<br>\u2193<br>BusinessRepository<br>\u2193<br>API<br>\u2193<br>Room<br>\u2193<br>Flow<br>\u2193<br>Dashboard \u0648 Profile<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0642\u0637 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06cc\u06a9 \u0641\u0631\u0645 \u0646\u06cc\u0633\u062a. \u0648\u0642\u062a\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0646\u060c \u0647\u0645\u0647 \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0627\u0632 Room \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0628\u0627\u06cc\u062f \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0641\u0631\u0645 \u0627\u0632 \u06a9\u062c\u0627 \u0645\u06cc\u0627\u0646\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0635\u0641\u062d\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u0641\u06cc\u0644\u062f\u0647\u0627 \u062e\u0627\u0644\u06cc \u0628\u0627\u0634\u0646. \u06a9\u0627\u0631\u0628\u0631 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0639\u0644\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0627\u062e\u0644 \u0641\u0631\u0645 \u062f\u06cc\u062f\u0647 \u0628\u0634\u0646 \u062a\u0627 \u0641\u0642\u0637 \u0628\u062e\u0634 \u0645\u0648\u0631\u062f\u0646\u0638\u0631 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c Room \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062d\u0633\u0627\u0628\u0647\u060c ViewModel \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0639\u0644\u06cc \u0631\u0648 \u0627\u0632 Repository \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>repository.observeBusiness()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">repository.<\/span><span style=\"color: #6F42C1\">observeBusiness<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647. \u0647\u0631 \u0632\u0645\u0627\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 Room \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0646\u060c \u0645\u0642\u062f\u0627\u0631 \u062c\u062f\u06cc\u062f \u0647\u0645 \u0628\u0647 ViewModel \u0645\u06cc\u0631\u0633\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u06cc\u06a9 \u0641\u0631\u0645 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0628\u0627 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634\u06cc \u0639\u0627\u062f\u06cc \u0641\u0631\u0642 \u062f\u0627\u0631\u0647. \u062f\u0631 \u0635\u0641\u062d\u0647 \u067e\u0646\u0644 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a Flow \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645\u060c \u0627\u0645\u0627 \u062f\u0631 \u0641\u0631\u0645 \u0648\u06cc\u0631\u0627\u06cc\u0634\u060c \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0646\u0647 \u0645\u0642\u062f\u0627\u0631\u0647\u0627 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0646\u0633\u062e\u0647\u200c\u0627\u06cc \u0642\u0627\u0628\u0644 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 State \u0635\u0641\u062d\u0647 \u0628\u0633\u0627\u0632\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0635\u0644\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0686\u0646\u06cc\u0646 \u0645\u062f\u0644\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class Business(\n    val id: Long,\n    val name: String,\n    val phone: String,\n    val address: String\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Business<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> id: <\/span><span style=\"color: #6F42C1\">Long<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> name: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> phone: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> address: <\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u062f\u0644 \u0648\u0636\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647\u060c \u0627\u0645\u0627 \u0641\u0631\u0645 \u0628\u0647 State \u0645\u062e\u0635\u0648\u0635 \u062e\u0648\u062f\u0634 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class EditBusinessForm(\n    val name: String = \"\",\n    val phone: String = \"\",\n    val address: String = \"\"\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">EditBusinessForm<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> name: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> phone: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> address: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0639\u0644\u062a \u062c\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u062f\u0648 \u0645\u062f\u0644 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0645\u062f\u0644 <code>Business<\/code> \u0646\u0645\u0627\u06cc\u0646\u062f\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0648 \u0645\u0639\u062a\u0628\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 <code>EditBusinessForm<\/code> \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0646\u0648\u0632 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u062d\u0627\u0644 \u062a\u0627\u06cc\u067e \u06a9\u0631\u062f\u0646 \u06cc\u0627 \u0646\u0627\u0642\u0635 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0646\u0634\u0648\u0646 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u06a9\u0627\u0631\u0628\u0631 \u0647\u0646\u06af\u0627\u0645 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0627\u06cc \u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647 \u0641\u06cc\u0644\u062f \u0631\u0648 \u06a9\u0627\u0645\u0644\u0627\u064b \u067e\u0627\u06a9 \u06a9\u0646\u0647 \u062a\u0627 \u0634\u0645\u0627\u0631\u0647 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0628\u0646\u0648\u06cc\u0633\u0647. \u0627\u06cc\u0646 \u0645\u0642\u062f\u0627\u0631 \u062e\u0627\u0644\u06cc \u0647\u0646\u0648\u0632 \u0646\u0628\u0627\u06cc\u062f \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0639\u062a\u0628\u0631 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647\u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc State \u0645\u0648\u0642\u062a \u0641\u0631\u0645 \u06a9\u0627\u0645\u0644\u0627\u064b \u0637\u0628\u06cc\u0639\u06cc\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0641\u0631\u0645 \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 ViewModel \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0641\u0631\u0645 \u062b\u0628\u062a\u200c\u0646\u0627\u0645\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0647\u0646\u0648\u0632 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0646 \u0648 \u0645\u06cc\u200c\u062a\u0648\u0646\u0633\u062a\u06cc\u0645 \u0645\u0642\u062f\u0627\u0631 \u0641\u06cc\u0644\u062f\u0647\u0627 \u0631\u0648 \u0628\u0627 <code>rememberSaveable<\/code> \u062f\u0627\u062e\u0644 \u062e\u0648\u062f \u0635\u0641\u062d\u0647 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645. \u0627\u0645\u0627 \u062f\u0631 \u0635\u0641\u062d\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634\u060c \u0641\u0631\u0645 \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0627\u0632 Room \u0645\u06cc\u0627\u062f \u0648 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0641\u0631\u0627\u06cc\u0646\u062f\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc State \u0641\u0631\u0645 \u062f\u0627\u062e\u0644 ViewModel \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06a9\u0646\u062a\u0631\u0644 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>private val _form = MutableStateFlow(EditBusinessForm())\nval form = _form.asStateFlow()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">private<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> _form <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">MutableStateFlow<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #6F42C1\">EditBusinessForm<\/span><span style=\"color: #24292E\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> form <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> _form.<\/span><span style=\"color: #6F42C1\">asStateFlow<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0633\u062e\u0647 \u062e\u0635\u0648\u0635\u06cc <code>_form<\/code> \u0641\u0642\u0637 \u062f\u0627\u062e\u0644 ViewModel \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0635\u0641\u062d\u0647 \u0646\u0633\u062e\u0647 \u0639\u0645\u0648\u0645\u06cc <code>form<\/code> \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0645\u0642\u062f\u0627\u0631 \u0641\u06cc\u0644\u062f\u0647\u0627 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0635\u0644\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646\u060c ViewModel \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0648\u0627\u0631\u062f \u0641\u0631\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>_form.value = EditBusinessForm(\n    name = business.name,\n    phone = business.phone,\n    address = business.address\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">_form.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">EditBusinessForm<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    name <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> business.name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    phone <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> business.phone,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    address <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> business.address<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0631\u0648 \u0628\u0647 State \u0642\u0627\u0628\u0644 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0635\u0641\u062d\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0627\u06cc\u062f \u0645\u0631\u0627\u0642\u0628 \u06cc\u06a9 \u0645\u0634\u06a9\u0644 \u0645\u0647\u0645 \u0628\u0627\u0634\u06cc\u0645. \u0627\u06af\u0647 Flow \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0686\u0646\u062f \u0628\u0627\u0631 \u0645\u0642\u062f\u0627\u0631 \u062c\u062f\u06cc\u062f \u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u0641\u0631\u0645 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0633\u0637 \u062a\u0627\u06cc\u067e \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0628\u0644\u06cc \u067e\u0631 \u0628\u0634\u0647 \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u0634 \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u0646. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0641\u0631\u0645 \u0631\u0648 \u0641\u0642\u0637 \u06cc\u06a9\u200c\u0628\u0627\u0631\u060c \u0647\u0646\u06af\u0627\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0648\u0644\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u060c \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u0622\u06cc\u0627 \u0641\u0631\u0645 \u0642\u0628\u0644\u0627\u064b \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0634\u062f\u0647 \u06cc\u0627 \u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (!_isFormInitialized) {\n    _form.value = business.toEditForm()\n    _isFormInitialized = true\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #D73A49\">!<\/span><span style=\"color: #24292E\">_isFormInitialized) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    _form.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> business.<\/span><span style=\"color: #6F42C1\">toEditForm<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    _isFormInitialized <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0634\u0631\u0637 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0641\u0642\u0637 \u06cc\u06a9\u200c\u0628\u0627\u0631 \u062f\u0627\u062e\u0644 \u0641\u0631\u0645 \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0646. \u0628\u0639\u062f \u0627\u0632 \u0627\u0648\u0646\u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u062d\u0641\u0638 \u0645\u06cc\u0634\u0646 \u0648 \u0647\u0631 \u0627\u0646\u062a\u0634\u0627\u0631 \u062c\u062f\u06cc\u062f Flow \u0641\u0631\u0645 \u0631\u0648 \u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u063a\u06cc\u06cc\u0631 \u0647\u0631 \u0641\u06cc\u0644\u062f \u0686\u0637\u0648\u0631 \u0648\u0627\u0631\u062f ViewModel \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0645\u0642\u062f\u0627\u0631 StateFlow \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647. \u0628\u0631\u0627\u06cc \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631\u060c \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f \u0628\u0647 ViewModel \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>viewModel.onNameChanged(newValue)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">viewModel.<\/span><span style=\"color: #6F42C1\">onNameChanged<\/span><span style=\"color: #24292E\">(newValue)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u062e\u0644 ViewModel \u0641\u0642\u0637 \u0647\u0645\u0627\u0646 \u0642\u0633\u0645\u062a \u0641\u0631\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun onNameChanged(value: String) {\n    _form.update { current ->\n        current.copy(name = value)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onNameChanged<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\">: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    _form.<\/span><span style=\"color: #6F42C1\">update<\/span><span style=\"color: #24292E\"> { current <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        current.<\/span><span style=\"color: #6F42C1\">copy<\/span><span style=\"color: #24292E\">(name <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627\u0628\u0639 <code>update<\/code> \u0645\u0642\u062f\u0627\u0631 \u0641\u0639\u0644\u06cc StateFlow \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f\u06cc \u0627\u0632 \u0627\u0648\u0646 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647. <code>copy<\/code> \u0647\u0645 \u0641\u0642\u0637 \u0641\u06cc\u0644\u062f <code>name<\/code> \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u0647 \u0648 \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0648 \u0622\u062f\u0631\u0633 \u0631\u0648 \u062f\u0633\u062a\u200c\u0646\u062e\u0648\u0631\u062f\u0647 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0648\u0634 \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0648 \u067e\u0631\u0627\u06a9\u0646\u062f\u0647 State \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0647\u0645\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0641\u0631\u0645 \u0627\u0632 \u0645\u0633\u06cc\u0631 ViewModel \u0639\u0628\u0648\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0648 \u0627\u06af\u0647 \u0628\u0639\u062f\u0647\u0627 \u0628\u062e\u0648\u0627\u06cc\u0645 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u06cc\u0627 \u067e\u0631\u062f\u0627\u0632\u0634\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0645\u062d\u0644 \u0627\u0648\u0646 \u0645\u0634\u062e\u0635\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0641\u0642\u0637 \u0639\u062f\u062f\u0647\u0627 \u0631\u0648 \u0628\u067e\u0630\u06cc\u0631\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun onPhoneChanged(value: String) {\n    _form.update {\n        it.copy(phone = value.filter(Char::isDigit))\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onPhoneChanged<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\">: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    _form.<\/span><span style=\"color: #6F42C1\">update<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        it.<\/span><span style=\"color: #6F42C1\">copy<\/span><span style=\"color: #24292E\">(phone <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\">.<\/span><span style=\"color: #6F42C1\">filter<\/span><span style=\"color: #24292E\">(Char::<\/span><span style=\"color: #6F42C1\">isDigit<\/span><span style=\"color: #24292E\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>filter(Char::isDigit)<\/code> \u062a\u0645\u0627\u0645 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631\u0647\u0627\u06cc\u06cc \u0631\u0648 \u06a9\u0647 \u0639\u062f\u062f \u0646\u06cc\u0633\u062a\u0646 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0627\u0635\u0644\u0647\u060c \u062e\u0637 \u062a\u06cc\u0631\u0647 \u06cc\u0627 \u062d\u0631\u0641 \u0648\u0627\u0631\u062f \u06a9\u0646\u0647\u060c \u0641\u0642\u0637 \u0631\u0642\u0645\u200c\u0647\u0627 \u062f\u0627\u062e\u0644 State \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0628\u062a\u0647 \u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0628\u0647 \u0646\u0648\u0639 \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647. \u0628\u0631\u0627\u06cc \u0634\u0645\u0627\u0631\u0647\u200c\u0647\u0627\u06cc \u0628\u06cc\u0646\u200c\u0627\u0644\u0645\u0644\u0644\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0628\u0647 \u0639\u0644\u0627\u0645\u062a <code>+<\/code> \u0646\u06cc\u0627\u0632 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0628\u0627\u06cc\u062f \u0647\u0631 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u06cc \u0631\u0648 \u0628\u062f\u0648\u0646 \u062a\u0648\u062c\u0647 \u0628\u0647 \u0646\u06cc\u0627\u0632 \u0648\u0627\u0642\u0639\u06cc \u067e\u0631\u0648\u0698\u0647 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0648\u0627\u0642\u0639\u0627\u064b \u0686\u06cc\u0632\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0634\u06a9\u0644\u0627\u062a \u0631\u0627\u06cc\u062c \u0635\u0641\u062d\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062f\u06a9\u0645\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0647\u0645\u06cc\u0634\u0647 \u0641\u0639\u0627\u0644\u0647\u060c \u062d\u062a\u06cc \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0647\u06cc\u0686 \u062a\u063a\u06cc\u06cc\u0631\u06cc \u0646\u062f\u0627\u062f\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0628\u0627 \u0647\u0631 \u06a9\u0644\u06cc\u06a9 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u06cc\u0647\u0648\u062f\u0647 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u062a\u063a\u06cc\u06cc\u0631\u060c \u0628\u0627\u06cc\u062f \u0646\u0633\u062e\u0647 \u0627\u0648\u0644\u06cc\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0647\u0645 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>private var originalForm: EditBusinessForm? = null\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">private<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">var<\/span><span style=\"color: #24292E\"> originalForm: <\/span><span style=\"color: #6F42C1\">EditBusinessForm<\/span><span style=\"color: #24292E\">? <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646\u060c \u0647\u0645 \u0641\u0631\u0645 \u0641\u0639\u0644\u06cc \u0648 \u0647\u0645 \u0646\u0633\u062e\u0647 \u0627\u0635\u0644\u06cc \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val initialForm = business.toEditForm()\n\n_form.value = initialForm\noriginalForm = initialForm\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> initialForm <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> business.<\/span><span style=\"color: #6F42C1\">toEditForm<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">_form.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> initialForm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">originalForm <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> initialForm<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u0641\u0631\u0645 \u0641\u0639\u0644\u06cc \u0628\u0627 \u0646\u0633\u062e\u0647 \u0627\u0635\u0644\u06cc \u0641\u0631\u0642 \u062f\u0627\u0631\u0647 \u06cc\u0627 \u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val hasChanges: Boolean\n    get() = _form.value != originalForm\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> hasChanges: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">get<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> _form.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">!=<\/span><span style=\"color: #24292E\"> originalForm<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 <code>EditBusinessForm<\/code> \u06cc\u06a9 <code>data class<\/code> \u0627\u0633\u062a\u060c Kotlin \u0645\u0642\u062f\u0627\u0631 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u0627\u0648\u0646 \u0631\u0648 \u0645\u0642\u0627\u06cc\u0633\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06af\u0647 \u062d\u062a\u06cc \u06cc\u06a9\u06cc \u0627\u0632 \u0641\u06cc\u0644\u062f\u0647\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0646\u062a\u06cc\u062c\u0647 \u0645\u0642\u0627\u06cc\u0633\u0647 \u0645\u062a\u0641\u0627\u0648\u062a \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0642\u062f\u0627\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0631\u0627\u06cc \u0641\u0639\u0627\u0644 \u06cc\u0627 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u062f\u06a9\u0645\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>enabled = uiState.hasChanges &amp;&amp; !uiState.isSaving\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">enabled <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> uiState.hasChanges <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">!<\/span><span style=\"color: #24292E\">uiState.isSaving<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u062f\u06a9\u0645\u0647 \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u0641\u0639\u0627\u0644 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0686\u06cc\u0632\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0648 \u0639\u0645\u0644\u06cc\u0627\u062a \u0630\u062e\u06cc\u0631\u0647 \u0647\u0645 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645 \u0646\u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0647\u0645 \u062a\u0639\u062f\u0627\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u063a\u06cc\u0631\u0636\u0631\u0648\u0631\u06cc \u0631\u0648 \u06a9\u0645\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0645 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647 \u0647\u0646\u0648\u0632 \u062a\u063a\u06cc\u06cc\u0631\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">State \u0635\u0641\u062d\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647\u060c \u0641\u0642\u0637 Loading \u0648 Success \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a. \u0645\u0627 \u0647\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0631\u0645 \u0631\u0648 \u062f\u0627\u0631\u06cc\u0645\u060c \u0647\u0645 \u0648\u0636\u0639\u06cc\u062a \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0648\u0644\u06cc\u0647\u060c \u0647\u0645 \u0648\u0636\u0639\u06cc\u062a \u0630\u062e\u06cc\u0631\u0647 \u0648 \u0647\u0645 \u0627\u062d\u062a\u0645\u0627\u0644 \u062e\u0637\u0627.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9 State \u0645\u0646\u0627\u0633\u0628 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0686\u0646\u06cc\u0646 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class EditBusinessUiState(\n    val form: EditBusinessForm = EditBusinessForm(),\n    val isLoading: Boolean = true,\n    val isSaving: Boolean = false,\n    val hasChanges: Boolean = false,\n    val errorMessage: String? = null\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">EditBusinessUiState<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> form: <\/span><span style=\"color: #6F42C1\">EditBusinessForm<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">EditBusinessForm<\/span><span style=\"color: #24292E\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isLoading: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">true<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isSaving: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> hasChanges: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> errorMessage: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">? <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0686\u0646\u062f \u0648\u0636\u0639\u06cc\u062a \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646. \u0645\u062b\u0644\u0627\u064b \u0641\u0631\u0645 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647 \u0648 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 <code>isSaving<\/code> \u0647\u0645 \u062f\u0631\u0633\u062a \u0628\u0627\u0634\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u0628\u0631\u062e\u0644\u0627\u0641 Login \u06a9\u0647 State\u0647\u0627\u06cc \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0645\u062b\u0644 Loading \u0648 Success \u062f\u0627\u0634\u062a\u060c \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 <code>data class<\/code> \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0646\u0627\u0633\u0628\u200c\u062a\u0631 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>form<\/code> \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0639\u0644\u06cc \u0641\u06cc\u0644\u062f\u0647\u0627 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. <code>isLoading<\/code> \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0627\u0633\u062a. <code>isSaving<\/code> \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0630\u062e\u06cc\u0631\u0647 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u0633\u062a. <code>hasChanges<\/code> \u0628\u0631\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u062f\u06a9\u0645\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 <code>errorMessage<\/code> \u0647\u0645 \u062e\u0637\u0627\u06cc \u0641\u0639\u0644\u06cc \u0641\u0631\u0645 \u06cc\u0627 \u0633\u0631\u0648\u0631 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647 \u0647\u06cc\u0686 \u0642\u0627\u0646\u0648\u0646\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647 \u06a9\u0647 \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647\u200c\u0647\u0627 \u062d\u062a\u0645\u0627\u064b \u0628\u0627\u06cc\u062f \u0627\u0632 <code>sealed interface<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646. \u0634\u06a9\u0644 State \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u0633\u0627\u0633 \u0645\u0627\u0647\u06cc\u062a \u0635\u0641\u062d\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u062d\u0627\u0644\u062a\u200c\u0647\u0627 \u0627\u0646\u062d\u0635\u0627\u0631\u06cc \u0647\u0633\u062a\u0646\u060c \u0645\u062b\u0644 Login\u060c <code>sealed interface<\/code> \u062e\u06cc\u0644\u06cc \u0645\u0646\u0627\u0633\u0628\u0647. \u0627\u0645\u0627 \u0648\u0642\u062a\u06cc \u0686\u0646\u062f \u0648\u06cc\u0698\u06af\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0641\u0639\u0627\u0644 \u0628\u0627\u0634\u0646\u060c <code>data class<\/code> \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062e\u0648\u0627\u0646\u0627\u062a\u0631 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0642\u0628\u0644 \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u0627\u0631\u0633\u0627\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u0645\u0642\u062f\u0627\u0631\u0647\u0627 \u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0634\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (form.name.isBlank()) {\n    showError(\"\u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u06a9\u0646\")\n    return\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (form.name.<\/span><span style=\"color: #6F42C1\">isBlank<\/span><span style=\"color: #24292E\">()) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">showError<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u06a9\u0646&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>isBlank()<\/code> \u0631\u0634\u062a\u0647 \u062e\u0627\u0644\u06cc \u06cc\u0627 \u0631\u0634\u062a\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0641\u0642\u0637 \u0641\u0627\u0635\u0644\u0647 \u062f\u0627\u0631\u0647 \u0631\u0648 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u062d\u062f\u0627\u0642\u0644 \u0633\u0627\u062e\u062a\u0627\u0631 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (form.phone.length &lt; 10) {\n    showError(\"\u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0645\u0639\u062a\u0628\u0631 \u0646\u06cc\u0633\u062a\")\n    return\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (form.phone.length <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">10<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">showError<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0645\u0639\u062a\u0628\u0631 \u0646\u06cc\u0633\u062a&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0641\u0642\u0637 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u0642\u0627\u0646\u0648\u0646 \u062f\u0642\u06cc\u0642 \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u0633\u0627\u0633 \u0646\u0648\u0639 \u0634\u0645\u0627\u0631\u0647\u200c\u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644 \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0646\u0648\u0634\u062a\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0622\u062f\u0631\u0633 \u0645\u0645\u06a9\u0646\u0647 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0628\u0627\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0628\u0627\u06cc\u062f \u0635\u0631\u0641\u0627\u064b \u0686\u0648\u0646 \u062e\u0627\u0644\u06cc\u0647\u060c \u062c\u0644\u0648\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0631\u0648 \u0628\u06af\u06cc\u0631\u06cc\u0645\u061b \u0645\u06af\u0631 \u0627\u06cc\u0646\u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0648\u0627\u0642\u0639\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0647\u0631 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062d\u062a\u0645\u0627\u064b \u0622\u062f\u0631\u0633 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0628\u0627\u06cc\u062f \u0627\u0632 \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0628\u06cc\u0627\u062f\u060c \u0646\u0647 \u0627\u0632 \u0633\u0644\u06cc\u0642\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633. \u0647\u0631 \u0641\u06cc\u0644\u062f\u06cc \u06a9\u0647 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0647\u0633\u062a \u0627\u0644\u0632\u0627\u0645\u0627\u064b \u0627\u062c\u0628\u0627\u0631\u06cc \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u062f\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648\u06cc\u0631\u0627\u06cc\u0634<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0627\u0632 <code>RegisterRequest<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0647\u0645 \u0628\u0647\u062a\u0631\u0647 \u0645\u062f\u0644 \u0645\u062e\u0635\u0648\u0635 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data class UpdateBusinessRequest(\n    val name: String,\n    val phone: String,\n    val address: String?\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u062f\u0644 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0628\u06cc\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0648 Endpoint \u0648\u06cc\u0631\u0627\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0645\u062f\u0644 \u0627\u0635\u0644\u06cc <code>Business<\/code> \u062f\u0647\u200c\u0647\u0627 \u0641\u06cc\u0644\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 Endpoint \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0641\u0642\u0637 \u0647\u0645\u06cc\u0646 \u0633\u0647 \u0641\u06cc\u0644\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647. \u0627\u0631\u0633\u0627\u0644 \u06a9\u0644 \u0645\u062f\u0644 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0647\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648 \u0633\u0646\u06af\u06cc\u0646\u200c\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0645 \u0627\u062d\u062a\u0645\u0627\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0627\u062e\u0648\u0627\u0633\u062a\u0647 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0628\u0631\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0635\u0644\u0627\u064b \u0628\u0647 \u0627\u0648\u0646\u200c\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u0646\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0628\u0647\u062a\u0631\u0647 \u0647\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u062f\u0644 \u0645\u062e\u0635\u0648\u0635 \u062e\u0648\u062f\u0634 \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0633\u0631\u0648\u0631 \u0628\u0631\u0627\u06cc \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0627\u0632 \u0646\u0627\u0645 \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0647\u060c \u0645\u062b\u0644 <code>business_name<\/code>\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 Annotation \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Serialization \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@SerialName(\"business_name\")\nval name: String\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637 \u0628\u0647 Serialization \u0645\u06cc\u06af\u0647 \u0646\u0627\u0645 Kotlin \u0628\u0631\u0627\u0628\u0631 <code>name<\/code> \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u062f\u0631 JSON \u0628\u0627\u06cc\u062f \u0628\u0627 \u06a9\u0644\u06cc\u062f <code>business_name<\/code> \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062f\u0631\u062e\u0648\u0627\u0633\u062a Retrofit \u0628\u0631\u0627\u06cc \u0648\u06cc\u0631\u0627\u06cc\u0634<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0627\u0645\u0644 \u06cc\u06a9 \u0645\u0646\u0628\u0639\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 <code>PUT<\/code> \u0648 \u0628\u0631\u0627\u06cc \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 <code>PATCH<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0642\u06cc\u0642 \u0628\u0647 \u0637\u0631\u0627\u062d\u06cc API \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0647 \u0641\u0642\u0637 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u0627\u0631\u0633\u0627\u0644\u200c\u0634\u062f\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0646\u060c Endpoint \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0686\u0646\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@PATCH(\"business\/profile\")\nsuspend fun updateBusiness(\n    @Body request: UpdateBusinessRequest\n): BusinessDto\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>@PATCH<\/code> \u06cc\u0639\u0646\u06cc \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u06a9\u0644 \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0627\u0632 \u0646\u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0628\u0634\u0647\u061b \u0641\u0642\u0637 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0631\u0648\u062c\u06cc <code>BusinessDto<\/code> \u0647\u0645 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u0647 \u06a9\u0647 \u0633\u0631\u0648\u0631 \u0628\u0639\u062f \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u062e\u06cc\u0644\u06cc \u0645\u0647\u0645\u0647. \u0646\u0628\u0627\u06cc\u062f \u0641\u0631\u0636 \u06a9\u0646\u06cc\u0645 \u0686\u0648\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0648\u0641\u0642 \u0628\u0648\u062f\u0647\u060c \u062f\u0642\u06cc\u0642\u0627\u064b \u0647\u0645\u0627\u0646 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0641\u0631\u0633\u062a\u0627\u062f\u06cc\u0645 \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647. \u0633\u0631\u0648\u0631 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0627\u0635\u0644\u0627\u062d \u06cc\u0627 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u0641\u0627\u0635\u0644\u0647\u200c\u0647\u0627\u06cc \u0627\u0636\u0627\u0641\u06cc \u0646\u0627\u0645 \u0631\u0648 \u062d\u0630\u0641 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0634\u0645\u0627\u0631\u0647 \u0631\u0648 \u0628\u0647 \u0642\u0627\u0644\u0628 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0632\u0645\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647\u062a\u0631\u0647 \u0646\u0633\u062e\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0627\u0632 \u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Repository \u0686\u0637\u0648\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 Repository \u0686\u0646\u06cc\u0646 \u0645\u0633\u06cc\u0631\u06cc \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val updatedBusiness = api.updateBusiness(\n    UpdateBusinessRequest(\n        name = form.name.trim(),\n        phone = form.phone.trim(),\n        address = form.address.trim().ifBlank { null }\n    )\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0627\u0645 \u0648 \u0634\u0645\u0627\u0631\u0647 \u0642\u0628\u0644 \u0627\u0632 \u0627\u0631\u0633\u0627\u0644 <code>trim()<\/code> \u0645\u06cc\u0634\u0646 \u062a\u0627 \u0641\u0627\u0635\u0644\u0647\u200c\u0647\u0627\u06cc \u0646\u0627\u062e\u0648\u0627\u0633\u062a\u0647 \u0627\u0628\u062a\u062f\u0627 \u0648 \u0627\u0646\u062a\u0647\u0627\u06cc \u0627\u0648\u0646\u200c\u0647\u0627 \u062d\u0630\u0641 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0622\u062f\u0631\u0633 \u0627\u0632 \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>form.address.trim().ifBlank { null }\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644 \u0641\u0627\u0635\u0644\u0647\u200c\u0647\u0627 \u062d\u0630\u0641 \u0645\u06cc\u0634\u0646. \u0628\u0639\u062f \u0627\u06af\u0647 \u0646\u062a\u06cc\u062c\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u062e\u0627\u0644\u06cc \u0628\u0627\u0634\u0647\u060c \u0628\u0647 \u062c\u0627\u06cc \u0631\u0634\u062a\u0647 \u062e\u0627\u0644\u06cc\u060c \u0645\u0642\u062f\u0627\u0631 <code>null<\/code> \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0642 \u0631\u0634\u062a\u0647 \u062e\u0627\u0644\u06cc \u0648 <code>null<\/code> \u062f\u0631 \u0628\u0639\u0636\u06cc API\u0647\u0627 \u0645\u0647\u0645\u0647. \u0631\u0634\u062a\u0647 \u062e\u0627\u0644\u06cc \u06cc\u0639\u0646\u06cc \u0641\u06cc\u0644\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 \u0645\u0642\u062f\u0627\u0631\u0634 \u062e\u0627\u0644\u06cc\u0647. <code>null<\/code> \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 \u0645\u0639\u0646\u06cc \u0622\u062f\u0631\u0633\u06cc \u062b\u0628\u062a \u0646\u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u062f\u0642\u06cc\u0642 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0628\u0627\u06cc\u062f \u0628\u0627 Backend \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u0627\u0633\u062e\u060c \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>businessDao.upsert(\n    updatedBusiness.toEntity()\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637 \u0646\u0642\u0637\u0647 \u0627\u0635\u0644\u06cc \u0647\u0645\u0627\u0647\u0646\u06af\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a. \u0633\u0631\u0648\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0648 \u062d\u0627\u0644\u0627 \u0646\u0633\u062e\u0647 \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u062d\u0644\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 \u0627\u06cc\u0646 \u0644\u062d\u0638\u0647\u060c \u062a\u0645\u0627\u0645 Flow\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0645\u0642\u062f\u0627\u0631 \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0646. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0627\u0645 \u062c\u062f\u06cc\u062f \u0641\u0642\u0637 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u062f\u06cc\u062f\u0647 \u0646\u0645\u06cc\u0634\u0647\u061b \u067e\u0646\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a\u060c \u0635\u0641\u062d\u0647 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u0648 \u0647\u0631 \u0628\u062e\u0634 \u0648\u0627\u0628\u0633\u062a\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0647\u0645 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647\u200c\u0631\u0648\u0632 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0627\u0628\u062a\u062f\u0627 Room \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u062f\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u0647 \u0628\u0647\u062a\u0631\u0647 \u0628\u0647 \u0645\u062d\u0636 \u0632\u062f\u0646 \u062f\u06a9\u0645\u0647 \u0630\u062e\u06cc\u0631\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0641\u0648\u0631\u0627\u064b \u062f\u0627\u062e\u0644 Room \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645 \u0648 \u0628\u0639\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0633\u0631\u0648\u0631 \u0631\u0648 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u06cc\u0645. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 <strong>Optimistic Update<\/strong> \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0628\u0639\u0636\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a\u200c\u0647\u0627 Optimistic Update \u062a\u062c\u0631\u0628\u0647 \u062e\u06cc\u0644\u06cc \u062e\u0648\u0628\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0635\u0644\u06cc \u062d\u0633\u0627\u0628 \u0628\u0627\u06cc\u062f \u0645\u062d\u062a\u0627\u0637 \u0628\u0627\u0634\u06cc\u0645. \u0627\u06af\u0647 \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u062a\u06a9\u0631\u0627\u0631\u06cc \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0633\u0631\u0648\u0631 \u0646\u0627\u0645 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0631\u062f \u06a9\u0646\u0647\u060c \u0645\u062c\u0628\u0648\u0631 \u0645\u06cc\u0634\u06cc\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062d\u0644\u06cc \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0633\u062e\u0647 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0648 \u0627\u0645\u0646\u200c\u062a\u0631\u060c \u0627\u0628\u062a\u062f\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648 \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u06cc\u0645 \u0648 \u0641\u0642\u0637 \u0628\u0639\u062f \u0627\u0632 \u0645\u0648\u0641\u0642\u06cc\u062a\u060c Room \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0641\u0631\u0645\n \u2193\n\u0633\u0631\u0648\u0631\n \u2193\n\u067e\u0627\u0633\u062e \u0645\u0648\u0641\u0642\n \u2193\nRoom\n \u2193\nUI\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0648\u0634 \u06a9\u0645\u06cc \u06a9\u0646\u062f\u062a\u0631 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u0631\u0633\u0647\u060c \u0627\u0645\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0644\u06cc \u0647\u0645\u06cc\u0634\u0647 \u0646\u0633\u062e\u0647 \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647 \u0633\u0631\u0648\u0631 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u06a9\u0645\u200c\u0631\u06cc\u0633\u06a9\u060c \u0645\u062b\u0644 \u0631\u0648\u0634\u0646 \u06cc\u0627 \u062e\u0627\u0645\u0648\u0634 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u062a\u0646\u0638\u06cc\u0645 \u0638\u0627\u0647\u0631\u06cc\u060c Optimistic Update \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0646\u0627\u0633\u0628 \u0628\u0627\u0634\u0647. \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0647\u0648\u06cc\u062a\u06cc \u06cc\u0627 \u062d\u0633\u0627\u0633\u060c \u062f\u0631\u06cc\u0627\u0641\u062a \u062a\u0623\u06cc\u06cc\u062f \u0633\u0631\u0648\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0645\u0637\u0645\u0626\u0646\u200c\u062a\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0630\u062e\u06cc\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 ViewModel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0646\u06af\u0627\u0645 \u06a9\u0644\u06cc\u06a9 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647\u060c ViewModel \u0627\u0628\u062a\u062f\u0627 \u0641\u0631\u0645 \u0631\u0648 \u0645\u06cc\u200c\u062e\u0648\u0646\u0647 \u0648 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0639\u062f \u0648\u0636\u0639\u06cc\u062a \u0630\u062e\u06cc\u0631\u0647 \u0631\u0648 \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_uiState.update {\n    it.copy(\n        isSaving = true,\n        errorMessage = null\n    )\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>isSaving = true<\/code> \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u062f\u06a9\u0645\u0647 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0628\u0634\u0647 \u0648 Loading \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. <code>errorMessage = null<\/code> \u0647\u0645 \u062e\u0637\u0627\u06cc \u0642\u0628\u0644\u06cc \u0631\u0648 \u067e\u0627\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062a\u0627 \u067e\u06cc\u0627\u0645 \u0642\u062f\u06cc\u0645\u06cc \u0647\u0646\u06af\u0627\u0645 \u062a\u0644\u0627\u0634 \u062c\u062f\u06cc\u062f \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0628\u0627\u0642\u06cc \u0646\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u067e\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0627\u062e\u0644 Coroutine \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>viewModelScope.launch {\n    try {\n        repository.updateBusiness(uiState.value.form)\n        onSaveSuccess()\n    } catch (error: Exception) {\n        onSaveError(error)\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0641\u0631\u0645 \u0631\u0648 \u0628\u0647 Repository \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647. Repository \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u0645\u062f\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c API \u0631\u0648 \u0635\u062f\u0627 \u0645\u06cc\u200c\u0632\u0646\u0647 \u0648 \u067e\u0627\u0633\u062e \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u0647\u0645\u0647 \u0645\u0631\u0627\u062d\u0644 \u0645\u0648\u0641\u0642 \u0628\u0627\u0634\u0646\u060c \u062a\u0627\u0628\u0639 \u0645\u0648\u0641\u0642\u06cc\u062a \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0647 \u062e\u0637\u0627\u06cc\u06cc \u0627\u062a\u0641\u0627\u0642 \u0628\u06cc\u0641\u062a\u0647\u060c State \u062e\u0637\u0627 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0639\u062f \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u0645\u0648\u0641\u0642 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0645\u06cc\u200c\u0627\u0641\u062a\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u0645\u0648\u0641\u0642\u060c \u0628\u0627\u06cc\u062f \u0646\u0633\u062e\u0647 \u0627\u0635\u0644\u06cc \u0641\u0631\u0645 \u0631\u0648 \u0647\u0645 \u0628\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u06cc\u0645. \u0648\u06af\u0631\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645\u0686\u0646\u0627\u0646 \u0641\u06a9\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0641\u0631\u0645 \u0646\u0633\u0628\u062a \u0628\u0647 \u0646\u0633\u062e\u0647 \u0627\u0648\u0644\u06cc\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>originalForm = _form.value\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0648\u0636\u0639\u06cc\u062a \u0630\u062e\u06cc\u0631\u0647 \u062e\u0627\u0645\u0648\u0634 \u0645\u06cc\u0634\u0647 \u0648 <code>hasChanges<\/code> \u0647\u0645 \u0628\u0647 false \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_uiState.update {\n    it.copy(\n        isSaving = false,\n        hasChanges = false\n    )\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u06cc\u06a9 \u0627\u062a\u0641\u0627\u0642 \u0645\u0648\u0642\u062a\u0647\u060c \u0646\u0647 State \u062f\u0627\u0626\u0645\u06cc \u0635\u0641\u062d\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u06cc\u0634\u0647 \u0645\u062b\u0644 \u062f\u0631\u0633 \u0642\u0628\u0644\u060c \u0627\u0632 SharedFlow \u0628\u0631\u0627\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_events.emit(EditBusinessEvent.Saved)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f <code>Saved<\/code> \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Snackbar \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647 \u06cc\u0627 \u0628\u0647 \u0635\u0641\u062d\u0647 \u0642\u0628\u0644 \u0628\u0631\u06af\u0631\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0639\u062f \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647\u060c \u0635\u0641\u062d\u0647 \u0628\u0633\u062a\u0647 \u0628\u0634\u0647 \u06cc\u0627 \u0628\u0627\u0632 \u0628\u0645\u0648\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0628\u0647 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0633\u0631\u06cc\u0639 \u0628\u0627\u0632 \u0634\u062f\u0647\u060c \u0628\u0639\u062f \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u0645\u0648\u0641\u0642 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0633\u062a\u0647 \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>navController.popBackStack()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>popBackStack()<\/code> \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0647 \u0635\u0641\u062d\u0647 \u0642\u0628\u0644\u06cc \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0647 \u0635\u0641\u062d\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0686\u0646\u062f \u0628\u062e\u0634 \u0645\u062e\u062a\u0644\u0641 \u062f\u0627\u0631\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0628\u062e\u0648\u0627\u062f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647\u060c \u0628\u0647\u062a\u0631\u0647 \u0635\u0641\u062d\u0647 \u0628\u0627\u0632 \u0628\u0645\u0648\u0646\u0647 \u0648 \u0641\u0642\u0637 \u067e\u06cc\u0627\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0627\u06af\u0647 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u0645\u0633\u062a\u0642\u0644 \u0628\u0627 \u0639\u0646\u0648\u0627\u0646 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645\u060c \u0628\u0631\u06af\u0634\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0639\u062f \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0631\u0641\u062a\u0627\u0631 \u0645\u0646\u0627\u0633\u0628\u06cc \u0628\u0627\u0634\u0647. \u0686\u0648\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 \u0634\u062f\u0647\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u0647 \u0648 \u06a9\u0627\u0631\u0634 \u062a\u0645\u0627\u0645 \u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u062a\u0635\u0645\u06cc\u0645 \u0646\u0628\u0627\u06cc\u062f \u062a\u0635\u0627\u062f\u0641\u06cc \u0628\u0627\u0634\u0647. \u0628\u0627\u06cc\u062f \u0628\u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u06cc \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u062a\u06a9\u0631\u0627\u0631\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0634\u0645\u0627\u0631\u0647\u200c\u0627\u06cc \u0648\u0627\u0631\u062f \u06a9\u0646\u0647 \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u06cc\u06af\u0631\u06cc \u062b\u0628\u062a \u0634\u062f\u0647. \u0633\u0631\u0648\u0631 \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648 \u0628\u0627 \u06a9\u062f <code>409 Conflict<\/code> \u0631\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 \u067e\u06cc\u0627\u0645 \u0645\u0634\u062e\u0635 \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>is DuplicatePhoneException -&gt;\n    \"\u0627\u06cc\u0646 \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0642\u0628\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u062d\u0633\u0627\u0628 \u062f\u06cc\u06af\u0631\u06cc \u062b\u0628\u062a \u0634\u062f\u0647\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637\u0627 \u0628\u0647\u062a\u0631\u0647 \u0646\u0632\u062f\u06cc\u06a9 \u0647\u0645\u0627\u0646 \u0641\u06cc\u0644\u062f \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647\u060c \u0646\u0647 \u0641\u0642\u0637 \u0628\u0647 \u0634\u06a9\u0644 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0639\u0645\u0648\u0645\u06cc \u0628\u0627\u0644\u0627\u06cc \u0635\u0641\u062d\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u062e\u0637\u0627\u0647\u0627\u06cc \u0641\u06cc\u0644\u062f\u0647\u0627 \u0631\u0648 \u062f\u0627\u062e\u0644 State \u0641\u0631\u0645 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data class EditBusinessFormErrors(\n    val name: String? = null,\n    val phone: String? = null,\n    val address: String? = null\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u062e\u0637\u0627\u06cc \u0634\u0645\u0627\u0631\u0647 \u0631\u062e \u0645\u06cc\u062f\u0647\u060c \u0641\u0642\u0637 \u062e\u0637\u0627\u06cc \u0647\u0645\u0627\u0646 \u0641\u06cc\u0644\u062f \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>errors.copy(\n    phone = \"\u0627\u06cc\u0646 \u0634\u0645\u0627\u0631\u0647 \u0642\u0628\u0644\u0627\u064b \u062b\u0628\u062a \u0634\u062f\u0647\"\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Compose \u0647\u0645 TextField \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646 \u062e\u0637\u0627 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>isError = state.errors.phone != null\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637 \u0645\u06cc\u06af\u0647 \u0627\u06af\u0647 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u067e\u06cc\u0627\u0645 \u062e\u0637\u0627\u06cc\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c TextField \u0628\u0627\u06cc\u062f \u062f\u0631 \u062d\u0627\u0644\u062a \u062e\u0637\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u06cc\u0627\u0645 \u0648\u0627\u0642\u0639\u06cc \u0647\u0645 \u0627\u0632 State \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>supportingText = {\n    state.errors.phone?.let {\n        Text(it)\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u062c\u0631\u0628\u0647 \u062e\u06cc\u0644\u06cc \u0628\u0647\u062a\u0631 \u0627\u0632 \u0646\u0645\u0627\u06cc\u0634 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0645\u0628\u0647\u0645 \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0627\u0633\u062a\u060c \u0686\u0648\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0642\u06cc\u0642\u0627\u064b \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u06a9\u062f\u0627\u0645 \u0641\u06cc\u0644\u062f \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u0635\u0644\u0627\u062d \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0637\u0627\u06cc \u0633\u0631\u0648\u0631 \u0646\u0628\u0627\u06cc\u062f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0641\u0631\u0645 \u0631\u0648 \u067e\u0627\u06a9 \u06a9\u0646\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0627\u0645\u060c \u0634\u0645\u0627\u0631\u0647 \u0648 \u0622\u062f\u0631\u0633 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0648 \u0628\u0639\u062f \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0647 \u0647\u0646\u06af\u0627\u0645 \u062e\u0637\u0627 \u0641\u0631\u0645 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 Room \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0628\u0634\u0647\u060c \u062a\u0645\u0627\u0645 \u0686\u06cc\u0632\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062a\u0627\u06cc\u067e \u06a9\u0631\u062f\u0647 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0622\u0632\u0627\u0631\u062f\u0647\u0646\u062f\u0647 \u0627\u0633\u062a. \u062f\u0631 \u0632\u0645\u0627\u0646 \u062e\u0637\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647\u060c \u0641\u0631\u0645 \u0628\u0627\u06cc\u062f \u0647\u0645\u0627\u0646\u200c\u0637\u0648\u0631 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647 \u0648 \u0641\u0642\u0637 \u067e\u06cc\u0627\u0645 \u062e\u0637\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_uiState.update {\n    it.copy(\n        isSaving = false,\n        errorMessage = error.toUserMessage()\n    )\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0647\u06cc\u0686 \u062a\u063a\u06cc\u06cc\u0631\u06cc \u062f\u0631 <code>form<\/code> \u0627\u0646\u062c\u0627\u0645 \u0646\u0645\u06cc\u062f\u06cc\u0645. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u0628\u0639\u062f \u0627\u0632 \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0648\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u0632\u0646\u0647 \u0648 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0647\u0645\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0627\u0632 \u0627\u0648\u0644 \u0648\u0627\u0631\u062f \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a\u200c\u0647\u0627\u06cc State \u0641\u0631\u0645 \u0648 \u062f\u0627\u062f\u0647 \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0627\u0633\u062a. \u0641\u0631\u0645 \u0645\u0645\u06a9\u0646\u0647 \u0646\u0633\u062e\u0647\u200c\u0627\u06cc \u0647\u0646\u0648\u0632 \u062a\u0623\u06cc\u06cc\u062f\u0646\u0634\u062f\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0628\u0627\u06cc\u062f \u062a\u0627 \u0632\u0645\u0627\u0646 \u062a\u0635\u0645\u06cc\u0645 \u06a9\u0627\u0631\u0628\u0631 \u062d\u0641\u0638 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u062f\u0648\u0646 \u0630\u062e\u06cc\u0631\u0647 \u062e\u0627\u0631\u062c \u0628\u0634\u0647 \u0686\u0647 \u06a9\u0646\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647\u060c \u0627\u0645\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0632\u062f\u0646 \u062f\u06a9\u0645\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0631\u0648\u06cc Back \u0645\u06cc\u200c\u0632\u0646\u0647. \u0627\u06af\u0647 \u0641\u0648\u0631\u0627\u064b \u0627\u0632 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0628\u0634\u06cc\u0645\u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u0634 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 <code>hasChanges<\/code> \u0631\u0648 \u062f\u0627\u0631\u06cc\u0645\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0642\u0628\u0644 \u0627\u0632 \u062e\u0631\u0648\u062c \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (uiState.hasChanges) {\n    showDiscardChangesDialog()\n} else {\n    navController.popBackStack()\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u062a\u063a\u06cc\u06cc\u0631\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0635\u0641\u062d\u0647 \u0639\u0627\u062f\u06cc \u0628\u0633\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u0627\u06af\u0647 \u0641\u0631\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u06cc\u06a9 Dialog \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0630\u062e\u06cc\u0631\u0647 \u0646\u0634\u062f\u0646.\n\u0645\u06cc\u200c\u062e\u0648\u0627\u06cc \u0628\u062f\u0648\u0646 \u0630\u062e\u06cc\u0631\u0647 \u0627\u0632 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0628\u0634\u06cc\u061f\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 Dialog \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0627\u0631\u0647: \u0627\u062f\u0627\u0645\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648 \u062e\u0631\u0648\u062c \u0628\u062f\u0648\u0646 \u0630\u062e\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u062c\u0644\u0648\u06cc \u0627\u0632 \u0628\u06cc\u0646 \u0631\u0641\u062a\u0646 \u0646\u0627\u062e\u0648\u0627\u0633\u062a\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647\u060c \u0645\u062e\u0635\u0648\u0635\u0627\u064b \u0648\u0642\u062a\u06cc \u0641\u0631\u0645 \u0637\u0648\u0644\u0627\u0646\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0628\u062a\u0647 \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0648\u0686\u06a9\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0627 \u0647\u0634\u062f\u0627\u0631\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f \u0627\u0630\u06cc\u062a \u06a9\u0646\u06cc\u0645. \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0641\u0631\u0645\u06cc \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0647\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u0647\u060c \u0647\u0634\u062f\u0627\u0631 \u062e\u0631\u0648\u062c \u0645\u0646\u0637\u0642\u06cc\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc Offline First\u060c \u0645\u0645\u06a9\u0646\u0647 \u0628\u0647 \u0630\u0647\u0646\u0645\u0648\u0646 \u0628\u0631\u0633\u0647 \u06a9\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0647\u0645 \u0622\u0641\u0644\u0627\u06cc\u0646 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u06cc\u0645 \u0648 \u0628\u0639\u062f\u0627\u064b \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u06af\u0627\u0645 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 \u0646\u0638\u0631 \u0641\u0646\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u0645\u06a9\u0646\u0647. \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u062b\u0628\u062a \u06a9\u0646\u06cc\u0645 \u0648 \u06cc\u06a9 \u0648\u0636\u0639\u06cc\u062a \u0645\u062b\u0644 <code>pendingSync<\/code> \u0631\u0648\u06cc \u0631\u06a9\u0648\u0631\u062f \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc\u0645. \u0628\u0639\u062f \u0648\u0642\u062a\u06cc \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0635\u0644 \u0634\u062f\u060c WorkManager \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0628\u0641\u0631\u0633\u062a\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0686\u0646\u062f \u0645\u0633\u0626\u0644\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0634\u0645\u0627\u0631\u0647 \u062c\u062f\u06cc\u062f \u062f\u0631 \u0633\u0631\u0648\u0631 \u062a\u06a9\u0631\u0627\u0631\u06cc \u0628\u0627\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0627\u0632 \u062f\u0633\u062a\u06af\u0627\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0628\u0627\u0634\u0647. \u06cc\u0627 \u0633\u0631\u0648\u0631 \u0628\u062e\u0634\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0631\u062f \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u0627\u0628\u062a\u062f\u0627\u06cc\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0628\u0647\u062a\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0647\u0648\u06cc\u062a\u06cc \u0648 \u0627\u0635\u0644\u06cc \u062d\u0633\u0627\u0628 \u0641\u0642\u0637 \u0628\u0627 \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648 \u062a\u0623\u06cc\u06cc\u062f \u0633\u0631\u0648\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0646. \u062f\u0631 \u0646\u0628\u0648\u062f \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0631\u0645 \u062d\u0641\u0638 \u0645\u06cc\u0634\u0646\u060c \u0627\u0645\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u06cc\u0627\u0645 \u0645\u0646\u0627\u0633\u0628 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u060c \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0644\u0627\u0632\u0645\u0647.\n\u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u06a9\u0647 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u06cc \u062d\u0641\u0638 \u0634\u062f\u0647.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0647\u0645 \u0631\u0641\u062a\u0627\u0631 \u0635\u0627\u062f\u0642\u0627\u0646\u0647\u200c\u0627\u06cc\u0647 \u0648 \u0647\u0645 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc Sync \u0648 \u062a\u0639\u0627\u0631\u0636 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0648\u0627\u0631\u062f \u0646\u0633\u062e\u0647 \u0627\u0648\u0644\u06cc\u0647 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u063a\u06cc\u06cc\u0631 \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0639\u0627\u062f\u06cc \u0641\u0631\u0642 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0641\u0642\u0637 \u06cc\u06a9 \u0641\u06cc\u0644\u062f \u0633\u0627\u062f\u0647 \u0646\u06cc\u0633\u062a \u0648 \u0646\u0642\u0634 \u0634\u0646\u0627\u0633\u0647 \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0647\u0645 \u062f\u0627\u0631\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u062a\u063a\u06cc\u06cc\u0631 \u0634\u0645\u0627\u0631\u0647 \u0628\u0627\u06cc\u062f \u0628\u0627 \u062d\u0633\u0627\u0633\u06cc\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0633\u0631\u0648\u0631 \u0628\u0639\u062f \u0627\u0632 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0646 \u0634\u0645\u0627\u0631\u0647 \u062c\u062f\u06cc\u062f\u060c \u06cc\u06a9 \u06a9\u062f \u062a\u0623\u06cc\u06cc\u062f \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647. \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0634\u0645\u0627\u0631\u0647 \u062a\u0623\u06cc\u06cc\u062f \u0646\u0634\u062f\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u0634\u0645\u0627\u0631\u0647 \u0642\u0628\u0644\u06cc \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u0686\u0646\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0634\u0645\u0627\u0631\u0647 \u062c\u062f\u06cc\u062f\n \u2193\n\u0627\u0631\u0633\u0627\u0644 \u06a9\u062f \u062a\u0623\u06cc\u06cc\u062f\n \u2193\n\u062a\u0623\u06cc\u06cc\u062f \u06a9\u062f\n \u2193\n\u062a\u063a\u06cc\u06cc\u0631 \u0634\u0645\u0627\u0631\u0647 \u062f\u0631 \u0633\u0631\u0648\u0631\n \u2193\n\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc Room\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0634\u0645\u0627\u0631\u0647 \u06a9\u0646\u0627\u0631 \u0646\u0627\u0645 \u0648 \u0622\u062f\u0631\u0633 \u062f\u0631 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0639\u0645\u0648\u0645\u06cc \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0686\u0646\u062f\u0627\u0646 \u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0633\u062a. \u0628\u0647\u062a\u0631\u0647 Endpoint \u0648 \u0641\u0631\u0627\u06cc\u0646\u062f \u062c\u062f\u0627\u06af\u0627\u0646\u0647\u200c\u0627\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647 \u0638\u0627\u0647\u0631 \u0645\u0634\u0627\u0628\u0647 \u0641\u06cc\u0644\u062f\u0647\u0627 \u0647\u0645\u06cc\u0634\u0647 \u0628\u0647 \u0645\u0639\u0646\u06cc \u0645\u0646\u0637\u0642 \u0645\u0634\u0627\u0628\u0647 \u0646\u06cc\u0633\u062a. \u0646\u0627\u0645 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u060c \u0627\u0645\u0627 \u0634\u0645\u0627\u0631\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u062a\u0623\u06cc\u06cc\u062f \u0647\u0648\u06cc\u062a \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 Token \u0647\u0645 \u0628\u0627\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 Token \u0641\u0642\u0637 \u0634\u0627\u0645\u0644 \u0634\u0646\u0627\u0633\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0648 \u0633\u0637\u062d \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0627\u0634\u0647\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 Token \u062c\u062f\u06cc\u062f \u0646\u062f\u0627\u0631\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0627\u0632 Room \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0645\u062b\u0644 \u0646\u0627\u0645\u060c \u0634\u0645\u0627\u0631\u0647 \u06cc\u0627 \u0646\u0642\u0634 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 Claims \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 JWT \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0647 \u0628\u0627\u0634\u0646\u060c Token \u0642\u062f\u06cc\u0645\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0647\u0645\u0686\u0646\u0627\u0646 \u062f\u0627\u062f\u0647 \u0642\u0628\u0644\u06cc \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0628\u0647\u062a\u0631\u0647 UI \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0632 Token \u0646\u062e\u0648\u0646\u0647. Token \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0627\u062b\u0628\u0627\u062a \u0647\u0648\u06cc\u062a \u0648 \u0645\u062c\u0648\u0632 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647\u060c \u0646\u0647 \u0628\u0631\u0627\u06cc \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0622\u062e\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0628\u0639\u0636\u06cc \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u060c \u0633\u0631\u0648\u0631 \u0628\u0639\u062f \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062d\u0633\u0627\u0633 Token \u062c\u062f\u06cc\u062f \u0647\u0645 \u0635\u0627\u062f\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>response.newAccessToken?.let {\n    tokenStorage.saveAccessToken(it)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0645\u06cc\u06af\u0647 \u0627\u06af\u0647 \u067e\u0627\u0633\u062e \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0634\u0627\u0645\u0644 Access Token \u062c\u062f\u06cc\u062f \u0628\u0648\u062f\u060c \u0646\u0633\u062e\u0647 \u0642\u0628\u0644\u06cc \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0648\u0642\u062a\u06cc \u0627\u062c\u0631\u0627 \u0628\u0634\u0647 \u06a9\u0647 Backend \u0648\u0627\u0642\u0639\u0627\u064b \u0686\u0646\u06cc\u0646 \u0642\u0631\u0627\u0631\u062f\u0627\u062f\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0646\u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0645\u0648\u0646 \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 Token \u062c\u062f\u06cc\u062f \u0628\u0633\u0627\u0632\u06cc\u0645 \u06cc\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0647\u0645\u0647 \u0635\u0641\u062d\u0647\u200c\u0647\u0627 \u0686\u0637\u0648\u0631 \u0628\u0647\u200c\u0631\u0648\u0632 \u0645\u06cc\u0634\u0646\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0632\u06cc\u0628\u0627\u06cc\u06cc \u0645\u0633\u06cc\u0631 Room \u0648 Flow \u0627\u06cc\u0646\u062c\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc\u0634\u0647. Repository \u067e\u0627\u0633\u062e \u0645\u0648\u0641\u0642 \u0633\u0631\u0648\u0631 \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>businessDao.upsert(updatedBusiness.toEntity())\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u067e\u0646\u0644 \u0627\u0632 \u0642\u0628\u0644 \u0686\u0646\u06cc\u0646 \u062c\u0631\u06cc\u0627\u0646\u06cc \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>repository.observeBusiness()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0631\u06a9\u0648\u0631\u062f Room \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Flow \u0645\u0642\u062f\u0627\u0631 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. DashboardViewModel \u0645\u0642\u062f\u0627\u0631 \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Compose \u0646\u0627\u0645 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0628\u0639\u062f \u0627\u0632 \u0628\u0627\u0632\u06af\u0634\u062a \u0627\u0632 \u0635\u0641\u062d\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634\u060c \u062f\u0633\u062a\u06cc \u0628\u06af\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0646\u0627\u0645 \u067e\u0646\u0644 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647.\n\u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u0631\u0648 Refresh \u06a9\u0646.\n\u0645\u0646\u0648\u06cc \u06a9\u0646\u0627\u0631\u06cc \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0633\u0627\u0632.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0647 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647\u200c\u0647\u0627 \u0628\u0647 \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u0645\u0634\u062a\u0631\u06a9 \u0648\u0635\u0644 \u0647\u0633\u062a\u0646 \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0632 \u0647\u0645\u0627\u0646 \u0645\u0646\u0628\u0639 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0632\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u0645\u0639\u0645\u0627\u0631\u06cc \u0648\u0627\u06a9\u0646\u0634\u06cc \u0627\u0633\u062a:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0635\u0641\u062d\u0647\u200c\u0647\u0627 \u0631\u0648 \u062f\u0633\u062a\u06cc \u0628\u0647\u200c\u0631\u0648\u0632 \u06a9\u0646\u06cc\u0645\u060c \u062f\u0627\u062f\u0647 \u0627\u0635\u0644\u06cc \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u06cc\u0645 \u0648 \u0635\u0641\u062d\u0647\u200c\u0647\u0627 \u062e\u0648\u062f\u0634\u0627\u0646 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0648\u0627\u06a9\u0646\u0634 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0646.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647 \u0648 State \u0641\u0631\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u062f\u0648 \u0646\u0648\u0639 State \u062f\u0627\u0634\u062a\u06cc\u0645 \u06a9\u0647 \u0646\u0628\u0627\u06cc\u062f \u0628\u0627 \u0647\u0645 \u0627\u0634\u062a\u0628\u0627\u0647 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Room \u0646\u0633\u062e\u0647 \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647 \u0648 \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. \u0627\u0645\u0627 \u0641\u0631\u0645 \u0646\u0633\u062e\u0647\u200c\u0627\u06cc \u0645\u0648\u0642\u062a\u06cc \u0648 \u0642\u0627\u0628\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u0631\u0647 \u06a9\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0647\u0646\u0648\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u060c \u0646\u0627\u0642\u0635 \u06cc\u0627 \u0630\u062e\u06cc\u0631\u0647\u200c\u0646\u0634\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u0639\u0627\u062f\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Room\n \u2193\n\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0641\u0631\u0645\n \u2193\n\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u06a9\u0627\u0631\u0628\u0631\n \u2193\n\u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc\n \u2193\nAPI\n \u2193\n\u067e\u0627\u0633\u062e \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647\n \u2193\nRoom\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0642\u0637 \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0627\u0632 Room \u0648\u0627\u0631\u062f \u0641\u0631\u0645 \u0645\u06cc\u0634\u0646. \u0628\u0639\u062f \u06a9\u0627\u0631\u0628\u0631 \u0646\u0633\u062e\u0647 \u0645\u0648\u0642\u062a\u06cc \u062e\u0648\u062f\u0634 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u0647. \u0627\u06af\u0647 \u0633\u0631\u0648\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0631\u062f\u060c \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0648\u0627\u0631\u062f Room \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u062c\u0644\u0648\u06cc \u06cc\u06a9 \u0627\u0634\u062a\u0628\u0627\u0647 \u062e\u0637\u0631\u0646\u0627\u06a9 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647: \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u0627\u0642\u0635 \u0641\u0631\u0645 \u062f\u0627\u062e\u0644 \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0642\u0628\u0644 \u0627\u0632 \u062a\u0623\u06cc\u06cc\u062f \u0646\u0647\u0627\u06cc\u06cc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0642\u0637 \u062a\u063a\u06cc\u06cc\u0631 \u0686\u0646\u062f TextField \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0638\u0627\u0647\u0631 \u0635\u0641\u062d\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0634\u0627\u06cc\u062f \u0627\u0632 \u0635\u0641\u062d\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u0647\u060c \u0686\u0648\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0628\u0644\u06cc \u0627\u0632 \u0642\u0628\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0646. \u0627\u0645\u0627 \u0627\u0632 \u0646\u0638\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a State \u067e\u06cc\u0686\u06cc\u062f\u0647\u200c\u062a\u0631\u0647. \u0628\u0627\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645\u060c \u0646\u0633\u062e\u0647 \u0627\u0635\u0644\u06cc \u0631\u0648 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645\u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062c\u062f\u0627 \u06a9\u0646\u06cc\u0645\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0648\u0627\u0642\u0639\u06cc \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u06cc\u0645\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u06cc\u0645 \u0648 \u0641\u0642\u0637 \u0628\u0639\u062f \u0627\u0632 \u062a\u0623\u06cc\u06cc\u062f \u0633\u0631\u0648\u0631\u060c Room \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0641\u0631\u0627\u06cc\u0646\u062f\u060c \u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u0641\u06cc\u0644\u062f\u0647\u0627 \u0648 \u0648\u0636\u0639\u06cc\u062a \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. ViewModel State \u0641\u0631\u0645\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0648 \u0639\u0645\u0644\u06cc\u0627\u062a \u0630\u062e\u06cc\u0631\u0647 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. Repository \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648 \u0628\u0647 API \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 \u0646\u0633\u062e\u0647 \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647. Flow \u0647\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648 \u0628\u0647 \u0647\u0645\u0647 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646\u062a\u0642\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>\u0641\u0631\u0645 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u062e\u0648\u062f\u0634 \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u06cc\u0633\u062a<\/strong>. \u0641\u0631\u0645 \u0641\u0642\u0637 \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u0645\u0648\u0642\u062a \u0627\u0632 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u062d\u0627\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0648\u0646 \u0627\u0633\u062a. \u062a\u0627 \u0648\u0642\u062a\u06cc \u0633\u0631\u0648\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648 \u0646\u067e\u0630\u06cc\u0631\u0641\u062a\u0647\u060c \u062f\u0627\u062f\u0647 \u0627\u0635\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0639\u0644\u06cc \u0627\u0632 Room \u0648\u0627\u0631\u062f \u0641\u0631\u0645 \u0645\u06cc\u0634\u0646\u060c \u06a9\u0627\u0631\u0628\u0631 \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u0645\u0648\u0642\u062a \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u0647\u060c Repository \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 \u0641\u0642\u0637 \u0628\u0639\u062f \u0627\u0632 \u062a\u0623\u06cc\u06cc\u062f \u0633\u0631\u0648\u0631\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 Room \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0645\u06cc\u0634\u0646 \u062a\u0627 \u0647\u0645\u0647 \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647\u200c\u0631\u0648\u0632 \u0628\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0628\u06cc\u0633\u062a\u200c\u0648\u067e\u0646\u062c\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u06cc\u06a9 \u0639\u06a9\u0633 \u0686\u0637\u0648\u0631 \u0627\u0632 \u062f\u0648\u0631\u0628\u06cc\u0646 \u06cc\u0627 \u06af\u0627\u0644\u0631\u06cc \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u0634\u0647\u060c \u0628\u0631\u0634 \u0645\u06cc\u200c\u062e\u0648\u0631\u0647\u060c \u0633\u0628\u06a9 \u0645\u06cc\u0634\u0647 \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u06cc\u0631\u0633\u0647\u061f<\/em><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u0622\u067e\u0644\u0648\u062f \u0639\u06a9\u0633<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0635\u0641\u062d\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0627\u0645 \u06cc\u0627 \u0622\u062f\u0631\u0633 \u0646\u0633\u0628\u062a\u0627\u064b \u0633\u0627\u062f\u0647 \u0628\u0648\u062f. \u06a9\u0627\u0631\u0628\u0631 \u06cc\u06a9 \u0645\u062a\u0646 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u062f\u0627\u062f \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645\u0648\u0646 \u0645\u062a\u0646 \u0631\u0648 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a JSON \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0627\u062f. \u0627\u0645\u0627 \u0639\u06a9\u0633 \u0628\u0627 \u0645\u062a\u0646 \u0641\u0631\u0642 \u062f\u0627\u0631\u0647. \u0639\u06a9\u0633 \u0645\u0645\u06a9\u0646\u0647 \u0686\u0646\u062f \u0645\u06af\u0627\u0628\u0627\u06cc\u062a \u062d\u062c\u0645 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0632 \u062f\u0648\u0631\u0628\u06cc\u0646 \u06cc\u0627 \u06af\u0627\u0644\u0631\u06cc \u0648\u0627\u0631\u062f \u0628\u0634\u0647\u060c \u062c\u0647\u062a \u0627\u0634\u062a\u0628\u0627\u0647\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0628\u0639\u0627\u062f\u0634 \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0628\u0632\u0631\u06af \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0628\u062e\u0634\u06cc \u0627\u0632 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u0634\u0627\u0645\u0644 \u0628\u0634\u0647 \u06a9\u0647 \u0627\u0635\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u0622\u067e\u0644\u0648\u062f \u0639\u06a9\u0633 \u0641\u0642\u0637 \u0635\u062f\u0627 \u0632\u062f\u0646 \u06cc\u06a9 Endpoint \u0646\u06cc\u0633\u062a. \u0627\u06cc\u0646 \u0641\u0631\u0627\u06cc\u0646\u062f \u0627\u0632 \u0686\u0646\u062f \u0645\u0631\u062d\u0644\u0647 \u062c\u062f\u0627 \u062a\u0634\u06a9\u06cc\u0644 \u0634\u062f\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0646\u0628\u0639 \u0639\u06a9\u0633\n      \u2193\nCamera \u06cc\u0627 Gallery\n      \u2193\n\u062f\u0631\u06cc\u0627\u0641\u062a Uri\n      \u2193\nCrop\n      \u2193\nResize \u0648 Compress\n      \u2193\n\u0633\u0627\u062e\u062a \u0641\u0627\u06cc\u0644 \u0642\u0627\u0628\u0644 \u0627\u0631\u0633\u0627\u0644\n      \u2193\nMultipart Upload\n      \u2193\n\u062f\u0631\u06cc\u0627\u0641\u062a \u0622\u062f\u0631\u0633 \u0639\u06a9\u0633\n      \u2193\n\u0630\u062e\u06cc\u0631\u0647 \u062f\u0631 Room\n      \u2193\n\u0646\u0645\u0627\u06cc\u0634 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0645\u0631\u062d\u0644\u0647 \u06cc\u06a9 \u0645\u0633\u0626\u0644\u0647 \u0645\u062a\u0641\u0627\u0648\u062a \u0631\u0648 \u062d\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062f\u0648\u0631\u0628\u06cc\u0646 \u0639\u06a9\u0633 \u062c\u062f\u06cc\u062f \u0645\u06cc\u200c\u0633\u0627\u0632\u0647. \u06af\u0627\u0644\u0631\u06cc \u0628\u0647 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0645\u0648\u062c\u0648\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u06cc\u062f\u0647. Crop \u0645\u062d\u062f\u0648\u062f\u0647 \u0645\u0646\u0627\u0633\u0628 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647. Compress \u062d\u062c\u0645 \u0641\u0627\u06cc\u0644 \u0631\u0648 \u06a9\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Upload \u0646\u0633\u062e\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0646\u0628\u0627\u06cc\u062f \u062a\u0645\u0627\u0645 \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0631\u0648 \u062f\u0627\u062e\u0644 <code>onClick<\/code> \u062f\u06a9\u0645\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0639\u06a9\u0633 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645. \u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u0639\u06a9\u0633 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 ViewModel \u0648\u0636\u0639\u06cc\u062a \u0641\u0631\u0627\u06cc\u0646\u062f \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. \u067e\u0631\u062f\u0627\u0632\u0634 \u0641\u0627\u06cc\u0644 \u0648 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645 \u062f\u0631 \u06a9\u0644\u0627\u0633\u200c\u0647\u0627\u06cc \u0645\u062e\u0635\u0648\u0635 \u062e\u0648\u062f\u0634\u0648\u0646 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0639\u06a9\u0633 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0627\u0632 \u06a9\u062c\u0627 \u0645\u06cc\u0627\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u062a\u0635\u0648\u06cc\u0631 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0645\u06cc\u200c\u0632\u0646\u0647\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06cc\u06a9 \u067e\u0646\u062c\u0631\u0647 \u06a9\u0648\u0686\u06a9 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06af\u0631\u0641\u062a\u0646 \u0639\u06a9\u0633 \u0628\u0627 \u062f\u0648\u0631\u0628\u06cc\u0646\n\u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u0632 \u06af\u0627\u0644\u0631\u06cc\n\u062d\u0630\u0641 \u0639\u06a9\u0633 \u0641\u0639\u0644\u06cc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627 \u0627\u0632 \u0646\u0638\u0631 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0646\u060c \u0627\u0645\u0627 \u067e\u0634\u062a \u0635\u062d\u0646\u0647 \u0645\u0633\u06cc\u0631 \u06cc\u06a9\u0633\u0627\u0646\u06cc \u0646\u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0645\u0633\u06cc\u0631 \u062f\u0648\u0631\u0628\u06cc\u0646\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u062f\u0648\u0631\u0628\u06cc\u0646 \u06cc\u06a9 \u0645\u062d\u0644 \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0639\u06a9\u0633 \u0628\u0633\u0627\u0632\u0647. \u062f\u0648\u0631\u0628\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 \u06af\u0631\u0641\u062a\u0647\u200c\u0634\u062f\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 \u0647\u0645\u0648\u0646 \u0645\u062d\u0644 \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647. \u062f\u0631 \u0645\u0633\u06cc\u0631 \u06af\u0627\u0644\u0631\u06cc\u060c \u062e\u0648\u062f \u0633\u06cc\u0633\u062a\u0645 \u06cc\u06a9 <code>Uri<\/code> \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0639\u06a9\u0633 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0631\u0648 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0628\u0647\u062a\u0631\u0647 \u0647\u0631 \u062f\u0648 \u0645\u0633\u06cc\u0631 \u0628\u0647 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u0645\u0634\u062a\u0631\u06a9 \u0628\u0631\u0633\u0646:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Camera \u2500\u2500\u2500\u2510\n          \u251c\u2500\u2500\u2192 Uri \u0639\u06a9\u0633 \u0627\u0648\u0644\u06cc\u0647 \u2192 Crop \u2192 Compress \u2192 Upload\nGallery \u2500\u2500\u2518\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u0628\u062e\u0634 Crop \u0648 Upload \u0646\u0628\u0627\u06cc\u062f \u0627\u0647\u0645\u06cc\u062a \u0628\u062f\u0647 \u0639\u06a9\u0633 \u0627\u0632 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0627\u0648\u0645\u062f\u0647 \u06cc\u0627 \u06af\u0627\u0644\u0631\u06cc. \u0627\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u06a9\u062f \u067e\u0631\u062f\u0627\u0632\u0634 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631 \u0646\u0646\u0648\u06cc\u0633\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Uri \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u06cc\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0648\u0628 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627 \u0645\u0633\u06cc\u0631\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u0627\u06cc\u0646 \u0633\u0631\u0648\u06a9\u0627\u0631 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/uploads\/business\/logo.jpg\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u060c \u0639\u06a9\u0633 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0647\u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u0641\u0627\u06cc\u0644 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0646\u06cc\u0633\u062a. \u0633\u06cc\u0633\u062a\u0645 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06cc\u06a9 <code>Uri<\/code> \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>content:\/\/media\/picker\/...\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Uri<\/code> \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0634\u0628\u06cc\u0647 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u062d\u062a\u0648\u0627 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a. \u0627\u06cc\u0646 \u0622\u062f\u0631\u0633 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0647 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0648\u0627\u0642\u0639\u06cc \u0627\u0634\u0627\u0631\u0647 \u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0648 \u06af\u0627\u0647\u06cc \u0627\u0635\u0644\u0627\u064b \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u06cc\u0631 \u0641\u06cc\u0632\u06cc\u06a9\u06cc \u0627\u0648\u0646 \u0641\u0627\u06cc\u0644 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u062a\u0644\u0627\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0647\u0631 <code>content:\/\/ Uri<\/code> \u0631\u0648 \u0628\u0647 \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u0645\u062b\u0644 <code>\/storage\/emulated\/0\/...<\/code> \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0631\u0648\u06cc \u0647\u0645\u0647 \u0646\u0633\u062e\u0647\u200c\u0647\u0627 \u0648 \u0647\u0645\u0647 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0641\u0627\u06cc\u0644 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0646\u06cc\u0633\u062a. \u0628\u0647\u062a\u0631\u0647 \u0645\u062d\u062a\u0648\u0627 \u0631\u0648 \u0628\u0627 <code>ContentResolver<\/code> \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 \u062e\u0648\u062f Uri \u0628\u062e\u0648\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u062f\u0631 \u0627\u06cc\u0646 \u062f\u0631\u0633\u060c <code>Uri<\/code> \u062d\u0644\u0642\u0647 \u0627\u062a\u0635\u0627\u0644 \u062a\u0645\u0627\u0645 \u0645\u0631\u0627\u062d\u0644 \u067e\u0631\u062f\u0627\u0632\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0639\u06a9\u0633 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u2192 Uri\n\u0639\u06a9\u0633 \u06af\u0631\u0641\u062a\u0647\u200c\u0634\u062f\u0647 \u2192 Uri\n\u062e\u0631\u0648\u062c\u06cc Crop \u2192 Uri \u06cc\u0627 File\n\u0641\u0627\u06cc\u0644 \u0641\u0634\u0631\u062f\u0647\u200c\u0634\u062f\u0647 \u2192 File\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0646\u062a\u062e\u0627\u0628 \u0639\u06a9\u0633 \u0627\u0632 \u06af\u0627\u0644\u0631\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0639\u06a9\u0633\u060c \u0631\u0648\u0634 \u062c\u062f\u06cc\u062f\u062a\u0631 \u0648 \u0645\u0646\u0627\u0633\u0628\u200c\u062a\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <strong>Photo Picker<\/strong> \u0633\u06cc\u0633\u062a\u0645\u0647. \u0627\u06cc\u0646 \u0627\u0646\u062a\u062e\u0627\u0628\u06af\u0631 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u0641\u0642\u0637 \u0639\u06a9\u0633 \u0645\u0648\u0631\u062f\u0646\u0638\u0631\u0634 \u0631\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0630\u0627\u0631\u0647\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u06af\u0633\u062a\u0631\u062f\u0647\u200c\u0627\u06cc \u0628\u0647 \u06a9\u0644 \u06af\u0627\u0644\u0631\u06cc \u0628\u062e\u0648\u0627\u062f. \u0642\u0631\u0627\u0631\u062f\u0627\u062f <code>PickVisualMedia<\/code> \u06cc\u06a9 \u0639\u06a9\u0633 \u06cc\u0627 \u0648\u06cc\u062f\u0626\u0648 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0648\u0641\u0642 \u06cc\u06a9 <code>Uri<\/code> \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647\u061b \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0646\u0635\u0631\u0627\u0641 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645 \u0645\u0642\u062f\u0627\u0631 <code>null<\/code> \u0645\u06cc\u062f\u0647. \u0627\u06cc\u0646 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u062f\u0631 \u062f\u0633\u062a\u06af\u0627\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 Photo Picker \u0627\u0635\u0644\u06cc \u0631\u0648 \u0646\u062f\u0627\u0631\u0646\u060c \u0627\u0632 \u0645\u0633\u06cc\u0631\u0647\u0627\u06cc \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0633\u06cc\u0633\u062a\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Compose\u060c \u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 \u0627\u0646\u062a\u062e\u0627\u0628 \u0639\u06a9\u0633 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val galleryLauncher = rememberLauncherForActivityResult(\n    contract = ActivityResultContracts.PickVisualMedia()\n) { uri -&gt;\n    uri?.let(viewModel::onImageSelected)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>rememberLauncherForActivityResult<\/code> \u06cc\u06a9 Launcher \u0645\u06cc\u200c\u0633\u0627\u0632\u0647 \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06cc\u06a9 \u0642\u0627\u0628\u0644\u06cc\u062a \u062e\u0627\u0631\u062c \u0627\u0632 Compose \u0631\u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0647 \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0645\u0627 <code>PickVisualMedia<\/code> \u0627\u0633\u062a. \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0646\u062a\u062e\u0627\u0628\u06af\u0631 \u0639\u06a9\u0633 \u0631\u0648 \u0645\u06cc\u200c\u0628\u0646\u062f\u0647\u060c Callback \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0642\u0639\u0627\u064b \u0639\u06a9\u0633\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c <code>uri<\/code> \u0645\u0642\u062f\u0627\u0631 \u062f\u0627\u0631\u0647 \u0648 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 ViewModel \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u06cc\u0645. \u0627\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u06a9\u0645\u0647 Back \u0631\u0648 \u0632\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0645\u0642\u062f\u0627\u0631 <code>null<\/code> \u0645\u06cc\u0634\u0647 \u0648 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u0645\u06cc\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06af\u0627\u0644\u0631\u06cc\u060c Launcher \u0631\u0648 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>galleryLauncher.launch(\n    PickVisualMediaRequest(\n        ActivityResultContracts.PickVisualMedia.ImageOnly\n    )\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ImageOnly<\/code> \u0645\u06cc\u06af\u0647 \u0641\u0642\u0637 \u062a\u0635\u0648\u06cc\u0631\u0647\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646\u060c \u0646\u0647 \u0648\u06cc\u062f\u0626\u0648\u0647\u0627. \u062e\u0648\u062f Photo Picker \u0647\u0645 \u062e\u0631\u0648\u062c\u06cc \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 Uri \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647. Uri \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u062f\u0646 \u0645\u0646\u0627\u0633\u0628\u0647\u060c \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0641\u0631\u0636 \u06a9\u0646\u06cc\u0645 \u0641\u0627\u06cc\u0644 \u0627\u0635\u0644\u06cc \u0642\u0627\u0628\u0644 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06cc\u0627 \u0646\u0648\u0634\u062a\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0641\u0642\u0637 \u0645\u06cc\u06af\u0647:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u0646 \u0639\u06a9\u0633 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u06a9\u0647 \u0639\u06a9\u0633 \u0628\u0627\u06cc\u062f \u0628\u0631\u0634 \u0628\u062e\u0648\u0631\u0647\u060c \u0641\u0634\u0631\u062f\u0647 \u0628\u0634\u0647 \u06cc\u0627 \u0622\u067e\u0644\u0648\u062f \u0628\u0634\u0647\u060c \u0648\u0638\u06cc\u0641\u0647 Launcher \u06af\u0627\u0644\u0631\u06cc \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0628\u0631\u0627\u06cc \u06af\u0627\u0644\u0631\u06cc Permission \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u0627\u0632 Photo Picker \u0633\u06cc\u0633\u062a\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u062d\u062f\u0648\u062f \u0639\u06a9\u0633 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u06af\u0631\u0641\u062a\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u06af\u0633\u062a\u0631\u062f\u0647 \u06a9\u0644 \u06af\u0627\u0644\u0631\u06cc \u0646\u062f\u0627\u0631\u0647. \u06a9\u0627\u0631\u0628\u0631 \u062e\u0648\u062f\u0634 \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0634\u062e\u0635\u06cc \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0633\u06cc\u0633\u062a\u0645 \u0641\u0642\u0637 \u062f\u0633\u062a\u0631\u0633\u06cc \u0644\u0627\u0632\u0645 \u0628\u0647 \u0647\u0645\u0648\u0646 \u0645\u0648\u0631\u062f \u0631\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647. \u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u062f\u0644\u0627\u06cc\u0644\u06cc\u0647 \u06a9\u0647 Photo Picker \u0646\u0633\u0628\u062a \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0633\u062a\u0642\u06cc\u0645 \u062f\u0633\u062a\u0631\u0633\u06cc \u06a9\u0627\u0645\u0644 \u062a\u0635\u0627\u0648\u06cc\u0631\u060c \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0647\u062a\u0631\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0628\u0627\u06cc\u062f \u0627\u0632 \u0631\u0648\u06cc \u0639\u0627\u062f\u062a\u060c \u0647\u0645\u0627\u0646 \u0627\u0628\u062a\u062f\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062c\u0648\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u062a\u0645\u0627\u0645 \u0639\u06a9\u0633\u200c\u0647\u0627 \u0631\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u06cc\u0645. \u0645\u062c\u0648\u0632 \u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0648\u0642\u062a\u06cc \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647 \u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0647 \u0627\u0648\u0646 \u0633\u0637\u062d \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u0642\u0631\u0627\u0631\u0647 \u0644\u0648\u06af\u0648 \u06cc\u0627 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0647\u060c Photo Picker \u06a9\u0627\u0645\u0644\u0627\u064b \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0646\u06cc\u0627\u0632 \u0645\u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u06af\u0631\u0641\u062a\u0646 \u0639\u06a9\u0633 \u0628\u0627 \u062f\u0648\u0631\u0628\u06cc\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0639\u06a9\u0633 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0627\u0632 \u0642\u0631\u0627\u0631\u062f\u0627\u062f <code>TakePicture<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val cameraLauncher = rememberLauncherForActivityResult(\n    contract = ActivityResultContracts.TakePicture()\n) { success -&gt;\n    if (success) {\n        viewModel.onImageSelected(cameraImageUri)\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>TakePicture<\/code> \u062e\u0648\u062f\u0634 \u0641\u0627\u06cc\u0644 \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0628\u0647 \u0645\u0627 \u0628\u0631\u0646\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647. \u0642\u0628\u0644 \u0627\u0632 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u062f\u0648\u0631\u0628\u06cc\u0646\u060c \u0628\u0627\u06cc\u062f \u06cc\u06a9 Uri \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631\u0634 \u0628\u0630\u0627\u0631\u06cc\u0645. \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0639\u06a9\u0633 \u06af\u0631\u0641\u062a\u0647\u200c\u0634\u062f\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 \u0647\u0645\u0648\u0646 Uri \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0641\u0642\u0637 \u06cc\u06a9 \u0645\u0642\u062f\u0627\u0631 Boolean \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647 \u06a9\u0647 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0630\u062e\u06cc\u0631\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0645\u0648\u0641\u0642 \u0628\u0648\u062f\u0647 \u06cc\u0627 \u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0645\u06cc\u200c\u0646\u0648\u06cc\u0633\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cameraLauncher.launch(cameraImageUri)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u062a\u0641\u0627\u0648\u062a \u062f\u0648\u0631\u0628\u06cc\u0646 \u0648 \u06af\u0627\u0644\u0631\u06cc \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Gallery:\n\u0633\u06cc\u0633\u062a\u0645 \u0628\u0639\u062f \u0627\u0632 \u0627\u0646\u062a\u062e\u0627\u0628\u060c Uri \u0631\u0648 \u0628\u0647 \u0645\u0627 \u0645\u06cc\u062f\u0647.\n\nCamera:\n\u0645\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u062f\u0648\u0631\u0628\u06cc\u0646\u060c Uri \u0631\u0648 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0645\u06cc\u062f\u06cc\u0645.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0639\u0644\u062a \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627\u0645\u0644 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0632\u0631\u06af \u0628\u0627\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0627\u0648\u0646 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u06cc\u06a9 Bitmap \u0628\u0632\u0631\u06af \u0631\u0648 \u062f\u0627\u062e\u0644 \u0646\u062a\u06cc\u062c\u0647 Activity \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0631\u0627\u0631\u062f\u0627\u062f <code>TakePicturePreview<\/code> \u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 \u0641\u0642\u0637 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648\u0686\u06a9 \u067e\u06cc\u0634\u200c\u0646\u0645\u0627\u06cc\u0634 \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 Bitmap \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647 \u0648 \u0628\u0631\u0627\u06cc \u0639\u06a9\u0633\u06cc \u06a9\u0647 \u0642\u0631\u0627\u0631\u0647 \u0628\u0631\u0634 \u0628\u062e\u0648\u0631\u0647 \u0648 \u0628\u0627 \u06a9\u06cc\u0641\u06cc\u062a \u0645\u0646\u0627\u0633\u0628 \u0622\u067e\u0644\u0648\u062f \u0628\u0634\u0647\u060c \u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u0635\u0644\u06cc \u0645\u0627 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Uri \u062f\u0648\u0631\u0628\u06cc\u0646 \u0631\u0648 \u0686\u0637\u0648\u0631 \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0648\u0631\u0628\u06cc\u0646 \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062c\u062f\u0627 \u0627\u0632 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u062e\u0635\u0648\u0635\u06cc \u0645\u0639\u0645\u0648\u0644\u06cc \u0627\u0632 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u0627\u0648\u0646 \u062a\u062d\u0648\u06cc\u0644 \u0628\u062f\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0627\u0634\u062a\u0631\u0627\u06a9 \u0627\u0645\u0646 \u0641\u0627\u06cc\u0644 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f\u0645\u0648\u0646 \u0648 \u062f\u0648\u0631\u0628\u06cc\u0646\u060c \u0627\u0632 <code>FileProvider<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0628\u062a\u062f\u0627 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0645\u0648\u0642\u062a \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val imageFile = File.createTempFile(\n    \"business_photo_\",\n    \".jpg\",\n    context.cacheDir\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u062f\u0627\u062e\u0644 Cache \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0645\u0648\u0642\u062a\u06cc \u0628\u0648\u062f\u0646\u0634 \u0645\u0647\u0645\u0647\u060c \u0686\u0648\u0646 \u0647\u0646\u0648\u0632 \u062a\u0635\u0648\u06cc\u0631 \u0646\u0647\u0627\u06cc\u06cc \u0648 \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0628\u0627 FileProvider \u06cc\u06a9 Uri \u0627\u0645\u0646 \u0628\u0631\u0627\u06cc \u0627\u0648\u0646 \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val cameraImageUri = FileProvider.getUriForFile(\n    context,\n    \"${context.packageName}.fileprovider\",\n    imageFile\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>FileProvider<\/code> \u0628\u0647 \u062c\u0627\u06cc \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u0646\u0627\u0627\u0645\u0646 <code>file:\/\/<\/code>\u060c \u06cc\u06a9 <code>content:\/\/ Uri<\/code> \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0645\u06cc\u0634\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0648\u0642\u062a \u0644\u0627\u0632\u0645 \u0631\u0648 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0648\u0631\u0628\u06cc\u0646 \u062f\u0627\u062f. \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Content URI \u0648 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u0645\u0648\u0642\u062a \u0631\u0648 \u0628\u0631\u0627\u06cc \u0627\u0634\u062a\u0631\u0627\u06a9 \u0627\u0645\u0646 \u0641\u0627\u06cc\u0644 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0648\u062f Provider \u0628\u0627\u06cc\u062f \u062f\u0631 Manifest \u0645\u0639\u0631\u0641\u06cc \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;provider\n    android:name=\"androidx.core.content.FileProvider\"\n    android:authorities=\"${applicationId}.fileprovider\"\n    android:exported=\"false\"\n    android:grantUriPermissions=\"true\"&gt;\n&lt;\/provider&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>exported=\"false\"<\/code> \u06cc\u0639\u0646\u06cc Provider \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0639\u0645\u0648\u0645\u06cc \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0647\u0645\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0642\u0631\u0627\u0631 \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. <code>grantUriPermissions=\"true\"<\/code> \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0648\u0642\u062a\u06cc \u0628\u0647 Uri \u0645\u0634\u062e\u0635\u200c\u0634\u062f\u0647 \u0635\u0627\u062f\u0631 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a FileProvider \u0647\u0645 \u0641\u0642\u0637 \u067e\u0648\u0634\u0647 \u0645\u062d\u062f\u0648\u062f\u06cc \u0631\u0648 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0639\u06a9\u0633\u200c\u0647\u0627 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645 \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. \u0646\u0628\u0627\u06cc\u062f \u0631\u06cc\u0634\u0647 \u062d\u0627\u0641\u0638\u0647 \u06cc\u0627 \u062a\u0645\u0627\u0645 \u067e\u0648\u0634\u0647\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0628\u0630\u0627\u0631\u06cc\u0645\u060c \u0686\u0648\u0646 \u0645\u062d\u062f\u0648\u062f\u0647\u200c\u0647\u0627\u06cc \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0648\u0633\u06cc\u0639 \u0645\u0645\u06a9\u0646\u0647 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062d\u0633\u0627\u0633 \u0631\u0648 \u0646\u0627\u062e\u0648\u0627\u0633\u062a\u0647 \u062f\u0631 \u0645\u0639\u0631\u0636 \u062f\u0633\u062a\u0631\u0633\u06cc \u0642\u0631\u0627\u0631 \u0628\u062f\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u062c\u0648\u0632 \u062f\u0648\u0631\u0628\u06cc\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627\u06cc\u062f \u0645\u062c\u0648\u0632 <code>CAMERA<\/code> \u062f\u0631 Manifest \u062a\u0639\u0631\u06cc\u0641 \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;uses-permission android:name=\"android.permission.CAMERA\" \/&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0648\u062c\u0648\u062f \u0627\u06cc\u0646 \u062e\u0637 \u0628\u0647 \u062a\u0646\u0647\u0627\u06cc\u06cc \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a. \u0627\u06af\u0647 \u0645\u062c\u0648\u0632 \u0627\u0632 \u0646\u0648\u0639 Runtime Permission \u0628\u0627\u0634\u0647\u060c \u0628\u0627\u06cc\u062f \u0647\u0646\u06af\u0627\u0645 \u0646\u06cc\u0627\u0632 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0627\u0639\u062f\u0647 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0646\u0628\u0627\u06cc\u062f \u0647\u0645\u0627\u0646 \u0644\u062d\u0638\u0647 \u0648\u0631\u0648\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u0628\u062f\u0648\u0646 \u062a\u0648\u0636\u06cc\u062d \u0645\u062c\u0648\u0632 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0628\u062e\u0648\u0627\u06cc\u0645. \u06a9\u0627\u0631\u0628\u0631 \u0627\u0628\u062a\u062f\u0627 \u0631\u0648\u06cc \u06af\u0631\u0641\u062a\u0646 \u0639\u06a9\u0633 \u0645\u06cc\u200c\u0632\u0646\u0647 \u0648 \u0628\u0639\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062c\u0648\u0632 \u0631\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u0645\u062c\u0648\u0632 \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0631\u0627\u06cc \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0644\u0627\u0632\u0645\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a Permission \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0686\u0646\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val cameraPermissionLauncher =\n    rememberLauncherForActivityResult(\n        ActivityResultContracts.RequestPermission()\n    ) { granted -&gt;\n        if (granted) {\n            cameraLauncher.launch(cameraImageUri)\n        }\n    }\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u0645\u062c\u0648\u0632 \u0635\u0627\u062f\u0631 \u0628\u0634\u0647\u060c \u062f\u0648\u0631\u0628\u06cc\u0646 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0647 \u0631\u062f \u0628\u0634\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u067e\u06cc\u0627\u0645 \u0642\u0627\u0628\u0644 \u0641\u0647\u0645\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647 \u0648 \u0647\u0645\u0686\u0646\u0627\u0646 \u06af\u0632\u06cc\u0646\u0647 \u06af\u0627\u0644\u0631\u06cc \u0631\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0630\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0647\u0631 \u062f\u0648 \u0645\u0633\u06cc\u0631 \u0628\u0627\u06cc\u062f \u0628\u0647 \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0628\u0631\u0633\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u0632 \u06af\u0627\u0644\u0631\u06cc \u06cc\u0627 \u06af\u0631\u0641\u062a\u0646 \u0639\u06a9\u0633 \u0628\u0627 \u062f\u0648\u0631\u0628\u06cc\u0646\u060c \u0646\u0628\u0627\u06cc\u062f \u062f\u0648 \u0641\u0631\u0627\u06cc\u0646\u062f \u062c\u062f\u0627 \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u06a9\u0627\u0631 \u0628\u0633\u0627\u0632\u06cc\u0645. \u0647\u0631 \u062f\u0648 Uri \u0631\u0648 \u0628\u0647 \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun onImageSelected(uri: Uri) {\n    _uiState.update {\n        it.copy(sourceImageUri = uri)\n    }\n\n    startCrop(uri)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 Uri \u0627\u0648\u0644\u06cc\u0647 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u0648 \u0641\u0631\u0627\u06cc\u0646\u062f Crop \u0631\u0648 \u0634\u0631\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 \u0627\u06cc\u0646 \u0644\u062d\u0638\u0647 \u062f\u06cc\u06af\u0647 \u0645\u0647\u0645 \u0646\u06cc\u0633\u062a \u062a\u0635\u0648\u06cc\u0631 \u0627\u0632 \u06a9\u062c\u0627 \u0627\u0648\u0645\u062f\u0647. \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc \u0641\u0642\u0637 \u0628\u0627 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0648\u0631\u0648\u062f\u06cc \u06a9\u0627\u0631 \u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0646 \u0627\u0635\u0644 \u062f\u0631 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0641\u0631\u0627\u06cc\u0646\u062f\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u06cc \u0645\u0641\u06cc\u062f\u0647:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0648\u0631\u0648\u062f\u06cc \u0631\u0648 \u0647\u0631\u0686\u0647 \u0632\u0648\u062f\u062a\u0631 \u0628\u0647 \u06cc\u06a9 \u0645\u062f\u0644 \u0645\u0634\u062a\u0631\u06a9 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0639\u06a9\u0633 \u0631\u0648 Crop \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0646\u0645\u0627\u06cc \u06a9\u0627\u0645\u0644 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0639\u06a9\u0633 \u06af\u0631\u0641\u062a\u0647\u060c \u0627\u0645\u0627 \u062c\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0639\u06a9\u0633 \u062f\u0631 \u067e\u0646\u0644 \u06cc\u06a9 \u0645\u0631\u0628\u0639 \u06a9\u0648\u0686\u06a9\u0647. \u0627\u06af\u0647 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627\u0645\u0644 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645 \u062f\u0627\u062e\u0644 \u0627\u0648\u0646 \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc\u0645\u060c \u0645\u0645\u06a9\u0646\u0647 \u0628\u062e\u0634 \u0627\u0635\u0644\u06cc \u0639\u06a9\u0633 \u062f\u06cc\u062f\u0647 \u0646\u0634\u0647 \u06cc\u0627 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0647 \u0634\u06a9\u0644 \u0646\u0627\u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u06cc\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crop \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u0645\u062d\u062f\u0648\u062f\u0647 \u0645\u0647\u0645 \u0639\u06a9\u0633 \u0631\u0648 \u0645\u0634\u062e\u0635 \u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u0644\u0648\u06af\u0648\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0646\u0633\u0628\u062a \u062b\u0627\u0628\u062a \u0645\u0631\u0628\u0639 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1 : 1\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627\u0648\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0646\u0633\u0628\u062a \u062f\u06cc\u06af\u0631\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>16 : 9\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0633\u0628\u062a Crop \u0628\u0627\u06cc\u062f \u0627\u0632 \u0645\u062d\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0628\u06cc\u0627\u062f\u060c \u0646\u0647 \u0627\u0632 \u0633\u0644\u06cc\u0642\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647. \u0627\u06af\u0647 \u0639\u06a9\u0633 \u062f\u0631 UI \u0628\u0647 \u0634\u06a9\u0644 \u062f\u0627\u06cc\u0631\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647\u060c \u0628\u0627\u0632 \u0647\u0645 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062e\u0631\u0648\u062c\u06cc Crop \u0631\u0648 \u0645\u0631\u0628\u0639 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u06cc\u0645 \u0648 \u0641\u0642\u0637 \u0647\u0646\u06af\u0627\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0627\u0648\u0646 \u0631\u0648 \u062f\u0627\u06cc\u0631\u0647\u200c\u0627\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0627\u06cc\u0644 \u0648\u0627\u0642\u0639\u06cc \u062f\u0627\u06cc\u0631\u0647\u200c\u0627\u06cc \u0646\u06cc\u0633\u062a. \u062f\u0627\u06cc\u0631\u0647 \u0641\u0642\u0637 \u0634\u06a9\u0644 \u0646\u0645\u0627\u06cc\u0634 UI\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Crop \u062c\u0632\u0648 \u06a9\u062f \u062f\u0627\u062e\u0644\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u0639\u0645\u0648\u0645\u06cc \u0648 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0639\u06a9\u0633 \u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0631\u0633\u0645\u06cc \u0648\u0627\u062d\u062f \u06a9\u0647 \u0631\u0648\u06cc \u0647\u0645\u0647 \u062f\u0633\u062a\u06af\u0627\u0647\u200c\u0647\u0627 \u0631\u0627\u0628\u0637 Crop \u06a9\u0627\u0645\u0644 \u0648 \u06cc\u06a9\u0633\u0627\u0646\u06cc \u0628\u062f\u0647\u060c \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0648\u0627\u0642\u0639\u06cc \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u062f\u0648 \u06a9\u0627\u0631 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 Crop \u0645\u0639\u062a\u0628\u0631\n\n\u06cc\u0627\n\n\u0633\u0627\u062e\u062a \u0635\u0641\u062d\u0647 Crop \u0627\u062e\u062a\u0635\u0627\u0635\u06cc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062c\u0632\u0648\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0635\u062f\u0647\u0627 \u062e\u0637 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0631\u0627\u0628\u0637 Crop \u0631\u0648 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645\u060c \u0686\u0648\u0646 \u0647\u062f\u0641 \u0645\u0627 \u0633\u0627\u062e\u062a \u0627\u0644\u06af\u0648\u0631\u06cc\u062a\u0645 \u0628\u0631\u0634 \u062a\u0635\u0648\u06cc\u0631 \u0646\u06cc\u0633\u062a. \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0645\u0647\u0645\u0647\u060c \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0628\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0645\u0627 \u0648 \u0627\u0628\u0632\u0627\u0631 Crop \u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cropLauncher.launch(\n    CropInput(\n        sourceUri = sourceUri,\n        aspectRatioX = 1f,\n        aspectRatioY = 1f\n    )\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0646\u0645\u0648\u0646\u0647 \u0645\u0641\u0647\u0648\u0645\u06cc \u0627\u0633\u062a. \u0645\u06cc\u06af\u0647 \u0627\u0628\u0632\u0627\u0631 Crop \u0628\u0627\u06cc\u062f Uri \u0627\u0648\u0644\u06cc\u0647 \u0648 \u0646\u0633\u0628\u062a \u0645\u0648\u0631\u062f\u0646\u06cc\u0627\u0632 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 Crop\u060c \u06cc\u06a9 Uri \u06cc\u0627 File \u062c\u062f\u06cc\u062f \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u200c\u06af\u06cc\u0631\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun onCropFinished(croppedUri: Uri) {\n    _uiState.update {\n        it.copy(croppedImageUri = croppedUri)\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0631\u0648\u062c\u06cc \u062f\u06cc\u06af\u0647 \u0639\u06a9\u0633 \u0627\u0635\u0644\u06cc \u0646\u06cc\u0633\u062a. \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0627\u0632 \u0645\u062d\u062f\u0648\u062f\u0647\u200c\u0627\u06cc\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0646\u0628\u0627\u06cc\u062f \u0639\u06a9\u0633 \u0627\u0635\u0644\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0639\u06a9\u0633 \u0627\u0632 \u06af\u0627\u0644\u0631\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u0634\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u062a\u0644\u0627\u0634 \u06a9\u0646\u06cc\u0645 \u0647\u0645\u0648\u0646 \u0641\u0627\u06cc\u0644 \u0627\u0635\u0644\u06cc \u0631\u0648 Crop \u06cc\u0627 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u06a9\u0646\u06cc\u0645. \u0627\u0648\u0644\u0627\u064b Uri \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0642\u0627\u0628\u0644 \u0646\u0648\u0634\u062a\u0646 \u0646\u0628\u0627\u0634\u0647. \u062f\u0648\u0645\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0646 \u0641\u0627\u06cc\u0644 \u0627\u0635\u0644\u06cc \u06af\u0627\u0644\u0631\u06cc \u0631\u0641\u062a\u0627\u0631 \u062e\u0637\u0631\u0646\u0627\u06a9\u06cc\u0647\u061b \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u062e\u0648\u0627\u0633\u062a\u0647 \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u0627\u0632 \u0639\u06a9\u0633 \u0631\u0648 \u062f\u0627\u062e\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0634\u062e\u0635\u06cc \u062e\u0648\u062f\u0634 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 Crop \u0628\u0627\u06cc\u062f \u0647\u0645\u06cc\u0634\u0647 \u062e\u0631\u0648\u062c\u06cc \u062c\u062f\u0627 \u0628\u0633\u0627\u0632\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Original Uri\n     \u2193\nCrop\n     \u2193\nNew Temporary File\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0627\u06cc\u0644 \u0627\u0635\u0644\u06cc \u0641\u0642\u0637 \u062e\u0648\u0627\u0646\u062f\u0647 \u0645\u06cc\u0634\u0647. \u062a\u0645\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0648\u06cc \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0645\u0648\u0642\u062a \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Crop \u0648 Compress \u062f\u0648 \u06a9\u0627\u0631 \u0645\u062a\u0641\u0627\u0648\u062a\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc Crop \u0648 Compress \u0628\u0627 \u0647\u0645 \u0627\u0634\u062a\u0628\u0627\u0647 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0646\u060c \u0627\u0645\u0627 \u0647\u062f\u0641 \u0627\u0648\u0646\u200c\u0647\u0627 \u0641\u0631\u0642 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crop \u0628\u062e\u0634\u06cc \u0627\u0632 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0639\u06a9\u0633 \u06a9\u0627\u0645\u0644 \u0641\u0631\u0648\u0634\u06af\u0627\u0647\n        \u2193\n\u0641\u0642\u0637 \u0644\u0648\u06af\u0648 \u06cc\u0627 \u0645\u062d\u062f\u0648\u062f\u0647 \u0627\u0635\u0644\u06cc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Compress \u062d\u062c\u0645 \u0641\u0627\u06cc\u0644 \u0631\u0648 \u06a9\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0641\u0627\u06cc\u0644 \u06f6 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a\u06cc\n        \u2193\n\u0641\u0627\u06cc\u0644 \u06f3\u06f0\u06f0 \u06a9\u06cc\u0644\u0648\u0628\u0627\u06cc\u062a\u06cc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Resize \u0647\u0645 \u0627\u0628\u0639\u0627\u062f \u067e\u06cc\u06a9\u0633\u0644\u06cc \u0631\u0648 \u06a9\u0627\u0647\u0634 \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>4000 \u00d7 4000\n      \u2193\n1080 \u00d7 1080\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9 \u0641\u0631\u0627\u06cc\u0646\u062f \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0647\u0631 \u0633\u0647 \u0645\u0631\u062d\u0644\u0647 \u0631\u0648 \u062f\u0631 \u0646\u0638\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Crop \u2192 Resize \u2192 Compress\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u0641\u0642\u0637 Compress \u06a9\u0646\u06cc\u0645 \u0627\u0645\u0627 \u0627\u0628\u0639\u0627\u062f \u062a\u0635\u0648\u06cc\u0631 \u0647\u0645\u0686\u0646\u0627\u0646 \u06f6\u06f0\u06f0\u06f0 \u067e\u06cc\u06a9\u0633\u0644 \u0628\u0627\u0634\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u0641\u0627\u06cc\u0644 \u0647\u0646\u0648\u0632 \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0628\u0632\u0631\u06af \u0628\u0645\u0648\u0646\u0647 \u0648 \u067e\u0631\u062f\u0627\u0632\u0634 \u062d\u0627\u0641\u0638\u0647 \u0647\u0645 \u0633\u0646\u06af\u06cc\u0646 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0642\u0628\u0644 \u0627\u0632 Upload \u0639\u06a9\u0633 \u0631\u0648 \u06a9\u0648\u0686\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648\u0631\u0628\u06cc\u0646\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0639\u06a9\u0633\u200c\u0647\u0627\u06cc\u06cc \u0628\u0627 \u0627\u0628\u0639\u0627\u062f \u0648 \u062d\u062c\u0645 \u0628\u0633\u06cc\u0627\u0631 \u0628\u0627\u0644\u0627 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0646. \u0627\u0645\u0627 \u062a\u0635\u0648\u06cc\u0631 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0634\u0627\u06cc\u062f \u0646\u0647\u0627\u06cc\u062a\u0627\u064b \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u062f\u0648\u062f\u0647 \u0686\u0646\u062f\u0635\u062f \u067e\u06cc\u06a9\u0633\u0644\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u0627\u0631\u0633\u0627\u0644 \u0639\u06a9\u0633 \u06f8 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a\u06cc \u0628\u0631\u0627\u06cc \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u06cc \u0641\u0642\u0637 \u0632\u0645\u0627\u0646 \u0648 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0647\u062f\u0631 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0634\u0631\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0642\u0628\u0644 \u0627\u0632 Upload \u0686\u0646\u062f \u0641\u0627\u06cc\u062f\u0647 \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0645\u0635\u0631\u0641 \u06a9\u0645\u062a\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\n\u0622\u067e\u0644\u0648\u062f \u0633\u0631\u06cc\u0639\u200c\u062a\u0631\n\u0641\u0634\u0627\u0631 \u06a9\u0645\u062a\u0631 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631\n\u0641\u0636\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0645\u062a\u0631\n\u0646\u0645\u0627\u06cc\u0634 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631 \u0639\u06a9\u0633 \u062f\u0631 \u062f\u0641\u0639\u0627\u062a \u0628\u0639\u062f\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0635\u0631\u0641\u0627\u064b \u06a9\u06cc\u0641\u06cc\u062a \u0631\u0648 \u062a\u0627 \u062d\u062f \u0632\u06cc\u0627\u062f\u06cc \u067e\u0627\u06cc\u06cc\u0646 \u0628\u06cc\u0627\u0631\u06cc\u0645. \u0647\u062f\u0641 Compress \u0646\u0627\u0628\u0648\u062f \u06a9\u0631\u062f\u0646 \u0639\u06a9\u0633 \u0646\u06cc\u0633\u062a\u061b \u0647\u062f\u0641 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646 \u062a\u0639\u0627\u062f\u0644 \u0628\u06cc\u0646 \u06a9\u06cc\u0641\u06cc\u062a \u0628\u0635\u0631\u06cc \u0648 \u062d\u062c\u0645 \u0641\u0627\u06cc\u0644\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0644\u0648\u06af\u0648 \u06cc\u0627 \u062a\u0635\u0648\u06cc\u0631 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0645\u062b\u0644\u0627\u064b \u062e\u0631\u0648\u062c\u06cc\u200c\u0627\u06cc \u0628\u0627 \u0636\u0644\u0639 \u062d\u062f\u0627\u06a9\u062b\u0631 \u06f1\u06f0\u06f8\u06f0 \u067e\u06cc\u06a9\u0633\u0644 \u0628\u0633\u0627\u0632\u06cc\u0645. \u0639\u062f\u062f \u062f\u0642\u06cc\u0642 \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u0633\u0627\u0633 \u0645\u062d\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0648 \u0633\u06cc\u0627\u0633\u062a Backend \u062a\u0639\u06cc\u06cc\u0646 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0648\u0627\u0646\u062f\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0627\u0632 Uri<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u0639\u06a9\u0633\u060c \u0628\u0627\u06cc\u062f \u0645\u062d\u062a\u0648\u0627\u06cc Uri \u0631\u0648 \u0628\u062e\u0648\u0646\u06cc\u0645. \u0646\u06a9\u062a\u0647 \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 <code>ContentResolver<\/code> \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val inputStream =\n    context.contentResolver.openInputStream(uri)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>openInputStream<\/code> \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u0632 \u0645\u062d\u062a\u0648\u0627 \u0645\u06cc\u062f\u0647. \u0627\u0632 \u0627\u06cc\u0646\u062c\u0627 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 Decode \u06a9\u0646\u06cc\u0645 \u06cc\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc \u0627\u0648\u0646 \u0631\u0648 \u062f\u0627\u062e\u0644 \u0641\u0627\u06cc\u0644 \u0645\u0648\u0642\u062a \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f \u0641\u0631\u0636 \u06a9\u0646\u06cc\u0645 \u0647\u0631 Uri \u06cc\u06a9 File \u0645\u0633\u062a\u0642\u06cc\u0645\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u06a9\u062f\u06cc \u0645\u062b\u0644 \u0627\u06cc\u0646 \u062f\u0631 \u0647\u0645\u0647 \u0634\u0631\u0627\u06cc\u0637 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0646\u06cc\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>File(uri.path!!)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>uri.path<\/code> \u0645\u0645\u06a9\u0646\u0647 \u0641\u0642\u0637 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0634\u0646\u0627\u0633\u0647 \u062f\u0627\u062e\u0644\u06cc Content Provider \u0628\u0627\u0634\u0647\u060c \u0646\u0647 \u0645\u0633\u06cc\u0631 \u0648\u0627\u0642\u0639\u06cc \u0631\u0648\u06cc \u062d\u0627\u0641\u0638\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resize \u0628\u0627\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 Bitmap \u0639\u0638\u06cc\u0645 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u06f8\u06f0\u06f0\u06f0 \u062f\u0631 \u06f8\u06f0\u06f0\u06f0 \u0631\u0648 \u0628\u0627 \u0627\u0646\u062f\u0627\u0632\u0647 \u06a9\u0627\u0645\u0644 \u062f\u0627\u062e\u0644 \u062d\u0627\u0641\u0638\u0647 Decode \u06a9\u0646\u06cc\u0645\u060c \u062d\u062a\u06cc \u0627\u06af\u0647 \u0641\u0627\u06cc\u0644 \u0641\u0634\u0631\u062f\u0647 \u0641\u0642\u0637 \u0686\u0646\u062f \u0645\u06af\u0627\u0628\u0627\u06cc\u062a \u0628\u0627\u0634\u0647\u060c Bitmap \u0628\u0627\u0632\u0634\u062f\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062d\u0627\u0641\u0638\u0647 \u0628\u0633\u06cc\u0627\u0631 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0645\u0635\u0631\u0641 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u067e\u0631\u062f\u0627\u0632\u0634\u06af\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0627\u06cc\u062f \u0627\u0628\u062a\u062f\u0627 \u0627\u0628\u0639\u0627\u062f \u0639\u06a9\u0633 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f \u0646\u0633\u062e\u0647 \u06a9\u0648\u0686\u06a9\u200c\u062a\u0631\u06cc \u0631\u0648 Decode \u06a9\u0646\u0647. \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u062c\u0632\u0626\u06cc\u0627\u062a \u06a9\u0627\u0645\u0644 \u0627\u0644\u06af\u0648\u0631\u06cc\u062a\u0645 \u0631\u0648 \u0627\u06cc\u0646\u062c\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645\u060c \u0627\u0645\u0627 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0645\u0646\u0627\u0633\u0628 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0686\u0646\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val resizedBitmap = imageProcessor.decodeAndResize(\n    uri = croppedUri,\n    maxWidth = 1080,\n    maxHeight = 1080\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>decodeAndResize<\/code> \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0641\u0631\u0636\u06cc \u0627\u0632 \u06a9\u0644\u0627\u0633 <code>ImageProcessor<\/code> \u0627\u0633\u062a. \u0648\u0638\u06cc\u0641\u0647 \u0627\u0648\u0646 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u062f\u0648\u0646 \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u0646\u0633\u062e\u0647 \u063a\u0648\u0644\u200c\u067e\u06cc\u06a9\u0631\u060c Bitmap \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0646\u06cc\u0627\u0632 Upload \u0628\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u067e\u0631\u062f\u0627\u0632\u0634 \u0646\u0628\u0627\u06cc\u062f \u0631\u0648\u06cc Thread \u0627\u0635\u0644\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u060c \u0686\u0648\u0646 Decode \u0648 Compress \u0645\u0645\u06a9\u0646\u0647 \u0632\u0645\u0627\u0646\u200c\u0628\u0631 \u0628\u0627\u0634\u0646. \u0645\u0633\u062a\u0646\u062f\u0627\u062a Android \u0647\u0645 \u0627\u0634\u0627\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u06a9\u0647 <code>Bitmap.compress()<\/code> \u0645\u0645\u06a9\u0646\u0647 \u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647 \u0637\u0648\u0644 \u0628\u06a9\u0634\u0647 \u0648 \u0628\u0627\u06cc\u062f \u062e\u0627\u0631\u062c \u0627\u0632 Thread \u0627\u0635\u0644\u06cc \u0627\u062c\u0631\u0627 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0641\u0634\u0631\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062a\u0635\u0648\u06cc\u0631<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 Resize\u060c \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0645\u0648\u0642\u062a \u0641\u0634\u0631\u062f\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>outputFile.outputStream().use { stream -&gt;\n    resizedBitmap.compress(\n        Bitmap.CompressFormat.JPEG,\n        82,\n        stream\n    )\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Bitmap.CompressFormat.JPEG<\/code> \u0641\u0631\u0645\u062a \u062e\u0631\u0648\u062c\u06cc \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0639\u062f\u062f <code>82<\/code> \u06a9\u06cc\u0641\u06cc\u062a \u062a\u0642\u0631\u06cc\u0628\u06cc JPEG \u0627\u0633\u062a. \u062f\u0631 JPEG\u060c \u0645\u0642\u062f\u0627\u0631 \u06a9\u0645\u062a\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0641\u0627\u06cc\u0644 \u06a9\u0648\u0686\u06a9\u200c\u062a\u0631\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u0647 \u0648 \u0645\u0642\u062f\u0627\u0631 \u0646\u0632\u062f\u06cc\u06a9 \u06f1\u06f0\u06f0 \u06a9\u06cc\u0641\u06cc\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u062d\u0641\u0638 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u0642\u062f\u0627\u0631 \u06a9\u06cc\u0641\u06cc\u062a \u0628\u0627\u06cc\u062f \u0628\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0648\u0627\u0642\u0639\u06cc \u0631\u0648\u06cc \u0639\u06a9\u0633\u200c\u0647\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0634\u0647\u060c \u0646\u0647 \u0628\u0631\u0627\u0633\u0627\u0633 \u06cc\u06a9 \u0639\u062f\u062f \u062c\u0627\u062f\u0648\u06cc\u06cc \u062b\u0627\u0628\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>use<\/code> \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 OutputStream \u0628\u0639\u062f \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 \u06a9\u0627\u0631\u060c \u062d\u062a\u06cc \u062f\u0631 \u0635\u0648\u0631\u062a \u0631\u062e \u062f\u0627\u062f\u0646 \u062e\u0637\u0627\u060c \u0628\u0633\u062a\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0639\u06a9\u0633\u200c\u0647\u0627\u06cc \u0645\u0639\u0645\u0648\u0644\u06cc \u0641\u0631\u0648\u0634\u06af\u0627\u0647\u060c JPEG \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0646\u0627\u0633\u0628 \u0628\u0627\u0634\u0647. \u0627\u0645\u0627 \u0627\u06af\u0647 \u0644\u0648\u06af\u0648 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0634\u0641\u0627\u0641 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c JPEG \u0634\u0641\u0627\u0641\u06cc\u062a \u0631\u0648 \u0646\u06af\u0647 \u0646\u0645\u06cc\u200c\u062f\u0627\u0631\u0647. \u062f\u0631 \u0686\u0646\u06cc\u0646 \u062d\u0627\u0644\u062a\u06cc PNG \u06cc\u0627 WebP \u0645\u0646\u0627\u0633\u0628\u200c\u062a\u0631\u0647. Android \u0628\u0631\u0627\u06cc WebP \u062d\u0627\u0644\u062a\u200c\u0647\u0627\u06cc Lossy \u0648 Lossless \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u062f\u0627\u0631\u0647 \u0648 \u062d\u0627\u0644\u062a \u0642\u062f\u06cc\u0645\u06cc \u0639\u0645\u0648\u0645\u06cc <code>WEBP<\/code> \u0627\u0632 API 30 \u0628\u0647 \u0628\u0639\u062f \u0628\u0647 \u0646\u0641\u0639 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0631\u0648\u0634\u0646\u200c\u062a\u0631 \u06a9\u0646\u0627\u0631 \u06af\u0630\u0627\u0634\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0627\u0646\u062a\u062e\u0627\u0628 \u0641\u0631\u0645\u062a \u0628\u0627\u06cc\u062f \u0628\u0647 \u0646\u0648\u0639 \u062a\u0635\u0648\u06cc\u0631 \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0639\u06a9\u0633 \u0648\u0627\u0642\u0639\u06cc \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u2192 JPEG \u06cc\u0627 WebP Lossy\n\n\u0644\u0648\u06af\u0648\u06cc \u062f\u0627\u0631\u0627\u06cc \u0634\u0641\u0627\u0641\u06cc\u062a \u2192 PNG \u06cc\u0627 WebP Lossless\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u06a9\u06cc\u0641\u06cc\u062a \u0648 \u0627\u0628\u0639\u0627\u062f \u0631\u0648 Backend \u0647\u0645 \u0628\u0627\u06cc\u062f \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0634\u0631\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0627\u062e\u0644 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0647\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0633\u0631\u0648\u0631 \u0646\u0628\u0627\u06cc\u062f \u06a9\u0648\u0631\u06a9\u0648\u0631\u0627\u0646\u0647 \u0628\u0647 \u0641\u0627\u06cc\u0644 \u0627\u0631\u0633\u0627\u0644\u06cc \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Backend \u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0641\u0627\u06cc\u0644 \u0648\u0627\u0642\u0639\u0627\u064b \u062a\u0635\u0648\u06cc\u0631 \u0628\u0627\u0634\u0647\n\u0641\u0631\u0645\u062a \u0645\u062c\u0627\u0632 \u0628\u0627\u0634\u0647\n\u062d\u062c\u0645 \u0627\u0632 \u062d\u062f \u0645\u0634\u062e\u0635 \u0628\u06cc\u0634\u062a\u0631 \u0646\u0628\u0627\u0634\u0647\n\u0627\u0628\u0639\u0627\u062f \u063a\u06cc\u0631\u0639\u0627\u062f\u06cc \u0646\u0628\u0627\u0634\u0646\n\u0641\u0627\u06cc\u0644 \u062e\u0631\u0627\u0628 \u06cc\u0627 \u0645\u062e\u0631\u0628 \u0646\u0628\u0627\u0634\u0647\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0631\u0627\u06cc \u0633\u0631\u0639\u062a \u0648 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc\u0647. \u06a9\u0646\u062a\u0631\u0644 \u0646\u0647\u0627\u06cc\u06cc \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u0628\u0631\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a \u0648 \u062d\u0641\u0638 \u0633\u0644\u0627\u0645\u062a \u0633\u06cc\u0633\u062a\u0645 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0648\u0646 \u0627\u0635\u0644\u06cc \u06a9\u0647 \u062f\u0631 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0641\u0631\u0645 \u062f\u0627\u0634\u062a\u06cc\u0645\u060c \u0627\u06cc\u0646\u062c\u0627 \u0647\u0645 \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0642\u0628\u0644 \u0627\u0632 \u0627\u0631\u0633\u0627\u0644 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647\u061b \u0633\u0631\u0648\u0631 \u0642\u0628\u0644 \u0627\u0632 \u0627\u0639\u062a\u0645\u0627\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">State \u0641\u0631\u0627\u06cc\u0646\u062f \u0639\u06a9\u0633<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0622\u067e\u0644\u0648\u062f \u0639\u06a9\u0633 \u0641\u0642\u0637 Loading \u0648 Success \u0646\u06cc\u0633\u062a. \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0647\u0646\u0648\u0632 \u0639\u06a9\u0633\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u062f\u0631 \u062d\u0627\u0644 Crop \u0628\u0627\u0634\u0647\u060c \u0641\u0627\u06cc\u0644 \u062f\u0631 \u062d\u0627\u0644 \u067e\u0631\u062f\u0627\u0632\u0634 \u0628\u0627\u0634\u0647 \u06cc\u0627 Upload \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9 State \u0645\u0646\u0627\u0633\u0628 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data class BusinessImageUiState(\n    val previewUri: Uri? = null,\n    val isProcessing: Boolean = false,\n    val uploadProgress: Int? = null,\n    val isUploaded: Boolean = false,\n    val errorMessage: String? = null\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>previewUri<\/code> \u062a\u0635\u0648\u06cc\u0631\u06cc\u0647 \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 Upload \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. <code>isProcessing<\/code> \u0628\u0631\u0627\u06cc Crop\u060c Resize \u06cc\u0627 Compress \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. <code>uploadProgress<\/code> \u062f\u0631\u0635\u062f \u067e\u06cc\u0634\u0631\u0641\u062a Upload \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. <code>isUploaded<\/code> \u06cc\u0639\u0646\u06cc \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0648 <code>errorMessage<\/code> \u0647\u0645 \u062e\u0637\u0627\u06cc \u0641\u0639\u0644\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 <code>data class<\/code> \u0627\u0632 \u0686\u0646\u062f State \u062c\u062f\u0627 \u0645\u0646\u0627\u0633\u0628\u200c\u062a\u0631\u0647\u060c \u0686\u0648\u0646 \u0645\u0645\u06a9\u0646\u0647 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u067e\u06cc\u0634\u200c\u0646\u0645\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 Upload \u0647\u0645 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>previewUri \u2260 null\nisProcessing = false\nuploadProgress = 45\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0622\u0645\u0627\u062f\u0647 \u0648 \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0627\u0633\u062a \u0648 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u06f4\u06f5 \u062f\u0631\u0635\u062f \u0641\u0627\u06cc\u0644 \u0622\u067e\u0644\u0648\u062f \u0634\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0631\u062f\u0627\u0632\u0634 \u0639\u06a9\u0633 \u062f\u0631 ViewModel \u06cc\u0627 Repository\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0646\u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0634 \u0628\u0627 Bitmap\u060c InputStream \u0648 \u0641\u0627\u06cc\u0644 \u0645\u0648\u0642\u062a \u06a9\u0627\u0631 \u06a9\u0646\u0647. \u0628\u0647\u062a\u0631\u0647 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0645\u062e\u0635\u0648\u0635 \u067e\u0631\u062f\u0627\u0632\u0634 \u062a\u0635\u0648\u06cc\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface ImageProcessor {\n    suspend fun prepareForUpload(uri: Uri): File\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 Interface \u0645\u06cc\u06af\u0647 \u0647\u0631 \u067e\u0631\u062f\u0627\u0632\u0634\u06af\u0631\u06cc \u06a9\u0647 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0628\u0634\u0647\u060c \u06cc\u06a9 Uri \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u06cc\u06a9 File \u0622\u0645\u0627\u062f\u0647 Upload \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c\u0632\u0626\u06cc\u0627\u062a \u062f\u0627\u062e\u0644 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u067e\u0646\u0647\u0627\u0646 \u0645\u06cc\u0634\u0646:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u062e\u0648\u0627\u0646\u062f\u0646 Uri\n\u0627\u0635\u0644\u0627\u062d \u062c\u0647\u062a \u062a\u0635\u0648\u06cc\u0631\nResize\nCompress\n\u0633\u0627\u062e\u062a \u0641\u0627\u06cc\u0644 \u0645\u0648\u0642\u062a\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0641\u0642\u0637 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val uploadFile =\n    imageProcessor.prepareForUpload(croppedUri)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0686\u0646\u062f \u0645\u0632\u06cc\u062a \u062f\u0627\u0631\u0647. ViewModel \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0645\u06cc\u200c\u0645\u0648\u0646\u0647\u060c \u067e\u0631\u062f\u0627\u0632\u0634 \u062a\u0635\u0648\u06cc\u0631 \u0645\u0633\u062a\u0642\u0644 \u062a\u0633\u062a \u0645\u06cc\u0634\u0647 \u0648 \u0627\u06af\u0647 \u0628\u0639\u062f\u0627\u064b \u0641\u0631\u0645\u062a \u06cc\u0627 \u0627\u0646\u062f\u0627\u0632\u0647 \u062e\u0631\u0648\u062c\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u060c \u0645\u062c\u0628\u0648\u0631 \u0646\u06cc\u0633\u062a\u06cc\u0645 \u0645\u0646\u0637\u0642 \u0635\u0641\u062d\u0647 \u0631\u0648 \u062f\u0633\u062a\u200c\u06a9\u0627\u0631\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u062c\u0647\u062a \u0639\u06a9\u0633 \u0645\u0645\u06a9\u0646\u0647 \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0627\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u0636\u06cc \u062f\u0648\u0631\u0628\u06cc\u0646\u200c\u0647\u0627 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u0647\u0645\u06cc\u0634\u0647 \u0628\u0627 \u067e\u06cc\u06a9\u0633\u0644\u200c\u0647\u0627\u06cc \u0686\u0631\u062e\u06cc\u062f\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0646. \u0628\u0647 \u062c\u0627\u06cc \u0627\u0648\u0646\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u0647\u062a \u0639\u06a9\u0633 \u0631\u0648 \u062f\u0631 Metadata \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0646. \u0627\u06af\u0647 \u067e\u0631\u062f\u0627\u0632\u0634\u06af\u0631 \u0627\u06cc\u0646 Metadata \u0631\u0648 \u0646\u0627\u062f\u06cc\u062f\u0647 \u0628\u06af\u06cc\u0631\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u062a\u0635\u0648\u06cc\u0631\u06cc \u06a9\u0647 \u062f\u0631 \u06af\u0627\u0644\u0631\u06cc \u062f\u0631\u0633\u062a \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647\u060c \u0628\u0639\u062f \u0627\u0632 Decode \u06cc\u0627 Upload \u0686\u0631\u062e\u06cc\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 <code>ImageProcessor<\/code> \u0628\u0627\u06cc\u062f \u062c\u0647\u062a \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u0647\u0645 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val correctedBitmap =\n    imageOrientation.correct(bitmap, uri)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0645\u0641\u0647\u0648\u0645\u06cc \u0627\u0633\u062a \u0648 \u0645\u06cc\u06af\u0647 \u0642\u0628\u0644 \u0627\u0632 Crop \u0646\u0647\u0627\u06cc\u06cc \u06cc\u0627 Compress \u0628\u0627\u06cc\u062f \u062c\u0647\u062a \u0648\u0627\u0642\u0639\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0627\u0639\u0645\u0627\u0644 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0634\u06a9\u0644 \u062c\u0647\u062a \u062a\u0635\u0648\u06cc\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0632\u0645\u0627\u0646\u06cc \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0628\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0631\u0648\u06cc \u062f\u0633\u062a\u06af\u0627\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0647\u0645\u0647\u200c\u0686\u06cc\u0632 \u062f\u0631\u0633\u062a \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u0631\u0648\u06cc \u0628\u0631\u0646\u062f \u062f\u06cc\u06af\u0631\u06cc \u0639\u06a9\u0633 \u06f9\u06f0 \u062f\u0631\u062c\u0647 \u0686\u0631\u062e\u06cc\u062f\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0633\u0627\u062e\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a Upload<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u062e\u0644\u0627\u0641 \u0641\u0631\u0645 \u0645\u062a\u0646\u06cc\u060c \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0627\u062e\u0644 JSON \u0645\u0639\u0645\u0648\u0644\u06cc \u0627\u0631\u0633\u0627\u0644 \u0646\u0645\u06cc\u0634\u0647. \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0641\u0627\u06cc\u0644 \u0647\u0645\u0631\u0627\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP \u0627\u0632 <code>multipart\/form-data<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Retrofit \u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 Endpoint \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Multipart\n@POST(\"business\/profile\/image\")\nsuspend fun uploadBusinessImage(\n    @Part image: MultipartBody.Part\n): UploadImageResponse\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>@Multipart<\/code> \u0645\u06cc\u06af\u0647 \u0628\u062f\u0646\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0632 \u0686\u0646\u062f \u0628\u062e\u0634 \u062a\u0634\u06a9\u06cc\u0644 \u0645\u06cc\u0634\u0647. \u062d\u062a\u06cc \u0627\u06af\u0647 \u0641\u0639\u0644\u0627\u064b \u0641\u0642\u0637 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645\u060c \u0647\u0631 \u0641\u0627\u06cc\u0644 \u06cc\u0627 \u0641\u06cc\u0644\u062f \u0645\u062a\u0646\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06cc\u06a9 Part \u062c\u062f\u0627 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>@Part image<\/code> \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u062f\u0627\u062e\u0644 \u06cc\u06a9\u06cc \u0627\u0632 \u0647\u0645\u06cc\u0646 \u0628\u062e\u0634\u200c\u0647\u0627 \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Multipart \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0641\u0627\u06cc\u0644 \u0648 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u0647\u0645\u0631\u0627\u0647 \u0627\u0648\u0646 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0648 OkHttp \u0633\u0627\u062e\u062a\u0627\u0631 <code>MultipartBody<\/code> \u0648 <code>MultipartBody.Part<\/code> \u0631\u0648 \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646 \u0646\u0648\u0639 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647. (<a href=\"https:\/\/square.github.io\/okhttp\/3.x\/okhttp\/okhttp3\/MultipartBody.html?utm_source=chatgpt.com\">Square Open Source<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0628\u062f\u06cc\u0644 File \u0628\u0647 Multipart<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0627\u06cc\u0644 \u0641\u0634\u0631\u062f\u0647\u200c\u0634\u062f\u0647 \u0628\u0627\u06cc\u062f \u0628\u0647 <code>RequestBody<\/code> \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val requestBody = file.asRequestBody(\n    \"image\/jpeg\".toMediaType()\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>image\/jpeg<\/code> \u0646\u0648\u0639 \u0645\u062d\u062a\u0648\u0627\u06cc \u0641\u0627\u06cc\u0644 \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0633\u0631\u0648\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 MIME Type \u0645\u062a\u0648\u062c\u0647 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0686\u0647 \u0646\u0648\u0639 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0648\u0646 \u0631\u0648 \u062f\u0627\u062e\u0644 Multipart \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val imagePart = MultipartBody.Part.createFormData(\n    name = \"image\",\n    filename = file.name,\n    body = requestBody\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>name = \"image\"<\/code> \u0628\u0627\u06cc\u062f \u0628\u0627 \u0646\u0627\u0645\u06cc \u06a9\u0647 Backend \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>filename<\/code> \u0646\u0627\u0645 \u0641\u0627\u06cc\u0644 \u0627\u0631\u0633\u0627\u0644\u06cc\u0647 \u0648 <code>body<\/code> \u0645\u062d\u062a\u0648\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0627\u0648\u0646 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 Repository \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0641\u0627\u06cc\u0644 \u0631\u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val response = api.uploadBusinessImage(imagePart)\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0627\u0633\u062e Upload \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0645\u0648\u0641\u0642 \u0628\u0648\u062f \u0628\u0627\u0634\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 Upload\u060c \u0633\u0631\u0648\u0631 \u0628\u0647\u062a\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u0633\u062e\u0647 \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data class UploadImageResponse(\n    val imageUrl: String,\n    val updatedAt: String\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>imageUrl<\/code> \u0622\u062f\u0631\u0633\u06cc\u0647 \u06a9\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0628\u0647 \u0628\u0639\u062f \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0639\u06a9\u0633 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. <code>updatedAt<\/code> \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u06cc\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a Cache \u06a9\u0627\u0631\u0628\u0631\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u0627\u0633\u062e\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0627\u062e\u0644 Room \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>businessDao.updateImageUrl(\n    imageUrl = response.imageUrl\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u060c \u0622\u062f\u0631\u0633 \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u0646\u0647\u0627\u06cc\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647 \u0627\u0644\u06af\u0648\u06cc Offline First \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Upload API\n     \u2193\nImage URL\n     \u2193\nRoom\n     \u2193\nFlow\n     \u2193\nDashboard \u0648 Profile\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0646\u0628\u0627\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 Upload\u060c \u062a\u0635\u0648\u06cc\u0631 \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062f\u0633\u062a\u06cc \u0639\u0648\u0636 \u06a9\u0646\u0647. \u0641\u0642\u0637 \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u062f\u0627\u062f\u0647 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u0634\u0647 \u0648 \u0628\u0642\u06cc\u0647 UI \u0628\u0647 \u0627\u0648\u0646 \u0648\u0627\u06a9\u0646\u0634 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u0639\u06a9\u0633 \u0642\u0628\u0644 \u0627\u0632 Upload<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0642\u0628\u0644 \u0627\u0632 \u0627\u0631\u0633\u0627\u0644\u060c \u0646\u062a\u06cc\u062c\u0647 Crop \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AsyncImage(\n    model = uiState.previewUri,\n    contentDescription = \"\u062a\u0635\u0648\u06cc\u0631 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\"\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u067e\u06cc\u0634\u200c\u0646\u0645\u0627\u06cc\u0634 \u0627\u0632 Uri \u0645\u062d\u0644\u06cc \u0645\u06cc\u0627\u062f\u060c \u0646\u0647 \u0627\u0632 \u0633\u0631\u0648\u0631. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0639\u062f \u0627\u0632 Crop \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u062f\u0648 \u0641\u0627\u06cc\u062f\u0647 \u062f\u0627\u0631\u0647. \u0627\u0648\u0644 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0637\u0645\u0626\u0646 \u0645\u06cc\u0634\u0647 \u0645\u062d\u062f\u0648\u062f\u0647 \u0639\u06a9\u0633 \u0631\u0648 \u062f\u0631\u0633\u062a \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647. \u062f\u0648\u0645 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062d\u062a\u06cc \u0642\u0628\u0644 \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 Upload\u060c \u0628\u0627\u0632\u062e\u0648\u0631\u062f \u0628\u0635\u0631\u06cc \u0645\u0646\u0627\u0633\u0628\u06cc \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0627\u06cc\u062f \u062a\u0641\u0627\u0648\u062a \u067e\u06cc\u0634\u200c\u0646\u0645\u0627\u06cc\u0634 \u0648 \u0639\u06a9\u0633 \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0631\u0648 \u0631\u0648\u0634\u0646 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Preview:\n\u0641\u0627\u06cc\u0644 \u0645\u062d\u0644\u06cc \u0648 \u0647\u0646\u0648\u0632 \u0630\u062e\u06cc\u0631\u0647\u200c\u0646\u0634\u062f\u0647\n\nUploaded Image:\n\u0646\u0633\u062e\u0647 \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 Upload \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0637\u0648\u0631\u06cc \u0631\u0641\u062a\u0627\u0631 \u06a9\u0646\u0647 \u06a9\u0647 \u0627\u0646\u06af\u0627\u0631 \u0639\u06a9\u0633 \u0648\u0627\u0642\u0639\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u067e\u0644\u0648\u062f \u062e\u0648\u062f\u06a9\u0627\u0631 \u06cc\u0627 \u062f\u06a9\u0645\u0647 \u062c\u062f\u0627\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 Crop \u062f\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0627\u0631\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0631\u0648\u0634 \u0627\u0648\u0644\u060c Upload \u0641\u0648\u0631\u0627\u064b \u0634\u0631\u0648\u0639 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Select \u2192 Crop \u2192 Compress \u2192 Upload\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0631\u0648\u0634 \u062f\u0648\u0645\u060c \u0627\u0628\u062a\u062f\u0627 \u067e\u06cc\u0634\u200c\u0646\u0645\u0627\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0639\u06a9\u0633 \u0645\u06cc\u200c\u0632\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Select \u2192 Crop \u2192 Preview \u2192 Save \u2192 Upload\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0639\u06a9\u0633 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u0631\u0648\u0634 \u062f\u0648\u0645 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06a9\u0646\u062a\u0631\u0644 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u062f\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0628\u0639\u062f \u0627\u0632 Crop \u0645\u062a\u0648\u062c\u0647 \u0628\u0634\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0633\u062a \u0648 \u0628\u062e\u0648\u0627\u062f \u0639\u06a9\u0633 \u062f\u06cc\u06af\u0631\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 \u062f\u06a9\u0645\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Button(\n    enabled = uiState.previewUri != null &amp;&amp;\n        !uiState.isProcessing,\n    onClick = viewModel::uploadImage\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u06a9\u0645\u0647 \u0641\u0642\u0637 \u0648\u0642\u062a\u06cc \u0641\u0639\u0627\u0644 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0622\u0645\u0627\u062f\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u06cc\u06af\u0631\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0646\u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0639\u0645\u0644\u06cc\u0627\u062a \u06a9\u0627\u0645\u0644 \u062f\u0627\u062e\u0644 ViewModel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0627\u0628\u062a\u062f\u0627 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun prepareImage(uri: Uri) {\n    viewModelScope.launch {\n        _uiState.update {\n            it.copy(\n                isProcessing = true,\n                errorMessage = null\n            )\n        }\n\n        try {\n            val file = imageProcessor.prepareForUpload(uri)\n            preparedFile = file\n\n            _uiState.update {\n                it.copy(\n                    previewUri = file.toUri(),\n                    isProcessing = false\n                )\n            }\n        } catch (error: Exception) {\n            showImageError(error)\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0622\u063a\u0627\u0632\u060c <code>isProcessing<\/code> \u0631\u0648\u06cc true \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u062a\u0627 \u0635\u0641\u062d\u0647 Loading \u0645\u0646\u0627\u0633\u0628 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>prepareForUpload<\/code> \u06a9\u0627\u0631\u0647\u0627\u06cc \u0633\u0646\u06af\u06cc\u0646 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647 \u0648 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0646\u0647\u0627\u06cc\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u0647. \u0641\u0627\u06cc\u0644 \u062f\u0631 ViewModel \u06cc\u0627 \u06cc\u06a9 Holder \u0645\u0648\u0642\u062a \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0647 \u0645\u06cc\u0634\u0647 \u062a\u0627 \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062f\u06a9\u0645\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0631\u0648 \u0632\u062f\u060c \u0647\u0645\u0648\u0646 \u0646\u0633\u062e\u0647 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u0648\u0641\u0642 \u0628\u0627\u0634\u0647\u060c Uri \u0641\u0627\u06cc\u0644 \u0622\u0645\u0627\u062f\u0647 \u062f\u0627\u062e\u0644 State \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u062a\u0627 Preview \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u062e\u0637\u0627\u06cc\u06cc \u0631\u062e \u0628\u062f\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 Crash \u06a9\u0646\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0641\u0627\u06cc\u0644 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u062e\u0631\u0627\u0628\u060c \u0641\u0631\u0645\u062a\u0634 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u06cc\u0627 \u062d\u0627\u0641\u0638\u0647 \u06af\u0648\u0634\u06cc \u0646\u0627\u06a9\u0627\u0641\u06cc \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Upload \u062f\u0631 Repository<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u0641\u0627\u06cc\u0644 \u0622\u0645\u0627\u062f\u0647 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>suspend fun uploadBusinessImage(file: File) {\n    val response = api.uploadBusinessImage(\n        file.toMultipartPart(\"image\")\n    )\n\n    businessDao.updateImageUrl(response.imageUrl)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627\u0628\u0639 <code>toMultipartPart<\/code> \u062c\u0632\u0626\u06cc\u0627\u062a \u0633\u0627\u062e\u062a RequestBody \u0631\u0648 \u067e\u0646\u0647\u0627\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u062f\u0648 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0647\u0645\u0627\u0647\u0646\u06af \u0645\u06cc\u200c\u06a9\u0646\u0647: \u0641\u0627\u06cc\u0644 \u0631\u0648 \u0628\u0647 API \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 \u0628\u0639\u062f \u0646\u062a\u06cc\u062c\u0647 \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 ViewModel \u0641\u0642\u0637 \u0646\u062a\u06cc\u062c\u0647 \u0645\u0647\u0645\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>viewModelScope.launch {\n    try {\n        repository.uploadBusinessImage(preparedFile)\n        onUploadSuccess()\n    } catch (error: Exception) {\n        onUploadError(error)\n    }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u062f\u0631\u0635\u062f Upload<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9 \u0645\u0645\u06a9\u0646\u0647 \u06cc\u06a9 Loading \u0633\u0627\u062f\u0647 \u06a9\u0627\u0641\u06cc \u0628\u0627\u0634\u0647. \u0627\u0645\u0627 \u0627\u06af\u0647 \u0639\u06a9\u0633\u200c\u0647\u0627 \u0628\u0632\u0631\u06af\u200c\u062a\u0631 \u0628\u0627\u0634\u0646 \u06cc\u0627 \u0633\u0631\u0639\u062a \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u067e\u0627\u06cc\u06cc\u0646 \u0628\u0627\u0634\u0647\u060c \u0646\u0645\u0627\u06cc\u0634 \u062f\u0631\u0635\u062f \u067e\u06cc\u0634\u0631\u0641\u062a \u062a\u062c\u0631\u0628\u0647 \u0628\u0647\u062a\u0631\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u062f\u0631 \u062d\u0627\u0644 \u0622\u067e\u0644\u0648\u062f: \u06f4\u06f7\u066a\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c RequestBody \u0633\u0641\u0627\u0631\u0634\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u0639\u062f\u0627\u062f \u0628\u0627\u06cc\u062a\u200c\u0647\u0627\u06cc \u0627\u0631\u0633\u0627\u0644\u200c\u0634\u062f\u0647 \u0631\u0648 \u06af\u0632\u0627\u0631\u0634 \u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>repository.uploadBusinessImage(file) { progress -&gt;\n    _uiState.update {\n        it.copy(uploadProgress = progress)\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0645\u06cc\u06af\u0647 Repository \u0647\u0646\u06af\u0627\u0645 \u0627\u0631\u0633\u0627\u0644 \u0641\u0627\u06cc\u0644\u060c \u062f\u0631\u0635\u062f \u067e\u06cc\u0634\u0631\u0641\u062a \u0631\u0648 \u0628\u0647 ViewModel \u0627\u0639\u0644\u0627\u0645 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u0627\u0648\u0644\u06cc\u0647 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0627\u06af\u0647 \u0641\u0627\u06cc\u0644 \u0642\u0628\u0644 \u0627\u0632 Upload \u0628\u0647 \u0686\u0646\u062f\u0635\u062f \u06a9\u06cc\u0644\u0648\u0628\u0627\u06cc\u062a \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0646\u0645\u0627\u06cc\u0634 \u06cc\u06a9 <code>CircularProgressIndicator<\/code> \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0641\u06cc \u0628\u0627\u0634\u0647. \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0631\u0635\u062f\u060c \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0648\u0627\u0631\u062f \u067e\u0631\u0648\u0698\u0647 \u06a9\u0646\u06cc\u0645\u061b \u0645\u06af\u0631 \u0627\u06cc\u0646\u06a9\u0647 \u0622\u067e\u0644\u0648\u062f \u0648\u0627\u0642\u0639\u0627\u064b \u0632\u0645\u0627\u0646 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u0628\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0686\u0646\u062f Upload \u0647\u0645\u200c\u0632\u0645\u0627\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0646\u06af\u0627\u0645 Upload\u060c \u062f\u06a9\u0645\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0628\u0627\u06cc\u062f \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enabled = uiState.uploadProgress == null\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0627 \u062f\u0631 State \u06cc\u06a9 \u0645\u0642\u062f\u0627\u0631 \u0631\u0648\u0634\u0646\u200c\u062a\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val isUploading: Boolean\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enabled = !uiState.isUploading\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0634\u0631\u0637 \u062c\u0644\u0648\u06cc \u0627\u0631\u0633\u0627\u0644 \u0686\u0646\u062f \u0646\u0633\u062e\u0647 \u06cc\u06a9\u0633\u0627\u0646 \u0648 \u0627\u06cc\u062c\u0627\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0648\u062f ViewModel \u0647\u0645 \u0628\u0647\u062a\u0631\u0647 \u0645\u062d\u0627\u0641\u0638 \u062f\u0627\u062e\u0644\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (_uiState.value.isUploading) return\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u062f\u06a9\u0645\u0647 \u0631\u0641\u062a\u0627\u0631 UI \u0631\u0648 \u0627\u0635\u0644\u0627\u062d \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0634\u0631\u0637 ViewModel \u062c\u0644\u0648\u06cc \u0627\u062c\u0631\u0627\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0627\u0632 \u0647\u0631 \u0645\u0633\u06cc\u0631 \u062f\u06cc\u06af\u0631\u06cc \u0631\u0648 \u0647\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0637\u0627\u0647\u0627\u06cc \u0627\u062d\u062a\u0645\u0627\u0644\u06cc \u0627\u06cc\u0646 \u0641\u0631\u0627\u06cc\u0646\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0622\u067e\u0644\u0648\u062f \u0639\u06a9\u0633 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u0631 \u0645\u0631\u0627\u062d\u0644 \u0645\u062e\u062a\u0644\u0641 \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u062f\u0648\u0631\u0628\u06cc\u0646 \u0628\u0627\u0632 \u0646\u0634\u062f\n\u0645\u062c\u0648\u0632 \u062f\u0648\u0631\u0628\u06cc\u0646 \u0631\u062f \u0634\u062f\n\u06a9\u0627\u0631\u0628\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u0639\u06a9\u0633 \u0631\u0648 \u0644\u063a\u0648 \u06a9\u0631\u062f\n\u0641\u0627\u06cc\u0644 \u0642\u0627\u0628\u0644 \u062e\u0648\u0627\u0646\u062f\u0646 \u0646\u0628\u0648\u062f\n\u0641\u0631\u0645\u062a \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0634\u062f\nCrop \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\n\u062d\u0627\u0641\u0638\u0647 \u06a9\u0627\u0641\u06cc \u0646\u0628\u0648\u062f\n\u0641\u0634\u0631\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u062f\n\u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0634\u062f\n\u0633\u0631\u0648\u0631 \u0641\u0627\u06cc\u0644 \u0631\u0648 \u0631\u062f \u06a9\u0631\u062f\nUpload \u0646\u06cc\u0645\u0647\u200c\u06a9\u0627\u0631\u0647 \u0645\u0648\u0646\u062f\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637\u0627\u0647\u0627 \u0646\u0628\u0627\u06cc\u062f \u0647\u0645\u06af\u06cc \u0628\u0627 \u067e\u06cc\u0627\u0645 \u062e\u0637\u0627\u06cc\u06cc \u0631\u062e \u062f\u0627\u062f \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0627\u0645\u06a9\u0627\u0646 \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647.\n\u06cc\u06a9 \u0639\u06a9\u0633 \u062f\u06cc\u06af\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0627:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0622\u067e\u0644\u0648\u062f \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u062f.\n\u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646 \u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 Upload \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u0647\u060c \u0641\u0627\u06cc\u0644 \u0622\u0645\u0627\u062f\u0647 \u0648 Preview \u0628\u0627\u06cc\u062f \u062d\u0641\u0638 \u0628\u0634\u0646 \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0648\u06cc \u062a\u0644\u0627\u0634 \u0645\u062c\u062f\u062f \u0628\u0632\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0646\u06cc\u0645 \u062f\u0648\u0628\u0627\u0631\u0647 \u0648\u0627\u0631\u062f \u06af\u0627\u0644\u0631\u06cc \u0628\u0634\u0647\u060c Crop \u0631\u0648 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u0646\u0647 \u0648 \u0627\u0632 \u0627\u0648\u0644 \u0647\u0645\u0647 \u0645\u0631\u0627\u062d\u0644 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Retry \u0641\u0642\u0637 \u0645\u0631\u062d\u0644\u0647 \u0634\u06a9\u0633\u062a\u200c\u062e\u0648\u0631\u062f\u0647 \u0631\u0648 \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0627\u0646\u062a\u062e\u0627\u0628\u060c Crop \u0648 Compress \u0645\u0648\u0641\u0642 \u0628\u0648\u062f\u0646 \u0627\u0645\u0627 Upload \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0642\u0637\u0639 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a Retry \u0646\u0628\u0627\u06cc\u062f \u06a9\u0644 \u0641\u0631\u0627\u06cc\u0646\u062f \u0631\u0648 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u062f\u0631\u0633\u062a \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>preparedFile \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a\n        \u2193\nRetry\n        \u2193\n\u0641\u0642\u0637 Upload \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 ViewModel \u0628\u0627\u06cc\u062f \u062a\u0627 \u0632\u0645\u0627\u0646 \u062e\u0631\u0648\u062c \u06a9\u0627\u0631\u0628\u0631 \u06cc\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a Upload\u060c \u0641\u0627\u06cc\u0644 \u0622\u0645\u0627\u062f\u0647 \u0631\u0648 \u0646\u06af\u0647 \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private var preparedFile: File? = null\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627\u0628\u0639 Retry \u0647\u0645 \u0641\u0642\u0637 \u0647\u0645\u0648\u0646 \u0641\u0627\u06cc\u0644 \u0631\u0648 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun retryUpload() {\n    preparedFile?.let(::uploadFile)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0646\u0645\u0648\u0646\u0647\u200c\u0627\u06cc \u0627\u0632 \u0637\u0631\u0627\u062d\u06cc \u062f\u0631\u0633\u062a Recovery \u0627\u0633\u062a. \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u0647 \u06a9\u062f\u0627\u0645 \u0645\u0631\u062d\u0644\u0647 \u0645\u0648\u0641\u0642 \u0634\u062f\u0647 \u0648 \u0627\u0632 \u0647\u0645\u0627\u0646 \u0646\u0642\u0637\u0647 \u0627\u062f\u0627\u0645\u0647 \u0628\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0645\u0648\u0642\u062a \u0631\u0648 \u0641\u0631\u0627\u0645\u0648\u0634 \u0646\u06a9\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0641\u0631\u0627\u06cc\u0646\u062f \u0645\u0645\u06a9\u0646\u0647 \u0686\u0646\u062f \u0641\u0627\u06cc\u0644 \u0645\u0648\u0642\u062a \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0646:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0641\u0627\u06cc\u0644 \u062f\u0648\u0631\u0628\u06cc\u0646\n\u0641\u0627\u06cc\u0644 \u062e\u0631\u0648\u062c\u06cc Crop\n\u0641\u0627\u06cc\u0644 Resize \u0648 Compress\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627 \u0647\u06cc\u0686\u200c\u0648\u0642\u062a \u067e\u0627\u06a9 \u0646\u0634\u0646\u060c Cache \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0645\u0631\u0648\u0631 \u0628\u0632\u0631\u06af \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 Upload \u0645\u0648\u0641\u0642 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0645\u0648\u0642\u062a \u0631\u0648 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>preparedFile?.delete()\npreparedFile = null\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0627\u06cc\u062f \u0645\u0631\u0627\u0642\u0628 \u0628\u0627\u0634\u06cc\u0645 \u0642\u0628\u0644 \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 Upload \u06cc\u0627 \u0648\u0642\u062a\u06cc \u0647\u0646\u0648\u0632 Preview \u0628\u0647 \u0641\u0627\u06cc\u0644 \u0648\u0627\u0628\u0633\u062a\u0647 \u0627\u0633\u062a\u060c \u0641\u0627\u06cc\u0644 \u0631\u0648 \u067e\u0627\u06a9 \u0646\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0639\u06a9\u0633 \u062c\u062f\u06cc\u062f\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u060c \u0646\u0633\u062e\u0647 \u0622\u0645\u0627\u062f\u0647 \u0642\u0628\u0644\u06cc \u062f\u06cc\u06af\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>preparedFile?.delete()\npreparedFile = null\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062f\u06cc\u0631\u06cc\u062a \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0645\u0648\u0642\u062a \u0628\u062e\u0634\u06cc \u0627\u0632 \u0641\u0631\u0627\u06cc\u0646\u062f \u0622\u067e\u0644\u0648\u062f \u0627\u0633\u062a\u060c \u0646\u0647 \u06cc\u06a9 \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u06cc\u200c\u0627\u0647\u0645\u06cc\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062d\u0630\u0641 \u0639\u06a9\u0633 \u0641\u0639\u0644\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06af\u0632\u06cc\u0646\u0647 \u062d\u0630\u0641 \u0639\u06a9\u0633 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u0627\u0632 UI \u067e\u0646\u0647\u0627\u0646 \u06a9\u0646\u06cc\u0645. \u0633\u0631\u0648\u0631 \u0647\u0645 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u0647 \u0639\u06a9\u0633 \u062d\u0630\u0641 \u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Endpoint \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0686\u0646\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@DELETE(\"business\/profile\/image\")\nsuspend fun deleteBusinessImage()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f Repository \u0645\u0642\u062f\u0627\u0631 \u0645\u062d\u0644\u06cc \u0631\u0648 \u0647\u0645 \u067e\u0627\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>api.deleteBusinessImage()\nbusinessDao.updateImageUrl(null)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0631\u062a\u06cc\u0628 \u0627\u06cc\u0646\u062c\u0627 \u0645\u0647\u0645\u0647. \u0628\u0647\u062a\u0631\u0647 \u0627\u0628\u062a\u062f\u0627 \u0633\u0631\u0648\u0631 \u062d\u0630\u0641 \u0631\u0648 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f Room \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647. \u0627\u06af\u0647 \u062d\u0630\u0641 \u0641\u0642\u0637 \u062f\u0631 Room \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u060c \u0639\u06a9\u0633 \u0628\u0627 Refresh \u0628\u0639\u062f\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0634\u06a9\u0644 Cache \u062a\u0635\u0648\u06cc\u0631 \u0628\u0639\u062f \u0627\u0632 Upload<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc Upload \u0645\u0648\u0641\u0642 \u0645\u06cc\u0634\u0647\u060c \u0627\u0645\u0627 \u062a\u0635\u0648\u06cc\u0631 \u0642\u0628\u0644\u06cc \u0647\u0645\u0686\u0646\u0627\u0646 \u062f\u0631 UI \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647. \u062f\u0644\u06cc\u0644\u0634 \u0645\u0645\u06a9\u0646\u0647 Cache \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0639\u06a9\u0633 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 URL \u0647\u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;api.example.com\/business\/image\/15.jpg\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0627\u06cc\u0644 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0639\u0648\u0636 \u0634\u062f\u0647\u060c \u0627\u0645\u0627 URL \u0647\u0645\u0648\u0646\u0647. \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0641\u06a9\u0631 \u06a9\u0646\u0647 \u0646\u0633\u062e\u0647 \u06a9\u0634\u200c\u0634\u062f\u0647 \u0647\u0646\u0648\u0632 \u0645\u0639\u062a\u0628\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0627\u0647\u200c\u0647\u0627 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Backend \u0628\u0631\u0627\u06cc \u0647\u0631 \u0646\u0633\u062e\u0647 URL \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/business\/image\/15_1723456.jpg\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0627 \u0646\u0633\u062e\u0647 \u0631\u0648 \u0628\u0647 Query \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/business\/image\/15.jpg?v=1723456\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>updatedAt<\/code> \u067e\u0627\u0633\u062e Upload \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647. \u0627\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062e\u0648\u062f Upload \u0646\u06cc\u0633\u062a\u060c \u0627\u0645\u0627 \u0628\u062f\u0648\u0646 \u062d\u0644 \u0627\u0648\u0646 \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062a\u0635\u0648\u0631 \u06a9\u0646\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0639\u06a9\u0633 \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 Upload \u0628\u0627\u06cc\u062f \u0622\u0641\u0644\u0627\u06cc\u0646 \u0635\u0641\u200c\u0628\u0646\u062f\u06cc \u0628\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 \u0646\u0638\u0631 \u0641\u0646\u06cc \u0645\u06cc\u0634\u0647 \u0641\u0627\u06cc\u0644 \u0631\u0648 \u0645\u062d\u0644\u06cc \u0646\u06af\u0647 \u062f\u0627\u0634\u062a \u0648 \u0628\u0627 WorkManager \u0628\u0639\u062f \u0627\u0632 \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0622\u067e\u0644\u0648\u062f \u06a9\u0631\u062f. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0639\u06a9\u0633\u200c\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u062b\u0628\u062a \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0645\u0641\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0639\u06a9\u0633 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u0646\u0633\u062e\u0647 \u0627\u0628\u062a\u062f\u0627\u06cc\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0631\u0641\u062a\u0627\u0631 \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0646\u06cc\u0633\u062a\n      \u2193\n\u0639\u06a9\u0633 \u0622\u0645\u0627\u062f\u0647 \u0648 Preview \u062d\u0641\u0638 \u0645\u06cc\u0634\u0647\n      \u2193\n\u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f\u0627\u064b Retry \u0645\u06cc\u200c\u06a9\u0646\u0647\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u200c\u0628\u0646\u062f\u06cc \u0622\u0641\u0644\u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc\u200c\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc \u0641\u0627\u06cc\u0644\u060c \u0644\u063a\u0648 Upload\u060c \u062a\u06a9\u0631\u0627\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648 \u062a\u0634\u062e\u06cc\u0635 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f\u062a\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0628\u0647\u062a\u0631\u0647 \u0627\u0648\u0644 \u0646\u06cc\u0627\u0632 \u0648\u0627\u0642\u0639\u06cc \u067e\u0631\u0648\u0698\u0647 \u0631\u0648 \u0628\u0628\u06cc\u0646\u06cc\u0645. Offline First \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0646\u06cc\u0633\u062a \u06a9\u0647 \u062a\u0645\u0627\u0645 \u0639\u0645\u0644\u06cc\u0627\u062a\u200c\u0647\u0627 \u062d\u062a\u0645\u0627\u064b \u0628\u0627\u06cc\u062f \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0635\u0641\u200c\u0628\u0646\u062f\u06cc \u0628\u0634\u0646. \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0646\u06af\u0627\u0645 \u0646\u0628\u0648\u062f \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062f\u0627\u062f\u0647 \u0648 \u06a9\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u0627\u0632 \u0628\u06cc\u0646 \u0646\u0628\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0647\u0631 \u0628\u062e\u0634<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0641\u0631\u0627\u06cc\u0646\u062f\u060c \u062a\u0642\u0633\u06cc\u0645 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a\u200c\u0647\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Compose:\n\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 Camera \u0648 Gallery\n\u0646\u0645\u0627\u06cc\u0634 Preview \u0648 Loading\n\u0627\u0631\u0633\u0627\u0644 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\n\nViewModel:\n\u0646\u06af\u0647\u062f\u0627\u0631\u06cc State\n\u0647\u0645\u0627\u0647\u0646\u06af \u06a9\u0631\u062f\u0646 \u0645\u0631\u0627\u062d\u0644\n\u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0648\u0641\u0642\u06cc\u062a\u060c \u062e\u0637\u0627 \u0648 Retry\n\nImageProcessor:\n\u062e\u0648\u0627\u0646\u062f\u0646 Uri\n\u0627\u0635\u0644\u0627\u062d \u062c\u0647\u062a\nResize\nCompress\n\u0633\u0627\u062e\u062a \u0641\u0627\u06cc\u0644 \u0646\u0647\u0627\u06cc\u06cc\n\nRepository:\n\u0633\u0627\u062e\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a Multipart\nUpload \u0628\u0647 API\n\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc Room\n\nBackend:\n\u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0641\u0627\u06cc\u0644\n\u0630\u062e\u06cc\u0631\u0647 \u062a\u0635\u0648\u06cc\u0631\n\u0633\u0627\u062e\u062a URL \u0646\u0647\u0627\u06cc\u06cc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 Compose \u062e\u0648\u062f\u0634 Bitmap \u0631\u0648 \u0641\u0634\u0631\u062f\u0647 \u06a9\u0646\u0647\u060c Multipart \u0628\u0633\u0627\u0632\u0647 \u0648 Room \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647\u060c \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u0628\u0647 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u0634\u0644\u0648\u063a \u0648 \u063a\u06cc\u0631\u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u06cc\u200c\u0631\u0633\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0645\u0642\u0627\u0628\u0644\u060c \u0627\u06af\u0647 \u0647\u0631 \u0628\u062e\u0634 \u0641\u0642\u0637 \u06a9\u0627\u0631 \u062e\u0648\u062f\u0634 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647\u060c \u0645\u06cc\u0634\u0647 \u0631\u0648\u0634 \u0627\u0646\u062a\u062e\u0627\u0628 \u0639\u06a9\u0633 \u06cc\u0627 \u0646\u0648\u0639 \u0641\u0634\u0631\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0628\u062f\u0648\u0646 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u06a9\u0644 \u0635\u0641\u062d\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u067e\u0644\u0648\u062f \u0639\u06a9\u0633 \u0641\u0642\u0637 \u0627\u0631\u0633\u0627\u0644 \u0641\u0627\u06cc\u0644 \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0638\u0627\u0647\u0631 \u0641\u0642\u0637 \u0631\u0648\u06cc \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0645\u06cc\u200c\u0632\u0646\u0647\u060c \u0639\u06a9\u0633\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u06a9\u0645\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0631\u0648 \u0641\u0634\u0627\u0631 \u0645\u06cc\u062f\u0647. \u0627\u0645\u0627 \u067e\u0634\u062a \u0647\u0645\u06cc\u0646 \u062a\u0639\u0627\u0645\u0644 \u0633\u0627\u062f\u0647\u060c \u0686\u0646\u062f \u0633\u06cc\u0633\u062a\u0645 \u0645\u062e\u062a\u0644\u0641 \u0628\u0627 \u0647\u0645 \u0647\u0645\u06a9\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Photo Picker \u06cc\u06a9 Uri \u0645\u062d\u062f\u0648\u062f \u0648 \u0627\u0645\u0646 \u0627\u0632 \u06af\u0627\u0644\u0631\u06cc \u0645\u06cc\u062f\u0647. \u062f\u0648\u0631\u0628\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u062f\u0627\u062e\u0644 Uri\u0627\u06cc \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u0642\u0628\u0644 \u0633\u0627\u062e\u062a\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. Crop \u0645\u062d\u062f\u0648\u062f\u0647 \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0627\u0632 \u062a\u0635\u0648\u06cc\u0631 \u062c\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. ImageProcessor \u0627\u0628\u0639\u0627\u062f \u0648 \u062d\u062c\u0645 \u0641\u0627\u06cc\u0644 \u0631\u0648 \u06a9\u0627\u0647\u0634 \u0645\u06cc\u062f\u0647. Repository \u0641\u0627\u06cc\u0644 \u0631\u0648 \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a Multipart \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0633\u0631\u0648\u0631 \u0646\u0633\u062e\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 URL \u062c\u062f\u06cc\u062f \u0631\u0648 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647. Room \u0627\u06cc\u0646 URL \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u0648 \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631 \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>\u0639\u06a9\u0633 \u06cc\u06a9 \u062f\u0627\u062f\u0647 \u0648\u0627\u062d\u062f \u0646\u06cc\u0633\u062a\u061b \u06cc\u06a9 \u0641\u0631\u0627\u06cc\u0646\u062f \u0686\u0646\u062f\u0645\u0631\u062d\u0644\u0647\u200c\u0627\u06cc\u0647<\/strong>. \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u06cc\u0645 \u062f\u0631 \u0647\u0631 \u0645\u0631\u062d\u0644\u0647 \u0686\u0647 \u0646\u0633\u062e\u0647\u200c\u0627\u06cc \u0627\u0632 \u062a\u0635\u0648\u06cc\u0631 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0639\u06a9\u0633 \u0627\u0648\u0644\u06cc\u0647\n\u0639\u06a9\u0633 Crop\u200c\u0634\u062f\u0647\n\u0641\u0627\u06cc\u0644 \u0641\u0634\u0631\u062f\u0647\u200c\u0634\u062f\u0647\n\u0646\u0633\u062e\u0647 \u0622\u067e\u0644\u0648\u062f\u0634\u062f\u0647\n\u0622\u062f\u0631\u0633 \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u062f\u0631 Room\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u06a9\u062f\u0648\u0645 \u0647\u062f\u0641 \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0631\u0646 \u0648 \u0646\u0628\u0627\u06cc\u062f \u0628\u0627 \u0647\u0645 \u0627\u0634\u062a\u0628\u0627\u0647 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 \u0622\u067e\u0644\u0648\u062f \u0639\u06a9\u0633 \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0639\u06a9\u0633 \u0631\u0648 \u0627\u0632 \u062f\u0648\u0631\u0628\u06cc\u0646 \u06cc\u0627 \u06af\u0627\u0644\u0631\u06cc \u0628\u0647 \u0634\u06a9\u0644 Uri \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0641\u0627\u06cc\u0644 \u0627\u0635\u0644\u06cc \u0627\u0648\u0646 \u0631\u0648 Crop \u0648 \u0641\u0634\u0631\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0646\u0633\u062e\u0647 \u0622\u0645\u0627\u062f\u0647 \u0631\u0648 \u0628\u0627 Multipart \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 \u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u062a\u0623\u06cc\u06cc\u062f\u060c \u0622\u062f\u0631\u0633 \u0639\u06a9\u0633 \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062a\u0627 \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647\u200c\u0631\u0648\u0632 \u0628\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0628\u06cc\u0633\u062a\u200c\u0648\u0634\u0634\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0637\u0648\u0631 \u0645\u0648\u0642\u0639\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0627\u0632 GPS \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u06cc\u0627 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/em><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0648\u06cc \u0646\u0642\u0634\u0647<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0635\u0627\u062d\u0628 \u06cc\u06a9 \u0633\u0648\u067e\u0631\u0645\u0627\u0631\u06a9\u062a \u06cc\u0627 \u0631\u0633\u062a\u0648\u0631\u0627\u0646 \u062f\u0631 \u062d\u0627\u0644 \u062b\u0628\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u0634\u0647. \u0646\u0627\u0645 \u0641\u0631\u0648\u0634\u06af\u0627\u0647\u060c \u0634\u0645\u0627\u0631\u0647 \u062a\u0645\u0627\u0633 \u0648 \u0639\u06a9\u0633 \u0631\u0648 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647\u060c \u0627\u0645\u0627 \u0647\u0646\u0648\u0632 \u06cc\u06a9 \u0633\u0624\u0627\u0644 \u0645\u0647\u0645 \u0628\u0627\u0642\u06cc \u0645\u0648\u0646\u062f\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0627\u06cc\u0646 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u062f\u0642\u06cc\u0642\u0627\u064b \u06a9\u062c\u0627\u0633\u062a\u061f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0648\u0634\u062a\u0646 \u0622\u062f\u0631\u0633 \u0628\u0647 \u062a\u0646\u0647\u0627\u06cc\u06cc \u0647\u0645\u06cc\u0634\u0647 \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a. \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0622\u062f\u0631\u0633 \u0631\u0648 \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0646\u0648\u06cc\u0633\u0647\u060c \u0686\u0646\u062f \u062e\u06cc\u0627\u0628\u0648\u0646 \u0647\u0645\u200c\u0646\u0627\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u062d\u062a\u06cc \u0641\u0631\u0645\u062a \u0646\u0648\u0634\u062a\u0646 \u0622\u062f\u0631\u0633\u200c\u0647\u0627 \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0627\u0634\u0647. \u0627\u0645\u0627 \u0627\u06af\u0631 \u0645\u062e\u062a\u0635\u0627\u062a \u062f\u0642\u06cc\u0642 \u062c\u063a\u0631\u0627\u0641\u06cc\u0627\u06cc\u06cc \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u062b\u0628\u062a \u0628\u0634\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645\u06cc\u0634\u0647 \u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u0645\u062d\u0644 \u0648\u0627\u0642\u0639\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u06a9\u062c\u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0627\u0645\u0631\u0648\u0632\u06cc\u060c \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0622\u062f\u0631\u0633 \u0645\u062a\u0646\u06cc\u060c \u0645\u062e\u062a\u0635\u0627\u062a GPS \u0631\u0648 \u0647\u0645 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u067e\u0634\u062a \u0635\u062d\u0646\u0647 \u0686\u0646\u062f \u0633\u06cc\u0633\u062a\u0645 \u0645\u062e\u062a\u0644\u0641 \u0628\u0627 \u0647\u0645 \u0647\u0645\u06a9\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Permission\n      \u2193\nLocation Service\n      \u2193\nGPS \/ Network\n      \u2193\nLatitude + Longitude\n      \u2193\n\u0646\u0645\u0627\u06cc\u0634 \u0631\u0648\u06cc Map\n      \u2193\n\u062c\u0627\u0628\u062c\u0627\u06cc\u06cc Marker\n      \u2193\n\u0630\u062e\u06cc\u0631\u0647 \u0645\u062e\u062a\u0635\u0627\u062a\n      \u2193\nAPI\n      \u2193\nRoom\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062f\u0631\u0633 \u0641\u0642\u0637 \u062f\u0631\u0628\u0627\u0631\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0646\u0642\u0634\u0647 \u0646\u06cc\u0633\u062a. \u0645\u0648\u0636\u0648\u0639 \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0645\u0648\u0642\u0639\u06cc\u062a \u062c\u063a\u0631\u0627\u0641\u06cc\u0627\u06cc\u06cc \u0647\u0645 \u0645\u062b\u0644 \u0639\u06a9\u0633\u060c \u06cc\u06a9 \u0641\u0631\u0627\u06cc\u0646\u062f \u0686\u0646\u062f\u0645\u0631\u062d\u0644\u0647\u200c\u0627\u06cc\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Location \u0628\u0627 GPS \u0641\u0631\u0642 \u062f\u0627\u0631\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0627\u06cc\u062c\u200c\u062a\u0631\u06cc\u0646 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Location \u0648 GPS \u0631\u0648 \u06cc\u06a9\u06cc \u0628\u062f\u0648\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GPS \u0641\u0642\u0637 \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0645\u0648\u0642\u0639\u06cc\u062a\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0648\u0634\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0648 \u0627\u0632 \u0686\u0646\u062f \u0645\u0646\u0628\u0639 \u0645\u062e\u062a\u0644\u0641 \u0628\u0647 \u062f\u0633\u062a \u0628\u06cc\u0627\u0631\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GPS\n\n\u062f\u06a9\u0644\u200c\u0647\u0627\u06cc \u0645\u062e\u0627\u0628\u0631\u0627\u062a\u06cc\n\nWi-Fi\n\nBluetooth\n\n\u062a\u0631\u06a9\u06cc\u0628 \u0647\u0645\u0647 \u0627\u06cc\u0646\u200c\u0647\u0627\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0648\u0642\u062a\u06cc \u062f\u0627\u062e\u0644 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u06cc\u200c\u0646\u0648\u06cc\u0633\u06cc\u0645:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Location<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0646\u0638\u0648\u0631 \u0645\u0648\u0642\u0639\u06cc\u062a \u062c\u063a\u0631\u0627\u0641\u06cc\u0627\u06cc\u06cc \u0627\u0633\u062a\u060c \u0646\u0647 \u0627\u0644\u0632\u0627\u0645\u0627\u064b GPS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u06cc\u0633\u062a\u0645 \u062e\u0648\u062f\u0634 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0627\u0632 \u06a9\u062f\u0627\u0645 \u0645\u0646\u0628\u0639 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0647 \u062a\u0627 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631 \u0648 \u062f\u0642\u06cc\u0642\u200c\u062a\u0631 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Location \u06cc\u0639\u0646\u06cc \u0686\u0647 \u0686\u06cc\u0632\u06cc\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0641\u0642\u0637 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0644\u0627\u0633 Location \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0627\u0648\u0646 \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Latitude\n\nLongitude\n\nAccuracy\n\nAltitude\n\nSpeed\n\nBearing\n\nTime\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0641\u0642\u0637 \u0628\u0647 \u062f\u0648 \u0645\u0642\u062f\u0627\u0631 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Latitude\n\nLongitude\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Latitude:\n35.6892\n\nLongitude:\n51.3890\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062f\u0648 \u0639\u062f\u062f \u0645\u062d\u0644 \u062f\u0642\u06cc\u0642 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0631\u0648\u06cc \u06a9\u0631\u0647 \u0632\u0645\u06cc\u0646 \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0622\u062f\u0631\u0633 \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0648\u0634\u062a\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u062a\u0647\u0631\u0627\u0646\n\u062e\u06cc\u0627\u0628\u0627\u0646 \u0622\u0632\u0627\u062f\u06cc\n\u067e\u0644\u0627\u06a9 \u06f2\u06f4\u06f5\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0622\u062f\u0631\u0633 \u0628\u0631\u0627\u06cc \u0627\u0646\u0633\u0627\u0646 \u0642\u0627\u0628\u0644 \u0641\u0647\u0645\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0641\u0627\u0635\u0644\u0647 \u062f\u0648 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0631\u0648 \u0641\u0642\u0637 \u0628\u0627 \u0645\u062a\u0646 \u0645\u062d\u0627\u0633\u0628\u0647 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0631 \u0645\u062e\u062a\u0635\u0627\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>35.700012\n\n51.347814\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0646\u0632\u062f\u06cc\u06a9\u200c\u062a\u0631\u06cc\u0646 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>\u0641\u0627\u0635\u0644\u0647 \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062d\u0633\u0627\u0628 \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>\u0645\u0633\u06cc\u0631 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u0631\u0633\u0645 \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>\u0634\u0639\u0627\u0639 \u062c\u0633\u062a\u062c\u0648 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>\u0641\u0631\u0648\u0634\u06af\u0627\u0647\u200c\u0647\u0627\u06cc \u0627\u0637\u0631\u0627\u0641 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Location \u0632\u0628\u0627\u0646 \u0645\u0634\u062a\u0631\u06a9 \u0647\u0645\u0647 \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u0646\u0642\u0634\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Permission<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u062c\u0627\u0632\u0647 \u0646\u062f\u0627\u0631\u0647 \u0628\u062f\u0648\u0646 \u0627\u0637\u0644\u0627\u0639 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0648\u0642\u0639\u06cc\u062a \u0627\u0648\u0646 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 \u0686\u06cc\u0632 \u0628\u0627\u06cc\u062f Permission \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Manifest \u0641\u0642\u0637 \u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;uses-permission\n    android:name=\"android.permission.ACCESS_FINE_LOCATION\"\/&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u062f\u0642\u062a \u062e\u06cc\u0644\u06cc \u0628\u0627\u0644\u0627 \u0644\u0627\u0632\u0645 \u0646\u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;uses-permission\n    android:name=\"android.permission.ACCESS_COARSE_LOCATION\"\/&gt;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Fine \u06cc\u0627 Coarse\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0642 \u0627\u06cc\u0646 \u062f\u0648 \u062e\u06cc\u0644\u06cc \u0645\u0647\u0645\u0647.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ACCESS_FINE_LOCATION\n\n\u2248 GPS\n\u2248 \u0686\u0646\u062f \u0645\u062a\u0631 \u062f\u0642\u062a\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ACCESS_COARSE_LOCATION\n\n\u2248 \u062a\u0642\u0631\u06cc\u0628\u06cc\n\n\u0645\u062b\u0644\u0627\u064b \u0686\u0646\u062f \u0635\u062f \u0645\u062a\u0631\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0647\u062a\u0631\u0647 \u0627\u0632 \u0645\u0648\u0642\u0639\u06cc\u062a \u062f\u0642\u06cc\u0642 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u0645\u062d\u0644 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0628\u0627\u06cc\u062f \u062f\u0642\u06cc\u0642 \u062b\u0628\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062f\u0631\u062e\u0648\u0627\u0633\u062a Permission<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Compose \u0645\u062b\u0644 Camera \u0627\u0632 Activity Result API \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val permissionLauncher =\n    rememberLauncherForActivityResult(\n        ActivityResultContracts.RequestPermission()\n    ) { granted -&gt;\n\n        if (granted) {\n            viewModel.loadCurrentLocation()\n        }\n\n    }\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 Launcher \u0641\u0642\u0637 \u06cc\u06a9 \u0633\u0624\u0627\u0644 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u067e\u0631\u0633\u0647:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u06cc \u0645\u0648\u0642\u0639\u06cc\u062a\u062a \u0631\u0648 \u0628\u062e\u0648\u0646\u0645\u061f<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0642\u0628\u0648\u0644 \u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Location \u0634\u0631\u0648\u0639 \u0645\u06cc\u0634\u0647.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0631\u062f \u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0634 \u0646\u0642\u0637\u0647 \u0631\u0648 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0647.\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 Permission \u0646\u062f\u0627\u062f \u0686\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0627\u0632 \u06a9\u0627\u0631 \u0628\u06cc\u0641\u062a\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0634\u0647 \u0628\u0627\u06cc\u062f \u0645\u0633\u06cc\u0631 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Permission \u0631\u062f \u0634\u062f\n\n\u2193\n\n\u0646\u0645\u0627\u06cc\u0634 \u0646\u0642\u0634\u0647\n\n\u2193\n\n\u06a9\u0627\u0631\u0628\u0631 \u062e\u0648\u062f\u0634 Marker \u0631\u0648 \u062c\u0627\u0628\u0647\u200c\u062c\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0635\u0648\u0644 \u0645\u0647\u0645 \u0637\u0631\u0627\u062d\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u06cc\u0686 Permission \u0646\u0628\u0627\u06cc\u062f \u0634\u0631\u0637 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u0648\u0642\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0631\u0648\u0632\u0647 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0627\u0632 <strong>Fused Location Provider<\/strong> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0644\u06cc\u0644\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062e\u0648\u062f\u0634 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0645\u0646\u0628\u0639 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0627\u06af\u0631 GPS \u0631\u0648\u0634\u0646 \u0628\u0627\u0634\u0647 \u0627\u0632 GPS.<\/li>\n\n\n\n<li>\u0627\u06af\u0631 \u062f\u0627\u062e\u0644 \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0628\u0627\u0634\u06cc\u0645 \u0627\u0632 Wi-Fi.<\/li>\n\n\n\n<li>\u0627\u06af\u0631 GPS \u0636\u0639\u06cc\u0641 \u0628\u0627\u0634\u0647 \u0627\u0632 \u0634\u0628\u06a9\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u062e\u0648\u062f\u0634 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u06af\u0631\u0641\u062a\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0645\u0648\u0642\u0639\u06cc\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>locationClient\n    .lastLocation\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0646\u0645\u06cc\u06af\u0647:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">GPS \u0631\u0648\u0634\u0646 \u06a9\u0646.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0644\u06a9\u0647 \u0645\u06cc\u06af\u0647:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u0622\u062e\u0631\u06cc\u0646 \u0645\u0648\u0642\u0639\u06cc\u062a\u06cc \u06a9\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0645\u06cc\u200c\u0634\u0646\u0627\u0633\u0647 \u0631\u0648 \u0628\u062f\u0647.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u06af\u0631 \u0622\u062e\u0631\u06cc\u0646 \u0645\u0648\u0642\u0639\u06cc\u062a \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u06af\u0648\u0634\u06cc \u062a\u0627\u0632\u0647 \u0631\u0648\u0634\u0646 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0627 GPS \u0647\u0646\u0648\u0632 \u0647\u06cc\u0686 \u0645\u0648\u0642\u0639\u06cc\u062a\u06cc \u067e\u06cc\u062f\u0627 \u0646\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0628\u0627\u06cc\u062f \u0645\u0648\u0642\u0639\u06cc\u062a \u062c\u062f\u06cc\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0641\u0647\u0648\u0645\u06cc:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>locationClient\n    .getCurrentLocation(...)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u0627\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0646\u062a\u0638\u0631 \u0645\u06cc\u200c\u0645\u0648\u0646\u0647 \u062a\u0627 \u0645\u0648\u0642\u0639\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc \u067e\u06cc\u062f\u0627 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062f\u0631\u06cc\u0627\u0641\u062a Location \u062f\u0627\u062e\u0644 ViewModel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0646\u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0634 LocationManager \u0628\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 Repository \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ViewModel\n\n\u2193\n\nLocationRepository\n\n\u2193\n\nFused Location Provider\n\n\u2193\n\nLocation\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 \u0647\u0645\u06cc\u0634\u0647 ViewModel \u0641\u0642\u0637 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u062f\u0644 \u0645\u0648\u0642\u0639\u06cc\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u0645\u062f\u0644 \u0645\u0633\u062a\u0642\u0644\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data class GeoPoint(\n\n    val latitude: Double,\n\n    val longitude: Double\n\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0631\u0627 Location \u062e\u0648\u062f \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0631\u0648 \u0647\u0645\u0647\u200c\u062c\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u06a9\u0646\u06cc\u0645\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 UI \u0641\u0642\u0637 \u0645\u062e\u062a\u0635\u0627\u062a \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0627\u0628\u0633\u062a\u0647 \u0634\u062f\u0646 \u06a9\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u06a9\u0644\u0627\u0633 Location \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u062a\u0633\u062a \u06a9\u0631\u062f\u0646 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0633\u062e\u062a\u200c\u062a\u0631 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u0646\u0642\u0634\u0647<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0645\u062e\u062a\u0635\u0627\u062a \u0631\u0648 \u062f\u0627\u0631\u06cc\u0645\u060c \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Google Map\n\n\u2193\n\nMarker\n\n\u2193\n\nLatitude\n\nLongitude\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u0645\u062e\u062a\u0635\u0627\u062a \u0631\u0648 \u0628\u0647 Map \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0648\u062f Map \u0645\u0633\u0626\u0648\u0644 \u0631\u0633\u0645 Marker \u0627\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">State \u0635\u0641\u062d\u0647<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>data class MapUiState(\n\n    val location: GeoPoint? = null,\n\n    val isLoading: Boolean = false,\n\n    val hasPermission: Boolean = false\n\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 State \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u0645\u0647 \u0648\u0636\u0639\u06cc\u062a\u200c\u0647\u0627\u06cc \u0635\u0641\u062d\u0647 \u0631\u0648 \u067e\u0648\u0634\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u06af\u0631 Location \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Map\n\n\u2193\n\nMove Camera\n\n\u2193\n\nZoom\n\n\u2193\n\nShow Marker\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0645\u062d\u0644 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0631\u0648 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u06af\u0631 Location \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b Permission \u0631\u062f \u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0627 GPS \u062e\u0627\u0645\u0648\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Map\n\n\u2193\n\nDefault Location\n\n\u2193\n\nMarker \u0642\u0627\u0628\u0644 \u062c\u0627\u0628\u0647\u200c\u062c\u0627\u06cc\u06cc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u062a\u0647\u0631\u0627\u0646 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u200c\u062f\u06cc\u0645 \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u062e\u0648\u062f\u0634 \u0645\u062d\u0644 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Marker<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Marker \u0647\u0645\u0648\u0646 \u0633\u0646\u062c\u0627\u0642 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0648\u0646 \u0631\u0648 \u062c\u0627\u0628\u0647\u200c\u062c\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Marker\n\n\u2193\n\nLatitude\n\nLongitude\n\n\u2193\n\nState\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>viewModel.onMarkerMoved(\n    latitude,\n    longitude\n)\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u062e\u0644 ViewModel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_form.update {\n\n    it.copy(\n\n        location = GeoPoint(\n\n            latitude,\n\n            longitude\n\n        )\n\n    )\n\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0642\u06cc\u0642\u0627\u064b \u0645\u062b\u0644 TextField.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0642\u0637 \u0627\u06cc\u0646 \u0628\u0627\u0631 \u0645\u0642\u062f\u0627\u0631 Text \u062a\u063a\u06cc\u06cc\u0631 \u0646\u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062e\u062a\u0635\u0627\u062a \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0645\u062e\u062a\u0635\u0627\u062a \u062f\u0627\u062e\u0644 \u0641\u0631\u0645 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0686\u0646\u062f \u0628\u0627\u0631 Marker \u0631\u0648 \u062c\u0627\u0628\u0647\u200c\u062c\u0627 \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>\u0628\u0639\u062f \u0627\u0633\u0645 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647.<\/li>\n\n\n\n<li>\u062f\u0648\u0628\u0627\u0631\u0647 Marker \u0631\u0648 \u062c\u0627\u0628\u0647\u200c\u062c\u0627 \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>\u0628\u0639\u062f \u0630\u062e\u06cc\u0631\u0647 \u0631\u0648 \u0628\u0632\u0646\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062e\u062a\u0635\u0627\u062a \u0647\u0645 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0641\u0631\u0645 \u0648\u06cc\u0631\u0627\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647 \u0628\u062e\u0634\u06cc \u0627\u0632 \u062e\u0648\u062f Map.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0630\u062e\u06cc\u0631\u0647 \u062f\u0631 \u0633\u0631\u0648\u0631<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062f\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data class UpdateLocationRequest(\n\n    val latitude: Double,\n\n    val longitude: Double\n\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Repository:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>api.updateLocation(\n    request\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u067e\u0627\u0633\u062e \u0645\u0648\u0641\u0642:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>businessDao.updateLocation(\n    latitude,\n    longitude\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 \u0647\u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>API\n\n\u2193\n\nRoom\n\n\u2193\n\nFlow\n\n\u2193\n\nUI\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u0622\u062f\u0631\u0633<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u0633\u0631\u0648\u0631 \u0641\u0642\u0637 \u0645\u062e\u062a\u0635\u0627\u062a \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u0647 \u0622\u062f\u0631\u0633 \u0645\u062a\u0646\u06cc \u0647\u0645 \u0628\u0628\u06cc\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0632 Reverse Geocoding \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Latitude\n\nLongitude\n\n\u2193\n\nAddress\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>35.7001\n\n51.3432\n\n\u2193\n\n\u062a\u0647\u0631\u0627\u0646\n\u062e\u06cc\u0627\u0628\u0627\u0646 \u0622\u0632\u0627\u062f\u06cc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u0622\u062f\u0631\u0633 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0635\u0644\u06cc \u0647\u0645\u0648\u0646 \u0645\u062e\u062a\u0635\u0627\u062a\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u06af\u0631 GPS \u062e\u0627\u0645\u0648\u0634 \u0628\u0648\u062f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f Crash \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u06cc\u0627\u0645 \u0645\u0646\u0627\u0633\u0628:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u0648\u0642\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc\u060c\nGPS \u0631\u0648 \u0631\u0648\u0634\u0646 \u06a9\u0646.\n\n\u06cc\u0627\n\n\u0645\u062d\u0644 \u0631\u0648 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627\u0632 \u0647\u0645 \u0645\u0633\u06cc\u0631 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062f\u0642\u062a Location<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc Location \u062f\u0642\u062a \u06a9\u0645\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Accuracy\n\n=\n\n350 \u0645\u062a\u0631\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u0639\u0646\u06cc \u06af\u0648\u0634\u06cc \u0645\u0637\u0645\u0626\u0646 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0631:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Accuracy\n\n=\n\n5 \u0645\u062a\u0631\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0648\u0642\u0639\u06cc\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062f\u0642\u06cc\u0642 \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u062f\u0642\u062a \u062e\u06cc\u0644\u06cc \u067e\u0627\u06cc\u06cc\u0646 \u0628\u0648\u062f\u060c \u0628\u0647\u062a\u0631\u0647 \u0642\u0628\u0644 \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u0628\u062e\u0648\u0627\u06cc\u0645 Marker \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0647\u0645\u06cc\u0634\u0647 \u0628\u0627\u06cc\u062f GPS \u0628\u06af\u06cc\u0631\u06cc\u0645\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0634\u0639\u0628\u0647 \u062c\u062f\u06cc\u062f\u06cc \u062f\u0631 \u0634\u0647\u0631 \u062f\u06cc\u06af\u0631\u06cc \u062b\u0628\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0641\u0642\u0637 GPS \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0644\u0648\u06a9\u06cc\u0634\u0646 \u062e\u0648\u062f \u06a9\u0627\u0631\u0628\u0631 \u062b\u0628\u062a \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647 \u0641\u0631\u0648\u0634\u06af\u0627\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0633\u062a\u06cc \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u0627\u0632 GPS \u0645\u0647\u0645\u200c\u062a\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647\u062a\u0631\u06cc\u0646 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u0627\u0628\u062a\u062f\u0627 GPS<br>\u2193<br>\u0646\u0645\u0627\u06cc\u0634 Marker<br>\u2193<br>\u0627\u0645\u06a9\u0627\u0646 \u062c\u0627\u0628\u0647\u200c\u062c\u0627\u06cc\u06cc \u062f\u0633\u062a\u06cc<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u06a9\u0627\u0631\u06cc\u0647 \u06a9\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0647\u0631 \u0628\u062e\u0634<\/h1>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Compose<br><br>\u0646\u0645\u0627\u06cc\u0634 \u0646\u0642\u0634\u0647<br><br>\u0646\u0645\u0627\u06cc\u0634 Marker<br><br>\u062f\u0631\u062e\u0648\u0627\u0633\u062a Permission<br><br>\u2193<br><br>ViewModel<br><br>\u0645\u062f\u06cc\u0631\u06cc\u062a State<br><br>\u0645\u062e\u062a\u0635\u0627\u062a \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647<br><br>\u2193<br><br>LocationRepository<br>\u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u0648\u0642\u0639\u06cc\u062a<br>\u2193<br>API<br>\u0630\u062e\u06cc\u0631\u0647 Location<br>\u2193<br>Room<br>\u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u062e\u062a\u0635\u0627\u062a<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 \u062a\u0645\u0627\u0645 \u062f\u0631\u0633\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc\u060c \u0647\u06cc\u0686 \u0628\u062e\u0634\u06cc \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0628\u062e\u0634 \u062f\u06cc\u06af\u0647 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0648\u0642\u0639\u06cc\u062a \u0641\u0642\u0637 \u0646\u0645\u0627\u06cc\u0634 \u0646\u0642\u0634\u0647 \u0646\u06cc\u0633\u062a<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u062f\u0631 \u0648\u0627\u0642\u0639 \u0686\u0646\u062f \u0633\u06cc\u0633\u062a\u0645 \u0645\u062e\u062a\u0644\u0641 \u0628\u0627 \u0647\u0645 \u0647\u0645\u06a9\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0646. \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0628\u062a\u062f\u0627 Permission \u0644\u0627\u0632\u0645 \u0631\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0645\u06a9\u0627\u0646 \u0645\u0648\u0642\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u06cc\u0633 \u0645\u06a9\u0627\u0646\u200c\u06cc\u0627\u0628\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0648\u0646 \u0631\u0648 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647 \u0648 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 Marker \u0631\u0648 \u062c\u0627\u0628\u0647\u200c\u062c\u0627 \u06a9\u0646\u0647. \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0645\u062e\u062a\u0635\u0627\u062a \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0646\u060c \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0646 \u0648 \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647\u200c\u0631\u0648\u0632 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>\u0646\u0642\u0634\u0647 \u0641\u0642\u0637 \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc\u0647\u061b \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u0631\u0632\u0634 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0646 \u062f\u0627\u0631\u0647\u060c \u0645\u062e\u062a\u0635\u0627\u062a \u062c\u063a\u0631\u0627\u0641\u06cc\u0627\u06cc\u06cc\u0647<\/strong>. \u0646\u0642\u0634\u0647\u060c GPS \u0648 \u0622\u062f\u0631\u0633 \u0641\u0642\u0637 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0647\u0633\u062a\u0646 \u06a9\u0647 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0622\u0646 \u0645\u062e\u062a\u0635\u0627\u062a \u062f\u0642\u06cc\u0642 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0648\u0642\u0639\u06cc\u062a \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f: \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 \u06af\u0631\u0641\u062a\u0646 \u0645\u062c\u0648\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc\u060c \u0645\u0648\u0642\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc \u06cc\u0627 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0647 \u0645\u062e\u062a\u0635\u0627\u062a \u062c\u063a\u0631\u0627\u0641\u06cc\u0627\u06cc\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u06cc\u0646 \u0645\u062e\u062a\u0635\u0627\u062a \u0631\u0648 \u062f\u0627\u062e\u0644 \u0633\u0631\u0648\u0631 \u0648 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0627\u0632 \u0627\u0648\u0646 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0645\u0631\u062c\u0639 \u0627\u0635\u0644\u06cc \u0645\u062d\u0644 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0631 \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0628\u06cc\u0633\u062a\u200c\u0648\u0647\u0641\u062a\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0637\u0648\u0631 \u0635\u062f\u0647\u0627 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0645\u062e\u062a\u0644\u0641 \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u062f\u0627\u062e\u0644 \u06af\u0648\u0634\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0633\u0631\u06cc\u0639 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u0634\u0627\u0647\u062f\u0647 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627\u06cc \u06a9\u0627\u0631\u060c \u0635\u0627\u062d\u0628 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0631\u0648\u0634\u06af\u0627\u0647\u0634 \u0631\u0648 \u062b\u0628\u062a \u06a9\u0631\u062f\u0647\u060c \u0639\u06a9\u0633 \u06af\u0630\u0627\u0634\u062a\u0647 \u0648 \u0645\u0648\u0642\u0639\u06cc\u062a\u0634 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u0645\u0634\u062e\u0635 \u0634\u062f\u0647. \u0627\u0645\u0627 \u0647\u0646\u0648\u0632 \u06cc\u06a9 \u0628\u062e\u0634 \u0645\u0647\u0645 \u0628\u0627\u0642\u06cc \u0645\u0648\u0646\u062f\u0647\u061b \u06a9\u0627\u0644\u0627\u0647\u0627 \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0645\u0646\u0627\u0633\u0628 \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0635\u0627\u062d\u0628 \u06cc\u06a9 \u0633\u0648\u067e\u0631\u0645\u0627\u0631\u06a9\u062a \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u06a9\u0627\u0644\u0627\u06cc \u0646\u0648\u0634\u0627\u0628\u0647 \u06a9\u0648\u06a9\u0627\u06a9\u0648\u0644\u0627 \u0631\u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0647. \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0646\u0627\u0645 \u06a9\u0627\u0644\u0627 \u06cc\u0627 \u0642\u06cc\u0645\u062a \u0631\u0648 \u0648\u0627\u0631\u062f \u06a9\u0646\u0647\u060c \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u0628\u0634\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0644\u0627 \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u06a9\u062f\u0648\u0645 \u062f\u0633\u062a\u0647 \u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0646\u0648\u0634\u06cc\u062f\u0646\u06cc\u200c\u0647\u0627\n\n\u0644\u0628\u0646\u06cc\u0627\u062a\n\n\u0645\u0648\u0627\u062f \u0634\u0648\u06cc\u0646\u062f\u0647\n\n\u062a\u0646\u0642\u0644\u0627\u062a\n\n\u0645\u0648\u0627\u062f \u067e\u0631\u0648\u062a\u0626\u06cc\u0646\u06cc\n\n...\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u06af\u0627\u0647 \u0627\u0648\u0644\u060c \u0634\u0627\u06cc\u062f \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0641\u0642\u0637 \u06cc\u06a9 \u0644\u06cc\u0633\u062a \u0633\u0627\u062f\u0647 \u0627\u0632 \u0627\u0633\u0645\u200c\u0647\u0627 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u0647. \u0627\u0645\u0627 \u062f\u0631 \u0648\u0627\u0642\u0639\u060c \u0627\u06cc\u0646 \u0644\u06cc\u0633\u062a \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u0631\u062c\u0639 (Reference Data) \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u061b \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u06a9\u0647 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u0645\u0647 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0627\u0648\u0646 \u0648\u0627\u0628\u0633\u062a\u0647 \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u06a9\u0644\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Server<br>\u2193<br>Category API<br>\u2193<br>Repository<br>\u2193<br>Room<br>\u2193<br>Flow<br>\u2193<br>Category ViewModel<br>\u2193<br>Compose List<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u0634\u0627\u06cc\u062f \u0634\u0628\u06cc\u0647 \u062f\u0631\u0633\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u06cc\u06a9 \u062a\u0641\u0627\u0648\u062a \u0645\u0647\u0645 \u062f\u0627\u0631\u0647. \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0646\u06cc\u0633\u062a\u0646 \u06a9\u0647 \u0647\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc \u062e\u0648\u062f\u0634 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062a\u0648\u0633\u0637 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u0634\u0646 \u0648 \u0628\u06cc\u0646 \u0647\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u0634\u062a\u0631\u06a9 \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0686\u0631\u0627 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u062b\u0627\u0628\u062a \u0646\u06cc\u0633\u062a\u0646\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0634\u0627\u06cc\u062f \u0627\u0648\u0644\u06cc\u0646 \u0627\u06cc\u062f\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val categories = listOf(\n\n    \"\u0646\u0648\u0634\u06cc\u062f\u0646\u06cc\",\n\n    \"\u0644\u0628\u0646\u06cc\u0627\u062a\",\n\n    \"\u0634\u0648\u06cc\u0646\u062f\u0647\"\n\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> categories <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">listOf<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;\u0646\u0648\u0634\u06cc\u062f\u0646\u06cc&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;\u0644\u0628\u0646\u06cc\u0627\u062a&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;\u0634\u0648\u06cc\u0646\u062f\u0647&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u06a9\u0648\u0686\u06a9 \u0634\u0627\u06cc\u062f \u062c\u0648\u0627\u0628 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0641\u0631\u0636 \u06a9\u0646 \u0641\u0631\u062f\u0627 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u062f\u0633\u062a\u0647 \u062c\u062f\u06cc\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>\u0646\u0627\u0645 \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647.<\/li>\n\n\n\n<li>\u062a\u0631\u062a\u06cc\u0628 \u0646\u0645\u0627\u06cc\u0634 \u0631\u0648 \u0639\u0648\u0636 \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>\u0628\u0639\u0636\u06cc \u062f\u0633\u062a\u0647\u200c\u0647\u0627 \u0631\u0648 \u062d\u0630\u0641 \u06a9\u0646\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0644\u06cc\u0633\u062a \u062f\u0627\u062e\u0644 \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0634\u0647\u060c \u0628\u0631\u0627\u06cc \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u0627\u06cc\u062f \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u06cc\u0645. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u062f\u0644 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u062f\u0633\u062a\u0647 \u0641\u0642\u0637 \u06cc\u06a9 \u0627\u0633\u0645 \u0646\u06cc\u0633\u062a. \u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class Category(\n\n    val id: Long,\n\n    val name: String,\n\n    val icon: String?,\n\n    val parentId: Long?\n\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Category<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> id: <\/span><span style=\"color: #6F42C1\">Long<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> name: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> icon: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">?,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> parentId: <\/span><span style=\"color: #6F42C1\">Long<\/span><span style=\"color: #24292E\">?<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0641\u06cc\u0644\u062f \u062f\u0644\u06cc\u0644 \u062e\u0648\u062f\u0634 \u0631\u0648 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>id<\/code><br>\u0634\u0646\u0627\u0633\u0647 \u0627\u0635\u0644\u06cc \u062f\u0633\u062a\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>name<\/code><br>\u0645\u062a\u0646\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>icon<\/code><br>\u0645\u0645\u06a9\u0646\u0647 \u0622\u062f\u0631\u0633 \u0622\u06cc\u06a9\u0648\u0646 \u06cc\u0627 \u0646\u0627\u0645 \u0622\u0646 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>parentId<\/code><br>\u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0647\u200c\u0647\u0627\u06cc \u062a\u0648 \u062f\u0631 \u062a\u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u0645\u0648\u0627\u062f \u063a\u0630\u0627\u06cc\u06cc<br>\u2193<br>\u0646\u0648\u0634\u06cc\u062f\u0646\u06cc<br>\u2193<br>\u0646\u0648\u0634\u0627\u0628\u0647<br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 id \u0645\u0647\u0645\u200c\u062a\u0631 \u0627\u0632 name \u0627\u0633\u062a\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0627\u0645\u0631\u0648\u0632 \u0633\u0631\u0648\u0631 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>id = 8\n\nname = \u0646\u0648\u0634\u06cc\u062f\u0646\u06cc\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u062f\u0627 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0627\u0633\u0645\u0634 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>id = 8\n\nname = \u0646\u0648\u0634\u06cc\u062f\u0646\u06cc \u0648 \u0622\u0628\u0645\u06cc\u0648\u0647\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0644\u0627\u0647\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 Name \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0628\u0627\u0634\u0646\u060c \u0647\u0645\u0647 \u0627\u0631\u062a\u0628\u0627\u0637\u200c\u0647\u0627 \u062e\u0631\u0627\u0628 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0631 \u0641\u0642\u0637 id \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CategoryId = 8\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0648\u0642\u062a \u0627\u0633\u0645 \u0639\u0648\u0636 \u0628\u0634\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0633\u0645 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0634\u0647 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0628\u0627 \u0634\u0646\u0627\u0633\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647\u060c \u0646\u0647 \u0645\u062a\u0646 \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Endpoint \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0686\u06cc\u0632\u06cc \u0634\u0628\u06cc\u0647 \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@GET(\"categories\")\nsuspend fun getCategories(): List&lt;CategoryDto>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@GET<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;categories&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">getCategories<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">CategoryDto<\/span><span style=\"color: #24292E\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;\n  {\n    \"id\":1,\n    \"name\":\"\u0646\u0648\u0634\u06cc\u062f\u0646\u06cc\"\n  },\n  {\n    \"id\":2,\n    \"name\":\"\u0644\u0628\u0646\u06cc\u0627\u062a\"\n  }\n&#93;\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">&#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;id&quot;<\/span><span style=\"color: #24292E\">:<\/span><span style=\"color: #6F42C1\">1<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;name&quot;<\/span><span style=\"color: #24292E\">:<\/span><span style=\"color: #032F62\">&quot;\u0646\u0648\u0634\u06cc\u062f\u0646\u06cc&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;id&quot;<\/span><span style=\"color: #24292E\">:<\/span><span style=\"color: #6F42C1\">2<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;name&quot;<\/span><span style=\"color: #24292E\">:<\/span><span style=\"color: #032F62\">&quot;\u0644\u0628\u0646\u06cc\u0627\u062a&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">&#93;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u067e\u0627\u0633\u062e \u0631\u0648 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>response.map {\n\n    it.toEntity()\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">response.<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    it.<\/span><span style=\"color: #6F42C1\">toEntity<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>categoryDao.upsertAll(\n    entities\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">categoryDao.<\/span><span style=\"color: #6F42C1\">upsertAll<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    entities<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 \u0647\u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">API<br>\u2193<br>Room<br>\u2193<br>Flow<br>\u2193<br>UI<br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 Room\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0634\u0627\u06cc\u062f \u0628\u06af\u06cc \u0647\u0631 \u0628\u0627\u0631 \u0635\u0641\u062d\u0647 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0628\u0627\u0632 \u0634\u062f \u0627\u0632 API \u0628\u062e\u0648\u0646\u06cc\u0645. \u0627\u0645\u0627 \u0686\u0646\u062f \u0645\u0634\u06a9\u0644 \u067e\u06cc\u0634 \u0645\u06cc\u0627\u062f. \u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0646\u0628\u0627\u0634\u0647 \u0647\u06cc\u0686 \u062f\u0633\u062a\u0647\u200c\u0627\u06cc \u0646\u062f\u0627\u0631\u06cc\u0645. \u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06a9\u0646\u062f \u0628\u0627\u0634\u0647 \u0647\u0631 \u0628\u0627\u0631 \u0628\u0627\u06cc\u062f \u0645\u0646\u062a\u0638\u0631 \u0628\u0645\u0648\u0646\u06cc\u0645. \u0627\u06af\u0631 \u0686\u0646\u062f \u0635\u0641\u062d\u0647 \u0627\u0632 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646 \u0647\u0631 \u0635\u0641\u062d\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u0632\u0646\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0647\u0645 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u0634\u0627\u0647\u062f\u0647 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Repository:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun observeCategories():\n\nFlow&lt;List&lt;Category>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeCategories<\/span><span style=\"color: #24292E\">():<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">Flow<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">List<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">Category<\/span><span style=\"color: #D73A49\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 Flow \u0647\u0645\u06cc\u0634\u0647 \u0622\u062e\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0631\u0648 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u062f\u0633\u062a\u0647 \u062c\u062f\u06cc\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 Sync \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647:<br>Room \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. Flow \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. UI \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u062f\u0648\u0646 \u062d\u062a\u06cc \u06cc\u06a9 Refresh \u062f\u0633\u062a\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">ViewModel<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 \u0647\u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val categories =\n\nrepository\n    .observeCategories()\n    .stateIn(...)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> categories <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">repository<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">observeCategories<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">stateIn<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #D73A49\">..<\/span><span style=\"color: #24292E\">.)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u0647\u0645\u06cc\u0646 State \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">State \u0635\u0641\u062d\u0647<\/h1>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class CategoriesUiState(\n\n    val categories:\n        List&lt;Category> = emptyList(),\n\n    val isLoading:Boolean=false,\n\n    val error:String?=null\n\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">CategoriesUiState<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> categories:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        List<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">Category<\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">emptyList<\/span><span style=\"color: #24292E\">(),<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isLoading:<\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> error:<\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">?<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0641\u0642\u0637 \u06cc\u06a9\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0635\u0641\u062d\u0647 \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Loading \u0648 Error \u0647\u0645 \u0628\u0627\u06cc\u062f \u06a9\u0646\u0627\u0631 \u0627\u0648\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u0644\u06cc\u0633\u062a<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Compose:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LazyColumn {\n\n    items(\n\n        state.categories\n\n    ) { category ->\n\n        CategoryItem(category)\n\n    }\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">LazyColumn<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">items<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        state.categories<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) { category <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">CategoryItem<\/span><span style=\"color: #24292E\">(category)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 LazyColumn \u0641\u0642\u0637 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647 \u06a9\u0647 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0647\u0632\u0627\u0631 \u062f\u0633\u062a\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u0647\u0632\u0627\u0631 Composable \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 LazyColumn \u0627\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 LazyColumn\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646:<br>\u06f2\u06f0 \u062f\u0633\u062a\u0647<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0642\u06cc \u0646\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627:<br>\u06f2\u06f0\u06f0\u06f0 \u062f\u0633\u062a\u0647<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u0632 Column \u0645\u0639\u0645\u0648\u0644\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06f2\u06f0\u06f0\u06f0 Composable \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0645\u0635\u0631\u0641 \u062d\u0627\u0641\u0638\u0647 \u0628\u0627\u0644\u0627 \u0645\u06cc\u0631\u0647. \u0627\u0633\u06a9\u0631\u0648\u0644 \u06a9\u0646\u062f \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 LazyColumn \u0641\u0642\u0637 \u0628\u062e\u0634 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0633\u062a\u0647<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u06a9\u0644\u06cc\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>viewModel.onCategorySelected(\n    category.id\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">viewModel.<\/span><span style=\"color: #6F42C1\">onCategorySelected<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    category.id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0642\u062a \u06a9\u0646. id \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0647. \u0646\u0647 Name. \u0686\u0648\u0646 \u0634\u0646\u0627\u0633\u0647 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u062e\u0644 ViewModel:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>_form.update {\n\n    it.copy(\n\n        categoryId = id\n\n    )\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">_form.<\/span><span style=\"color: #6F42C1\">update<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    it.<\/span><span style=\"color: #6F42C1\">copy<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        categoryId <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> id<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0642\u06cc\u0642\u0627\u064b \u0645\u062b\u0644 TextField. \u0641\u0642\u0637 \u0627\u06cc\u0646 \u0628\u0627\u0631 \u0645\u0642\u062f\u0627\u0631 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0641\u0642\u0637 \u0634\u0646\u0627\u0633\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0647\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0644\u0627:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\u0648\u06a9\u0627\u06a9\u0648\u0644\u0627\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Category:\n\n\u0646\u0648\u0634\u06cc\u062f\u0646\u06cc\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">Category:<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\u0646\u0648\u0634\u06cc\u062f\u0646\u06cc<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f\u0627\u064b \u0627\u06af\u0631 \u0627\u0633\u0645 \u062f\u0633\u062a\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647: \u062a\u0645\u0627\u0645 \u06a9\u0627\u0644\u0627\u0647\u0627 \u0628\u0627\u06cc\u062f \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0628\u0634\u0646. \u0627\u0645\u0627 \u0627\u06af\u0631:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>categoryId = 8\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">categoryId <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">8<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0642\u0637 \u062c\u062f\u0648\u0644 Category \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062a\u0645\u0627\u0645 \u06a9\u0627\u0644\u0627\u0647\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0633\u0645 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062c\u0633\u062a\u062c\u0648 \u062f\u0627\u062e\u0644 \u062f\u0633\u062a\u0647\u200c\u0647\u0627<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u062f\u0633\u062a\u0647\u200c\u0647\u0627 \u0632\u06cc\u0627\u062f \u0628\u0627\u0634\u0646: \u06a9\u0627\u0631\u0628\u0631 \u062f\u0648\u0633\u062a \u0646\u062f\u0627\u0631\u0647 \u0627\u0633\u06a9\u0631\u0648\u0644 \u06a9\u0646\u0647. \u0628\u0647\u062a\u0631\u0647 Search \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun search(\n\n    query:String\n\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">search<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    query:<\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Repository:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>categoryDao.search(query)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">categoryDao.<\/span><span style=\"color: #6F42C1\">search<\/span><span style=\"color: #24292E\">(query)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0645\u0647 \u062f\u0633\u062a\u0647\u200c\u0647\u0627 \u062f\u0627\u062e\u0644 Compose \u0641\u06cc\u0644\u062a\u0631 \u0628\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0631\u0627\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0647\u0632\u0627\u0631 \u062f\u0633\u062a\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645: \u0641\u06cc\u0644\u062a\u0631 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631\u0647. \u0648 \u0641\u0642\u0637 \u0646\u062a\u0627\u06cc\u062c \u0644\u0627\u0632\u0645 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0633\u0631\u0648\u0631 \u062a\u0631\u062a\u06cc\u0628 \u0646\u0645\u0627\u06cc\u0634 \u0631\u0648 \u0645\u0634\u062e\u0635 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0648\u0627\u062f \u063a\u0630\u0627\u06cc\u06cc\n\n\u0646\u0648\u0634\u06cc\u062f\u0646\u06cc\n\n\u0644\u0628\u0646\u06cc\u0627\u062a\n\n&#8230;\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0628\u0647\u062a\u0631\u0647 \u062a\u0631\u062a\u06cc\u0628 \u0631\u0648 \u0647\u0645 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0628\u06af\u06cc\u0631\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val sortOrder:Int\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> sortOrder:<\/span><span style=\"color: #6F42C1\">Int<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>ORDER BY sortOrder\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">ORDER BY sortOrder<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u062c\u0627\u06cc \u0645\u0631\u062a\u0628 \u06a9\u0631\u062f\u0646 \u062f\u0633\u062a\u06cc \u062f\u0627\u062e\u0644 UI.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062f\u0633\u062a\u0647\u200c\u0647\u0627\u06cc \u062a\u0648 \u062f\u0631 \u062a\u0648<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0641\u0642\u0637 \u06cc\u06a9 \u0633\u0637\u062d \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u0645\u0648\u0627\u062f \u063a\u0630\u0627\u06cc\u06cc<br>\u2193<br>\u0646\u0648\u0634\u06cc\u062f\u0646\u06cc<br>\u2193<br>\u0622\u0628\u0645\u06cc\u0648\u0647<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>parentId\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647 \u0631\u0648 \u062d\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>parentId = null\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">parentId <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u062f\u0633\u062a\u0647 \u0627\u0635\u0644\u06cc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>parentId = 5\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">parentId <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">5<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u0632\u06cc\u0631\u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0633\u062a\u0647 \u0634\u0645\u0627\u0631\u0647 \u06f5.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u06af\u0631\u0641\u062a\u0646 \u0632\u06cc\u0631\u0645\u062c\u0645\u0648\u0639\u0647\u200c\u0647\u0627<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Repository:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>observeChildren(\n    parentId\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">observeChildren<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    parentId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u062e\u0644 DAO:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>WHERE parentId = :parentId\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">WHERE parentId <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> :<\/span><span style=\"color: #6F42C1\">parentId<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0644 \u062f\u0631\u062e\u062a \u062f\u0627\u062e\u0644 Compose \u067e\u0631\u062f\u0627\u0632\u0634 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Refresh<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 Dashboard:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>refreshCategories()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">refreshCategories<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Repository:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">API<br>\u2193<br>Room<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">API<br>\u2193<br>Compose<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0647\u0645\u06cc\u0634\u0647 Room \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0646\u0628\u0648\u062f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u062f\u0633\u062a\u0647\u200c\u0647\u0627 \u062f\u0627\u062e\u0644 Room \u0647\u0633\u062a\u0646:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u0686\u0646\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u0633\u062a\u0647\u200c\u0647\u0627 \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647. \u062d\u062a\u06cc \u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0627\u0634\u0647. \u0641\u0642\u0637 \u062f\u0633\u062a\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u06cc \u06a9\u0647 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0633\u0627\u062e\u062a\u0647 \u0647\u0646\u0648\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u0634\u062f\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u06af\u0631 \u0647\u06cc\u0686 \u062f\u0633\u062a\u0647\u200c\u0627\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648 \u062d\u0627\u0644\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0627\u0648\u0644:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Loading\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0646\u0648\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u0631\u0633\u06cc\u062f\u0647. \u062f\u0648\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Empty\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647. \u0627\u0645\u0627 \u0648\u0627\u0642\u0639\u0627\u064b \u0647\u06cc\u0686 \u062f\u0633\u062a\u0647\u200c\u0627\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647. \u067e\u06cc\u0627\u0645 \u0645\u0646\u0627\u0633\u0628:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0646\u0648\u0632 \u0647\u06cc\u0686 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0646\u0634\u062f\u0647.<br>\u0627\u06cc\u0646 \u0628\u0627 Error \u0641\u0631\u0642 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0633\u062a\u0647 \u0646\u0628\u0627\u06cc\u062f \u0645\u062a\u0646 \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u0647<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u0627\u0641\u0631\u0627\u062f \u062f\u0627\u062e\u0644 \u0641\u0631\u0645 \u0645\u06cc\u200c\u0646\u0648\u06cc\u0633\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>selectedCategoryName\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">selectedCategoryName<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648 \u0628\u0639\u062f \u0647\u0645\u0648\u0646 \u0631\u0648 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0637\u0631\u0627\u062d\u06cc \u0627\u0634\u062a\u0628\u0627\u0647\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>selectedCategoryId\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">selectedCategoryId<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648 \u0647\u0631 \u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0648\u062f:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Category Table<br>\u2193<br>Name<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0647\u0631 \u0628\u062e\u0634<\/h1>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Compose<br>\u0646\u0645\u0627\u06cc\u0634 \u0644\u06cc\u0633\u062a<br>\u06a9\u0644\u06cc\u06a9 \u0631\u0648\u06cc \u0622\u06cc\u062a\u0645<br>\u2193<br>ViewModel<br>\u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0646\u062a\u062e\u0627\u0628<br>\u2193<br>Repository<br>Sync<br>\u2193<br>API<br>\u2193<br>Room<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 \u0647\u0645\u06cc\u0634\u0647 UI \u0646\u0628\u0627\u06cc\u062f \u0686\u06cc\u0632\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 Retrofit \u06cc\u0627 SQL \u0628\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0641\u0642\u0637 \u06cc\u06a9 \u0644\u06cc\u0633\u062a \u0633\u0627\u062f\u0647 \u0646\u06cc\u0633\u062a\u0646<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u0686\u0646\u062f \u0627\u0633\u0645 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0644\u06cc\u0633\u062a \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647 \u0648 \u0631\u0648\u06cc \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0648\u0646\u200c\u0647\u0627 \u06a9\u0644\u06cc\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0645\u0627 \u067e\u0634\u062a \u0647\u0645\u06cc\u0646 \u062a\u0639\u0627\u0645\u0644 \u0633\u0627\u062f\u0647\u060c \u06cc\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u0627\u0645\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. Repository \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Flow \u0622\u062e\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0631\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 ViewModel \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647. \u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u0647\u0645\u06cc\u0646 State \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0634\u0646\u0627\u0633\u0647 \u062f\u0633\u062a\u0647 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0631\u0648 \u0628\u0647 ViewModel \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>\u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u0631\u062c\u0639 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0633\u062a\u0646\u060c \u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u0635\u0648\u0635 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631<\/strong>. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0628\u0627\u06cc\u062f \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0646\u060c \u062f\u0627\u062e\u0644 Room \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0634\u0646 \u0648 \u0647\u0645\u0647 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u0647\u0645\u0627\u0646 \u0646\u0633\u062e\u0647 \u0645\u0634\u062a\u0631\u06a9 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 \u0645\u0634\u0627\u0647\u062f\u0647 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0647\u0631\u0633\u062a \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0647\u0645\u06cc\u0634\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0627\u0632 Room \u0645\u06cc\u200c\u062e\u0648\u0646\u0647 \u0648 \u0647\u0646\u06af\u0627\u0645 \u0627\u0646\u062a\u062e\u0627\u0628\u060c \u0641\u0642\u0637 \u0634\u0646\u0627\u0633\u0647 \u062f\u0633\u062a\u0647 \u0631\u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062a\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0627\u0645 \u06cc\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0633\u062a\u0647\u200c\u0647\u0627 \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0644\u0627\u0647\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0628\u06cc\u0633\u062a\u200c\u0648\u0647\u0634\u062a\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0637\u0648\u0631 \u0647\u0632\u0627\u0631\u0627\u0646 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u062f\u0627\u062e\u0644 \u06af\u0648\u0634\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0647 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631\u06cc\u0646 \u0634\u06a9\u0644 \u0645\u0645\u06a9\u0646 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627\u06cc \u06a9\u0627\u0631\u060c \u0635\u0627\u062d\u0628 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0641\u0631\u0648\u0634\u06af\u0627\u0647\u0634 \u0631\u0648 \u0633\u0627\u062e\u062a\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u0634 \u0631\u0648 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0647\u060c \u0645\u0648\u0642\u0639\u06cc\u062a\u0634 \u0631\u0648 \u0631\u0648\u06cc \u0646\u0642\u0634\u0647 \u062b\u0628\u062a \u06a9\u0631\u062f\u0647 \u0648 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0647\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0646. \u062d\u0627\u0644\u0627 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0628\u062e\u0634 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0634\u0631\u0648\u0639 \u0645\u06cc\u0634\u0647: <strong>\u0644\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u0632\u0645\u0627\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u0647\u0645\u06cc\u0646 \u0628\u062e\u0634 \u0645\u06cc\u200c\u06af\u0630\u0631\u0647. \u0627\u0648 \u0647\u0631 \u0631\u0648\u0632 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u0647\u060c \u06a9\u0627\u0644\u0627\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0648\u0636\u0639\u06cc\u062a \u06a9\u0627\u0644\u0627\u0647\u0627 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0648 \u062d\u0633\u0627\u0633\u200c\u062a\u0631\u06cc\u0646 \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc \u06a9\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a. \u0627\u06af\u0631 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u06a9\u0646\u062f \u0628\u0627\u0634\u0647\u060c \u062d\u062a\u06cc \u0627\u06af\u0631 \u0628\u0642\u06cc\u0647 \u0642\u0633\u0645\u062a\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0639\u0627\u0644\u06cc \u0628\u0627\u0634\u0646\u060c \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0633\u0627\u0633 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0644 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u0646\u062f \u0648 \u0628\u06cc\u200c\u06a9\u06cc\u0641\u06cc\u062a\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631 \u0641\u0642\u0637 \u06cc\u06a9 \u0644\u06cc\u0633\u062a \u0627\u0632 \u06a9\u0627\u0644\u0627\u0647\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647\u060c \u0627\u0645\u0627 \u067e\u0634\u062a \u0647\u0645\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0686\u0646\u062f \u0633\u06cc\u0633\u062a\u0645 \u0645\u062e\u062a\u0644\u0641 \u0628\u0627 \u0647\u0645 \u0647\u0645\u06a9\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Server<br>\u2193<br>Products API<br>\u2193<br>Repository<br>\u2193<br>Room<br>\u2193<br>Flow<br>\u2193<br>ProductsViewModel<br>\u2193<br>Compose List<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0634\u0628\u06cc\u0647 \u062f\u0631\u0633\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc\u0647\u060c \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0628\u0627\u0631 \u0628\u0627 \u06cc\u06a9 \u062a\u0641\u0627\u0648\u062a \u0645\u0647\u0645 \u0631\u0648\u0628\u0647\u200c\u0631\u0648 \u0645\u06cc\u200c\u0634\u06cc\u0645: <strong>\u062a\u0639\u062f\u0627\u062f \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062e\u06cc\u0644\u06cc \u0628\u06cc\u0634\u062a\u0631\u0647.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0627 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0641\u0631\u0642 \u062f\u0627\u0631\u0647\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062f\u0631\u0633 \u0642\u0628\u0644 \u0634\u0627\u06cc\u062f \u0641\u0642\u0637 \u0686\u0646\u062f \u062f\u0647 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u062f\u0627\u0634\u062a\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06f4\u06f0 \u062f\u0633\u062a\u0647<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0645\u06a9\u0646\u0647 \u0627\u06cc\u0646 \u062a\u0639\u062f\u0627\u062f \u0628\u0627\u0634\u0646:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06f3\u06f0\u06f0 \u06a9\u0627\u0644\u0627<br>\u06f5\u06f0\u06f0\u06f0 \u06a9\u0627\u0644\u0627<br>\u06f5\u06f0\u06f0\u06f0\u06f0 \u06a9\u0627\u0644\u0627<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0644\u06cc\u0633\u062a\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9 \u0645\u0646\u0627\u0633\u0628 \u0628\u0648\u062f\u0646\u060c \u0627\u06cc\u0646\u062c\u0627 \u062f\u06cc\u06af\u0647 \u062c\u0648\u0627\u0628 \u0646\u0645\u06cc\u200c\u062f\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u062f\u0644 \u0645\u062d\u0635\u0648\u0644<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0641\u0642\u0637 \u0627\u0633\u0645 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class Product(\n\n    val id: Long,\n\n    val name: String,\n\n    val barcode: String?,\n\n    val categoryId: Long,\n\n    val imageUrl: String?,\n\n    val lastPrice: Long?\n\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Product<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> id: <\/span><span style=\"color: #6F42C1\">Long<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> name: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> barcode: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">?,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> categoryId: <\/span><span style=\"color: #6F42C1\">Long<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> imageUrl: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">?,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> lastPrice: <\/span><span style=\"color: #6F42C1\">Long<\/span><span style=\"color: #24292E\">?<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u06a9\u062f\u0648\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u0641\u06cc\u0644\u062f\u0647\u0627 \u062f\u0644\u06cc\u0644 \u062e\u0648\u062f\u0634\u0648\u0646 \u0631\u0648 \u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>id<\/code><br>\u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>name<\/code><br>\u0646\u0627\u0645 \u06a9\u0627\u0644\u0627.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>barcode<\/code><br>\u0628\u0627\u0631\u06a9\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>categoryId<\/code><br>\u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u062c\u062f\u0648\u0644 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>imageUrl<\/code><br>\u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627\u0644\u0627.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>lastPrice<\/code><br>\u0622\u062e\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u062b\u0628\u062a\u200c\u0634\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0642\u06cc\u0645\u062a \u062f\u0627\u062e\u0644 Product \u0627\u0633\u062a\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0628\u0639\u062f\u0627\u064b \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u062a\u0627\u0631\u06cc\u062e\u0686\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646. \u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0631\u0648\u0632<br>\u062f\u06cc\u0631\u0648\u0632<br>\u0647\u0641\u062a\u0647 \u0642\u0628\u0644<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u0648\u0646 \u062d\u0627\u0644\u062a \u0634\u0627\u06cc\u062f \u0622\u062e\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0633\u0631\u06cc\u0639 \u062f\u0627\u062e\u0644 Product \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0634\u0647 \u0648 \u062a\u0627\u0631\u06cc\u062e\u0686\u0647 \u06a9\u0627\u0645\u0644 \u062f\u0627\u062e\u0644 \u062c\u062f\u0648\u0644 \u062f\u06cc\u06af\u0631\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647. \u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u062b\u0627\u0644\u200c\u0647\u0627\u06cc \u062e\u0648\u0628 \u0637\u0631\u0627\u062d\u06cc \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Endpoint:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@GET(\"products\")\nsuspend fun getProducts(): List&lt;ProductDto>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@GET<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;products&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">getProducts<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductDto<\/span><span style=\"color: #24292E\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0627\u0633\u062e:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;\n {\n   \"id\":1,\n   \"name\":\"\u06a9\u0648\u06a9\u0627\u06a9\u0648\u0644\u0627\",\n   \"categoryId\":8\n }\n&#93;\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">&#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">   <\/span><span style=\"color: #032F62\">&quot;id&quot;<\/span><span style=\"color: #24292E\">:<\/span><span style=\"color: #6F42C1\">1<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">   <\/span><span style=\"color: #032F62\">&quot;name&quot;<\/span><span style=\"color: #24292E\">:<\/span><span style=\"color: #032F62\">&quot;\u06a9\u0648\u06a9\u0627\u06a9\u0648\u0644\u0627&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">   <\/span><span style=\"color: #032F62\">&quot;categoryId&quot;<\/span><span style=\"color: #24292E\">:<\/span><span style=\"color: #6F42C1\">8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">&#93;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Repository:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val entities =\n    response.map {\n\n        it.toEntity()\n\n    }\n\nproductDao.upsertAll(\n    entities\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> entities <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    response.<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        it.<\/span><span style=\"color: #6F42C1\">toEntity<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">productDao.<\/span><span style=\"color: #6F42C1\">upsertAll<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    entities<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 \u0647\u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">API<br>\u2193<br>Room<br>\u2193<br>Flow<br>\u2193<br>UI<br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0632 API \u0646\u062e\u0648\u0646\u06cc\u0645\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0631 \u0628\u0627\u0631 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0645\u0633\u062a\u0642\u06cc\u0645 API \u0628\u062e\u0648\u0646\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u0628\u0627\u0632 \u0634\u062f\u0646 \u0635\u0641\u062d\u0647<br>\u2193<br>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u06cc\u0646\u062a\u0631\u0646\u062a<br>\u2193<br>\u0627\u0646\u062a\u0638\u0627\u0631<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0627\u0634\u0647: \u0647\u06cc\u0686 \u0645\u062d\u0635\u0648\u0644\u06cc \u0646\u062f\u0627\u0631\u06cc\u0645. \u0627\u06af\u0631 \u06a9\u0646\u062f \u0628\u0627\u0634\u0647: \u0635\u0641\u062d\u0647 \u062f\u06cc\u0631 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u0627\u06af\u0631 Room \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u0628\u0627\u0632 \u0634\u062f\u0646 \u0635\u0641\u062d\u0647<br>\u2193<br>Room<br>\u2193<br>\u0646\u0645\u0627\u06cc\u0634 \u0641\u0648\u0631\u06cc<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 Sync \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Repository:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun observeProducts():\n\nFlow&lt;List&lt;Product>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeProducts<\/span><span style=\"color: #24292E\">():<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">Flow<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">List<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">Product<\/span><span style=\"color: #D73A49\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val products =\n\nrepository\n    .observeProducts()\n    .stateIn(...)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">repository<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">observeProducts<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">stateIn<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #D73A49\">..<\/span><span style=\"color: #24292E\">.)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0641\u0642\u0637 State \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">State \u0635\u0641\u062d\u0647<\/h1>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class ProductsUiState(\n\n    val products:\n        List&lt;Product> = emptyList(),\n\n    val isLoading:Boolean=false,\n\n    val isRefreshing:Boolean=false,\n\n    val error:String?=null\n\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ProductsUiState<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        List<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">Product<\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">emptyList<\/span><span style=\"color: #24292E\">(),<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isLoading:<\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isRefreshing:<\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> error:<\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">?<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0642\u062a \u06a9\u0646. Loading \u0648 Refresh \u06cc\u06a9\u06cc \u0646\u06cc\u0633\u062a\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Loading<\/h1>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u0627\u0648\u0644\u06cc\u0646 \u0648\u0631\u0648\u062f<br>\u2193<br>\u0647\u06cc\u0686 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0646\u062f\u0627\u0631\u06cc\u0645<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 Refresh:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u0644\u06cc\u0633\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647<br>\u2193<br>\u062f\u0627\u062f\u0647 \u062c\u062f\u06cc\u062f \u062f\u0631 \u062d\u0627\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0633\u062a<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Refresh \u0646\u0628\u0627\u06cc\u062f \u06a9\u0644 \u0635\u0641\u062d\u0647 \u0633\u0641\u06cc\u062f \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u0644\u06cc\u0633\u062a<\/h1>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LazyColumn {\n\n    items(\n\n        state.products,\n\n        key = { it.id }\n\n    ) {\n\n        ProductItem(it)\n\n    }\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">LazyColumn<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">items<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        state.products,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        key <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> { it.id }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">ProductItem<\/span><span style=\"color: #24292E\">(it)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>key = { it.id }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">key <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> { it.id }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc LazyColumn \u0627\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 key\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A<br>B<br>C<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0645\u062d\u0635\u0648\u0644 \u062c\u062f\u06cc\u062f \u0628\u0627\u0644\u0627\u06cc \u0644\u06cc\u0633\u062a \u0627\u0636\u0627\u0641\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062f\u0648\u0646 key:<br>Compose \u0645\u0645\u06a9\u0646\u0647 \u0641\u06a9\u0631 \u06a9\u0646\u0647 \u0647\u0645\u0647 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0627 id:<br>\u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u0641\u0642\u0637 \u06cc\u06a9 \u0622\u06cc\u062a\u0645 \u062c\u062f\u06cc\u062f \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0627\u0633\u06a9\u0631\u0648\u0644 \u0631\u0648\u0627\u0646\u200c\u062a\u0631 \u0648 Recomposition \u06a9\u0645\u062a\u0631 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">ProductItem<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0631\u062f\u06cc\u0641 \u0641\u0642\u0637 \u0645\u0633\u0626\u0648\u0644 \u0646\u0645\u0627\u06cc\u0634 \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644\u0647. \u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>ProductItem(\n\n    product,\n\n    onClick = {\n\n        ...\n\n    }\n\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">ProductItem<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    product,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    onClick <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">..<\/span><span style=\"color: #24292E\">.<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u062e\u0644 ProductItem \u0646\u0628\u0627\u06cc\u062f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Retrofit \u0628\u0627\u0634\u0647.<\/li>\n\n\n\n<li>SQL \u0628\u0627\u0634\u0647.<\/li>\n\n\n\n<li>ViewModel \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0642\u0637 UI.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062a\u0635\u0648\u06cc\u0631 \u0645\u062d\u0635\u0648\u0644<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0635\u0648\u06cc\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 URL \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;...\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Compose:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>AsyncImage(\n\n    model = product.imageUrl,\n\n    contentDescription = product.name\n\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">AsyncImage<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    model <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> product.imageUrl,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    contentDescription <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> product.name<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">AsyncImage \u062e\u0648\u062f\u0634 \u062f\u0627\u0646\u0644\u0648\u062f\u060c Cache \u0648 \u0646\u0645\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. ProductItem \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0628\u062f\u0648\u0646\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0627\u0632 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0645\u06cc\u0627\u062f.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u06af\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>imageUrl = null\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">imageUrl <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a: Placeholder \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u06cc\u0645. \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 Image \u062e\u0627\u0644\u06cc \u0628\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u0631\u062a\u0628\u0627\u0637 \u0645\u062d\u0635\u0648\u0644 \u0648 \u062f\u0633\u062a\u0647<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u062e\u0644 Product \u0641\u0642\u0637:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>categoryId\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>categoryName\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0631\u0627\u061f \u0686\u0648\u0646 \u062f\u0633\u062a\u0647 \u0645\u0645\u06a9\u0646\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u06cc\u0645 \u0627\u0633\u0645 \u062f\u0633\u062a\u0647 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">categoryId<br>\u2193<br>Category Table<br>\u2193<br>Category Name<br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0628\u0627\u06cc\u062f \u0627\u0633\u0645 \u062f\u0633\u062a\u0647 \u062f\u0627\u062e\u0644 Product \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647. \u0627\u06cc\u0646 \u062a\u06a9\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a. \u0627\u06af\u0631:<br>\u0644\u0628\u0646\u06cc\u0627\u062a<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0634\u0647:<br>\u0644\u0628\u0646\u06cc\u0627\u062a \u0648 \u0635\u0628\u062d\u0627\u0646\u0647<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0627\u06cc\u062f \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0646. \u0627\u0645\u0627 \u0627\u06af\u0631 \u0641\u0642\u0637 id \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645: \u0641\u0642\u0637 \u062c\u062f\u0648\u0644 Category \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0641\u0628\u0627\n\n\u0622\u062e\u0631\u06cc\u0646 \u062b\u0628\u062a\n\n\u067e\u0631\u0641\u0631\u0648\u0634\u200c\u062a\u0631\u06cc\u0646\n\n&#8230;\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0628\u06cc\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0647\u062a\u0631\u0647 \u062f\u0627\u062e\u0644 Repository \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647 \u062f\u0627\u062e\u0644 Compose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>observeProductsOrderedByName()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">observeProductsOrderedByName<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0627<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>ORDER BY name\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">ORDER BY name<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Refresh<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 Dashboard.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>refreshProducts()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">refreshProducts<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Repository:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">API<br>\u2193<br>Room<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">API<br>\u2193<br>Compose<br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0648\u062f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 Room \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc\u0647: \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0645\u0686\u0646\u0627\u0646 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0646\u0647\u0627 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0646\u062f\u0627\u0631\u06cc\u0645: \u0622\u062e\u0631\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0633\u0631\u0648\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Empty State<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0647\u0646\u0648\u0632 \u0647\u06cc\u0686 \u0645\u062d\u0635\u0648\u0644\u06cc \u0646\u062f\u0627\u0631\u0647: \u0646\u0628\u0627\u06cc\u062f \u0644\u06cc\u0633\u062a \u062e\u0627\u0644\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647:<br>\u0647\u0646\u0648\u0632 \u0645\u062d\u0635\u0648\u0644\u06cc \u062b\u0628\u062a \u0646\u06a9\u0631\u062f\u06cc.<br>\u0627\u0648\u0644\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644\u062a \u0631\u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646.<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u062f\u06a9\u0645\u0647:<br>\u0627\u0641\u0632\u0648\u062f\u0646 \u0645\u062d\u0635\u0648\u0644<br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Error<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Room \u062e\u0627\u0644\u06cc\n\n+\n\nAPI \u0647\u0645 \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0622\u0646\u06af\u0627\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u062e\u0637\u0627 \u062f\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u0627 Empty \u0641\u0631\u0642 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06cc\u06a9\u062c\u0627 \u062f\u0627\u0646\u0644\u0648\u062f \u0646\u0634\u0646\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06f8\u06f0 \u0647\u0632\u0627\u0631 \u06a9\u0627\u0644\u0627\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0647\u0645\u0647 \u0631\u0648 \u06cc\u06a9\u062c\u0627 \u0628\u06af\u06cc\u0631\u06cc\u0645:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u062f\u0627\u0646\u0644\u0648\u062f \u0637\u0648\u0644\u0627\u0646\u06cc<\/li>\n\n\n\n<li>\u062d\u0627\u0641\u0638\u0647 \u0632\u06cc\u0627\u062f<\/li>\n\n\n\n<li>\u0634\u0631\u0648\u0639 \u06a9\u0646\u062f \u0628\u0631\u0646\u0627\u0645\u0647<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u0628\u0632\u0631\u06af \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0635\u0641\u062d\u0647\u200c\u0627\u06cc (Pagination) \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646\u061b \u06cc\u0639\u0646\u06cc \u0641\u0642\u0637 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0627\u0646\u0644\u0648\u062f \u0645\u06cc\u0634\u0647 \u0648 \u0628\u0627 \u0627\u0633\u06a9\u0631\u0648\u0644 \u06a9\u0627\u0631\u0628\u0631\u060c \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc \u0628\u0647\u200c\u062a\u062f\u0631\u06cc\u062c \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0633\u062e\u0647 \u0627\u0648\u0644\u06cc\u0647 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0627\u06af\u0631 \u062a\u0639\u062f\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0631 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0645\u062d\u062f\u0648\u062f \u0628\u0627\u0634\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0641\u0639\u0644\u0627\u064b \u06a9\u0644 \u0644\u06cc\u0633\u062a \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645. \u0627\u0645\u0627 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u0631\u0627\u0647\u06a9\u0627\u0631 \u0628\u0631\u0627\u06cc \u0645\u0642\u06cc\u0627\u0633\u200c\u0647\u0627\u06cc \u0628\u0632\u0631\u06af \u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u0633\u06a9\u0631\u0648\u0644 \u0631\u0648\u0627\u0646<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06f2\u06f0\u06f0\u06f0 \u0645\u062d\u0635\u0648\u0644\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 ProductItem \u0633\u0646\u06af\u06cc\u0646 \u0628\u0627\u0634\u0647: \u0627\u0633\u06a9\u0631\u0648\u0644 \u06af\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 ProductItem \u0641\u0642\u0637 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0636\u0631\u0648\u0631\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u062a\u0635\u0648\u06cc\u0631<\/li>\n\n\n\n<li>\u0646\u0627\u0645<\/li>\n\n\n\n<li>\u0642\u06cc\u0645\u062a<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0627\u062e\u0644 \u0647\u0631 \u0622\u06cc\u062a\u0645:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u06cc\u0646\u062a\u0631\u0646\u062a<\/li>\n\n\n\n<li>Query \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633<\/li>\n\n\n\n<li>\u0645\u062d\u0627\u0633\u0628\u0627\u062a \u0633\u0646\u06af\u06cc\u0646<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u06a9\u0644\u06cc\u06a9 \u0631\u0648\u06cc \u0645\u062d\u0635\u0648\u0644<\/h1>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>viewModel.onProductClick(\n    product.id\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">viewModel.<\/span><span style=\"color: #6F42C1\">onProductClick<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    product.id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627\u0632 \u0647\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">id<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647 \u06a9\u0644 Product.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u0645\u0642\u0635\u062f \u0628\u0639\u062f\u06cc \u062e\u0648\u062f\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0645\u0644 \u0631\u0648 \u0627\u0632 Repository \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0628\u06cc\u0646 \u0635\u0641\u062d\u0647\u200c\u0647\u0627 \u0631\u0648 \u06a9\u0645\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062d\u0630\u0641 \u0645\u062d\u0635\u0648\u0644 \u0627\u0632 \u0644\u06cc\u0633\u062a<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u062d\u0630\u0641 \u0634\u062f. \u0627\u06af\u0631:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>key = { it.id }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">key <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> { it.id }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c Compose \u0641\u0642\u0637 \u0647\u0645\u0648\u0646 \u0622\u06cc\u062a\u0645 \u0631\u0648 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0644 \u0644\u06cc\u0633\u062a \u062f\u0648\u0628\u0627\u0631\u0647 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0647\u0631 \u0628\u062e\u0634<\/h1>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Compose\n\n\u0646\u0645\u0627\u06cc\u0634 \u0644\u06cc\u0633\u062a\n\n\u06a9\u0644\u06cc\u06a9 \u0631\u0648\u06cc \u0645\u062d\u0635\u0648\u0644\n\n\u2193\n\nViewModel\n\n\u0645\u062f\u06cc\u0631\u06cc\u062a State\n\n\u2193\n\nRepository\n\nSync\n\n\u2193\n\nAPI\n\n\u2193\n\nRoom\n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0627\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0622\u0634\u0646\u0627\u06cc MVVM \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a Refresh \u0648 Sync<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u0627\u06cc\u0646 \u062f\u0648 \u0645\u0641\u0647\u0648\u0645 \u0628\u0627 \u0647\u0645 \u0627\u0634\u062a\u0628\u0627\u0647 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0646. <strong>Refresh<\/strong> \u06cc\u0639\u0646\u06cc \u06a9\u0627\u0631\u0628\u0631 \u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0646. \u0627\u0645\u0627 <strong>Sync<\/strong> \u0645\u0641\u0647\u0648\u0645 \u0628\u0632\u0631\u06af\u200c\u062a\u0631\u06cc\u0647\u061b \u06cc\u0639\u0646\u06cc \u0647\u0645\u0627\u0647\u0646\u06af \u06a9\u0631\u062f\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0646 \u0633\u0631\u0648\u0631 \u0648 \u062d\u0627\u0641\u0638\u0647 \u0645\u062d\u0644\u06cc. \u0645\u0645\u06a9\u0646\u0647 Sync \u0641\u0642\u0637 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0647\u060c \u0628\u0639\u0636\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062d\u0630\u0641\u200c\u0634\u062f\u0647 \u0631\u0648 \u067e\u0627\u06a9 \u06a9\u0646\u0647 \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0648\u062c\u0648\u062f \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0647\u0631 Refresh \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627\u0639\u062b \u0634\u0631\u0648\u0639 \u06cc\u06a9 Sync \u0645\u06cc\u0634\u0647\u060c \u0627\u0645\u0627 Sync \u0641\u0642\u0637 \u0628\u0647 \u0645\u0639\u0646\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0631\u062f\u0646 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0633\u062a\u0646\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u0639\u0645\u0644\u06cc\u0627\u062a \u0628\u0639\u062f\u06cc \u0627\u0632 \u0647\u0645\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0634\u0631\u0648\u0639 \u0645\u06cc\u0634\u0646. \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0627\u06cc\u0646\u062c\u0627 \u0648\u0627\u0631\u062f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u062d\u0635\u0648\u0644<\/li>\n\n\n\n<li>\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0645\u062d\u0635\u0648\u0644<\/li>\n\n\n\n<li>\u062b\u0628\u062a \u0642\u06cc\u0645\u062a<\/li>\n\n\n\n<li>\u062d\u0630\u0641 \u0645\u062d\u0635\u0648\u0644<\/li>\n\n\n\n<li>\u062c\u0633\u062a\u062c\u0648<\/li>\n\n\n\n<li>\u0641\u06cc\u0644\u062a\u0631<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u06cc\u0634\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u06af\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u062f\u0631\u0633\u062a \u0637\u0631\u0627\u062d\u06cc \u0628\u0634\u0647\u060c \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0648 \u062a\u0645\u06cc\u0632\u062a\u0631 \u062e\u0648\u0627\u0647\u0646\u062f \u0634\u062f. \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0647\u0631\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c ViewModel \u0622\u062e\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0647\u200c\u0635\u0648\u0631\u062a Flow \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Compose \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>LazyColumn<\/code> \u0641\u0642\u0637 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647 \u062a\u0627 \u062d\u062a\u06cc \u0628\u0627 \u062a\u0639\u062f\u0627\u062f \u0632\u06cc\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u060c \u0635\u0641\u062d\u0647 \u0633\u0631\u06cc\u0639\u060c \u0631\u0648\u0627\u0646 \u0648 \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0628\u06cc\u0633\u062a\u200c\u0648\u0646\u0647\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0637\u0648\u0631 \u0628\u06cc\u0646 \u0647\u0632\u0627\u0631\u0627\u0646 \u0645\u062d\u0635\u0648\u0644 \u062f\u0631 \u06a9\u0645\u062a\u0631 \u0627\u0632 \u0686\u0646\u062f \u0644\u062d\u0638\u0647 \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0631 \u0628\u0627\u0631 \u0628\u0647 \u0633\u0631\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062c\u062f\u06cc\u062f \u0628\u0641\u0631\u0633\u062a\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u062c\u0633\u062a\u062c\u0648<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u06cc\u0686 \u0635\u0627\u062d\u0628 \u0641\u0631\u0648\u0634\u06af\u0627\u0647\u06cc \u062f\u0648\u0633\u062a \u0646\u062f\u0627\u0631\u0647 \u0647\u0631 \u0628\u0627\u0631 \u0628\u0631\u0627\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u06a9\u0627\u0644\u0627\u060c \u0635\u062f\u0647\u0627 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0627\u0633\u06a9\u0631\u0648\u0644 \u06a9\u0646\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u062f\u0627\u062e\u0644 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u06f3\u06f0\u06f0\u06f0 \u0645\u062d\u0635\u0648\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0641\u0642\u0637 \u06a9\u0648\u06a9\u0627\u06a9\u0648\u0644\u0627 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647. \u0637\u0628\u06cc\u0639\u06cc\u200c\u062a\u0631\u06cc\u0646 \u0627\u0646\u062a\u0638\u0627\u0631\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0686\u0646\u062f \u062d\u0631\u0641 \u0627\u0648\u0644 \u0627\u0633\u0645 \u0631\u0648 \u0628\u0646\u0648\u06cc\u0633\u0647 \u0648 \u0647\u0645\u0627\u0646 \u0644\u062d\u0638\u0647 \u0646\u062a\u06cc\u062c\u0647 \u0638\u0627\u0647\u0631 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u062c\u0633\u062a\u062c\u0648 \u06a9\u0646\u062f \u0628\u0627\u0634\u0647\u060c \u0645\u0647\u0645 \u0646\u06cc\u0633\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0642\u062f\u0631 \u0638\u0627\u0647\u0631 \u0632\u06cc\u0628\u0627\u06cc\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u061b \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0633\u0627\u0633 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0644 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0636\u0639\u06cc\u0641\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u062c\u0633\u062a\u062c\u0648 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631 \u0641\u0642\u0637 \u06cc\u06a9 TextField \u0628\u0627\u0644\u0627\u06cc \u0635\u0641\u062d\u0647 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647\u060c \u0627\u0645\u0627 \u067e\u0634\u062a \u0647\u0645\u06cc\u0646 TextField \u0686\u0646\u062f \u0633\u06cc\u0633\u062a\u0645 \u0645\u062e\u062a\u0644\u0641 \u0628\u0627 \u0647\u0645 \u0647\u0645\u06a9\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">TextField<br>\u2193<br>Search Query<br>\u2193<br>ViewModel<br>\u2193<br>Repository<br>\u2193<br>Room Search<br>\u2193<br>Flow<br>\u2193<br>Products List<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0642\u0639\u060c \u062c\u0633\u062a\u062c\u0648 \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 \u062c\u0633\u062a\u062c\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0627\u0646\u062c\u0627\u0645 \u0646\u0645\u06cc\u0634\u0647\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644\u06cc\u0646 \u0627\u06cc\u062f\u0647 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u062a\u0627\u06cc\u067e \u0645\u06cc\u200c\u06a9\u0646\u062f<br>\u2193<br>API<br>\u2193<br>\u0646\u062a\u06cc\u062c\u0647<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b: \u06a9\u0627\u0631\u0628\u0631 \u062a\u0627\u06cc\u067e \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0647. \u0628\u0639\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\u0648\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a. \u0628\u0639\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\u0648\u06a9\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u06cc\u06a9 \u06a9\u0644\u0645\u0647 \u067e\u0646\u062c \u062d\u0631\u0641\u06cc \u062a\u0627\u06cc\u067e \u06a9\u0646\u0647\u060c \u067e\u0646\u062c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647. \u0627\u06cc\u0646 \u0647\u0645 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0645\u0635\u0631\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0647\u0645 \u0633\u0631\u0639\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u067e\u0627\u06cc\u06cc\u0646 \u0645\u06cc\u0627\u0631\u0647\u060c \u0647\u0645 \u0641\u0634\u0627\u0631 \u0632\u06cc\u0627\u062f\u06cc \u0631\u0648\u06cc Backend \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u067e\u0633 \u062c\u0633\u062a\u062c\u0648 \u0627\u0632 \u06a9\u062c\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0646\u060c \u0628\u0647\u062a\u0631\u06cc\u0646 \u062c\u0627 \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648 \u062e\u0648\u062f \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633\u0647. \u0645\u0633\u06cc\u0631 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">TextField<br>\u2193<br>Room Query<br>\u2193<br>Flow<br>\u2193<br>UI<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u06cc\u0686 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647. \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062f\u0627\u062e\u0644 \u06af\u0648\u0634\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Search Query<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644\u06cc\u0646 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>private val _query =\n    MutableStateFlow(\"\")\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">private<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> _query <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">MutableStateFlow<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0633\u062e\u0647 \u0639\u0645\u0648\u0645\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val query =\n    _query.asStateFlow()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> query <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    _query.<\/span><span style=\"color: #6F42C1\">asStateFlow<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0628\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0686\u06cc\u0632\u06cc \u062a\u0627\u06cc\u067e \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun onQueryChanged(\n    value:String\n){\n    _query.value = value\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onQueryChanged<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\">:<\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    _query.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0642\u06cc\u0642\u0627\u064b \u0645\u062b\u0644 TextField\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 Query \u062f\u0627\u062e\u0644 ViewModel \u0627\u0633\u062a\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0628\u06af\u06cc: \u0628\u0627 rememberSaveable \u0647\u0645 \u0645\u06cc\u0634\u0647. \u062f\u0631\u0633\u062a\u0647. \u0627\u0645\u0627 Query \u0641\u0642\u0637 \u06cc\u06a9 TextField \u0646\u06cc\u0633\u062a. \u06a9\u0644 \u0644\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0647 \u0627\u0648\u0646 \u0648\u0627\u0628\u0633\u062a\u0647 \u0627\u0633\u062a. \u0627\u06af\u0631 Query \u062f\u0627\u062e\u0644 ViewModel \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0635\u0641\u062d\u0647 \u0628\u0686\u0631\u062e\u0647.<\/li>\n\n\n\n<li>Navigation \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/li>\n\n\n\n<li>\u0635\u0641\u062d\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c\u0633\u062a\u062c\u0648 \u0627\u0632 \u0628\u06cc\u0646 \u0646\u0645\u06cc\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Repository<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u062a\u0627\u0628\u0639 \u062c\u0633\u062a\u062c\u0648 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun searchProducts(\n    query:String\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">searchProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    query:<\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0628\u0647\u062a\u0631\u0647 Flow \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Flow&lt;List&lt;Product>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">Flow<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">List<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">Product<\/span><span style=\"color: #D73A49\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u0647\u0631 \u0628\u0627\u0631 \u0646\u062a\u06cc\u062c\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">DAO<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0633\u0645\u062a \u0645\u0647\u0645 \u062c\u0633\u062a\u062c\u0648 \u0627\u06cc\u0646\u062c\u0627\u0633\u062a.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>SELECT *\n\nFROM Product\n\nWHERE name LIKE '%' || :query || '%'\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">SELECT <\/span><span style=\"color: #D73A49\">*<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">FROM Product<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">WHERE name LIKE <\/span><span style=\"color: #032F62\">&#39;%&#39;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">||<\/span><span style=\"color: #24292E\"> :<\/span><span style=\"color: #6F42C1\">query<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">||<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&#39;%&#39;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 Query \u0645\u06cc\u06af\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0645\u062d\u0635\u0648\u0644\u06cc \u06a9\u0647 \u0627\u0633\u0645\u0634 \u0634\u0627\u0645\u0644 \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u0628\u0627\u0634\u0647 \u0628\u0631\u06af\u0631\u062f\u0648\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\u0648\u06a9\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u062a\u06cc\u062c\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\u0648\u06a9\u0627\u06a9\u0648\u0644\u0627\n\n\u06a9\u0648\u06a9\u06cc \u0634\u06a9\u0644\u0627\u062a\u06cc\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">LIKE \u06cc\u0639\u0646\u06cc \u0686\u0647\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\u0648\u06a9\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WHERE name = :query\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0642\u0637 \u0645\u062d\u0635\u0648\u0644\u06cc \u067e\u06cc\u062f\u0627 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u062f\u0642\u06cc\u0642\u0627\u064b \u0627\u0633\u0645\u0634:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\u0648\u06a9\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LIKE\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c\u0633\u062a\u062c\u0648\u06cc \u062c\u0632\u0626\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0639\u0644\u0627\u0645\u062a %<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 SQL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>%\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>%\u06a9\u0648\u06a9%\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0627\u0633\u0645\u06cc \u06a9\u0647 \u062f\u0627\u062e\u0644\u0634:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\u0648\u06a9\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062c\u0633\u062a\u062c\u0648 \u0628\u0627 Flow<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Repository:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun searchProducts(\n    query:String\n)=\nproductDao.search(query)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">searchProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    query:<\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">productDao.<\/span><span style=\"color: #6F42C1\">search<\/span><span style=\"color: #24292E\">(query)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0631 \u0628\u0627\u0631 \u062f\u0633\u062a\u06cc Search \u0631\u0648 \u0635\u062f\u0627 \u0628\u0632\u0646\u06cc\u0645\u060c \u0628\u0647\u062a\u0631\u0647 Query \u0631\u0648 \u0628\u0647 \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u0646\u062a\u0627\u06cc\u062c \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val products =\n    query.flatMapLatest {\n\n        repository.searchProducts(it)\n\n    }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    query.<\/span><span style=\"color: #6F42C1\">flatMapLatest<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        repository.<\/span><span style=\"color: #6F42C1\">searchProducts<\/span><span style=\"color: #24292E\">(it)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u06a9\u062f\u0647\u0627\u06cc \u0627\u06cc\u0646 \u062f\u0631\u0633\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">flatMapLatest<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0633\u0631\u06cc\u0639 \u062a\u0627\u06cc\u067e \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u06a9<br>\u2193<br>\u06a9\u0648<br>\u2193<br>\u06a9\u0648\u06a9<br>\u2193<br>\u06a9\u0648\u06a9\u0627<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0647\u0645\u0647 \u062c\u0633\u062a\u062c\u0648\u0647\u0627 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0646\u062a\u06cc\u062c\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\u0648\u06a9\u0627\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0633\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u062a\u06cc\u062c\u0647 \u0644\u06cc\u0633\u062a \u0627\u0634\u062a\u0628\u0627\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flatMapLatest\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0645\u0627\u0645 \u062c\u0633\u062a\u062c\u0648\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u0631\u0648 \u0644\u063a\u0648 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0641\u0642\u0637 \u0622\u062e\u0631\u06cc\u0646 Query \u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647. \u0627\u06cc\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u0647\u0645\u0648\u0646 \u0631\u0641\u062a\u0627\u0631\u06cc\u0647 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u0632\u0646\u062f\u0647 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 Query \u062e\u0627\u0644\u06cc \u0647\u0645 \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc\u0634\u0647\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0686\u06cc\u0632\u06cc \u0646\u0646\u0648\u0634\u062a\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0627\u0631\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u06cc\u0686 \u0646\u062a\u06cc\u062c\u0647\u200c\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0646\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u06af\u0632\u06cc\u0646\u0647 \u062f\u0648\u0645 \u0645\u0646\u0637\u0642\u06cc\u200c\u062a\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u062f\u0627\u062e\u0644 Repository:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if(query.isBlank()){\n\n    observeProducts()\n\n}\nelse{\n\n    searchProducts(query)\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\">(query.<\/span><span style=\"color: #6F42C1\">isBlank<\/span><span style=\"color: #24292E\">()){<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">observeProducts<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">searchProducts<\/span><span style=\"color: #24292E\">(query)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Debounce<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u062a\u0627\u06cc\u067e \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06a9\n\n\u06a9\u0648\n\n\u06a9\u0648\u06a9\n\n\u06a9\u0648\u06a9\u0627\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0628\u0639\u062f \u0627\u0632 \u0647\u0631 \u062d\u0631\u0641 Query \u0627\u062c\u0631\u0627 \u0628\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 \u0686\u0646\u062f \u0645\u06cc\u0644\u06cc\u200c\u062b\u0627\u0646\u06cc\u0647 \u0635\u0628\u0631 \u06a9\u0646\u06cc\u0645. \u0628\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u06cc\u06af\u0646:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Debounce\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>query\n\n.debounce(300)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc: \u0627\u06af\u0631 \u062a\u0627 \u06f3\u06f0\u06f0 \u0645\u06cc\u0644\u06cc\u200c\u062b\u0627\u0646\u06cc\u0647 \u0686\u06cc\u0632\u06cc \u062a\u0627\u06cc\u067e \u0646\u0634\u062f\u060c \u062c\u0633\u062a\u062c\u0648 \u0627\u062c\u0631\u0627 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0686\u0631\u0627 Debounce\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0646\u0628\u0627\u0634\u0647:<br>\u0633\u0644\u0627\u0645<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0646\u062c \u0628\u0627\u0631 \u062c\u0633\u062a\u062c\u0648 \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u0628\u0627 Debounce \u0641\u0642\u0637 \u06cc\u06a9 \u0628\u0627\u0631. \u0627\u06cc\u0646 \u0647\u0645 \u0645\u0635\u0631\u0641 CPU \u0631\u0648 \u06a9\u0645\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0647\u0645 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0648 \u0628\u0647\u062a\u0631.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">DistinctUntilChanged<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u0645\u0642\u062f\u0627\u0631 Query \u0627\u0635\u0644\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631 \u0646\u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<br>\u06a9\u0648\u06a9<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648\u0628\u0627\u0631\u0647 \u0647\u0645\u0648\u0646:<br>\u06a9\u0648\u06a9<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 Query \u0627\u062c\u0631\u0627 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>distinctUntilChanged()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">distinctUntilChanged<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0632\u0646\u062c\u06cc\u0631\u0647 \u06a9\u0627\u0645\u0644 \u062c\u0633\u062a\u062c\u0648<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a ViewModel \u0686\u06cc\u0632\u06cc \u0634\u0628\u06cc\u0647 \u0627\u06cc\u0646 \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>query\n\n.debounce(300)\n\n.distinctUntilChanged()\n\n.flatMapLatest {\n\n    repository.searchProducts(it)\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">query<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">.<\/span><span style=\"color: #6F42C1\">debounce<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">300<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">.<\/span><span style=\"color: #6F42C1\">distinctUntilChanged<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">.<\/span><span style=\"color: #6F42C1\">flatMapLatest<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    repository.<\/span><span style=\"color: #6F42C1\">searchProducts<\/span><span style=\"color: #24292E\">(it)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0627\u06cc\u062c\u200c\u062a\u0631\u06cc\u0646 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc Kotlin Flow \u0627\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">State \u0635\u0641\u062d\u0647<\/h1>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class ProductsUiState(\n\n    val query:String=\"\",\n\n    val products:\n        List&lt;Product> = emptyList(),\n\n    val isSearching:Boolean=false\n\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ProductsUiState<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> query:<\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        List<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">Product<\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">emptyList<\/span><span style=\"color: #24292E\">(),<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isSearching:<\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #005CC5\">false<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc Query \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">State \u0647\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 TextField<\/h1>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>OutlinedTextField(\n\n    value = state.query,\n\n    onValueChange =\n        viewModel::onQueryChanged\n\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">OutlinedTextField<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> state.query,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    onValueChange <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        viewModel::<\/span><span style=\"color: #6F42C1\">onQueryChanged<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0647\u06cc\u0686 \u0627\u0637\u0644\u0627\u0639\u06cc \u0627\u0632 SQL \u0646\u062f\u0627\u0631\u0647. \u0641\u0642\u0637 \u0645\u062a\u0646 \u0631\u0648 \u0628\u0647 ViewModel \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0628\u0627\u06cc\u062f \u062c\u0633\u062a\u062c\u0648 \u062f\u0627\u062e\u0644 Compose \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u0627\u0641\u0631\u0627\u062f \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u0645\u06cc\u200c\u06a9\u0646\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>products.filter {\n\n    ...\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">products.<\/span><span style=\"color: #6F42C1\">filter<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">..<\/span><span style=\"color: #24292E\">.<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u062e\u0644 Compose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u0644\u06cc\u0633\u062a\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9 \u0634\u0627\u06cc\u062f \u0645\u0634\u06a9\u0644\u06cc \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0631:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u06f5\u06f0\u06f0\u06f0 \u0645\u062d\u0635\u0648\u0644\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0628\u0627\u0631 \u062a\u0627\u06cc\u067e:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0644 \u0644\u06cc\u0633\u062a \u062f\u0648\u0628\u0627\u0631\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646 \u06a9\u0627\u0631 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062c\u0633\u062a\u062c\u0648 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0628\u0627\u0631\u06a9\u062f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u0631\u06a9\u062f \u0631\u0648 \u0627\u0633\u06a9\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Barcode<br>\u2193<br>Search<br>\u2193<br>Product<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u0627\u0628\u0639 \u062c\u062f\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>searchByBarcode()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">searchByBarcode<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u0628\u0627\u0631\u06a9\u062f \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0631\u0627\u0628\u0631 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647 LIKE.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062c\u0633\u062a\u062c\u0648 \u0631\u0648\u06cc \u0686\u0646\u062f \u0641\u06cc\u0644\u062f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u06a9\u0627\u0631\u0628\u0631:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0627\u0633\u0645 \u06a9\u0627\u0644\u0627<\/li>\n\n\n\n<li>\u0628\u0627\u0631\u06a9\u062f<\/li>\n\n\n\n<li>\u06a9\u062f \u0645\u062d\u0635\u0648\u0644<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0631\u0648 \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 SQL:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>WHERE\n\nname LIKE ...\n\nOR\n\nbarcode LIKE ...\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">WHERE<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">name LIKE <\/span><span style=\"color: #D73A49\">..<\/span><span style=\"color: #24292E\">.<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">OR<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">barcode LIKE <\/span><span style=\"color: #D73A49\">..<\/span><span style=\"color: #24292E\">.<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc: \u0627\u06af\u0631 \u0647\u0631 \u06a9\u062f\u0648\u0645 \u067e\u06cc\u062f\u0627 \u0634\u062f\u060c \u0645\u062d\u0635\u0648\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af \u0648 \u06a9\u0648\u0686\u06a9 \u0645\u0647\u0645\u0647\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0641\u0627\u0631\u0633\u06cc \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0646\u0647. \u0627\u0645\u0627 \u062f\u0631 \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0645\u0647\u0645 \u0628\u0627\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 \u062c\u0633\u062a\u062c\u0648 \u0628\u0647 \u062d\u0631\u0648\u0641 \u062d\u0633\u0627\u0633 \u0646\u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Milk\n\nmilk\n\nMILK\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0647 \u06cc\u06a9 \u0646\u062a\u06cc\u062c\u0647 \u0628\u062f\u0646. \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0631 \u0633\u0637\u062d \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u06cc\u0627 Collation \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc\u0634\u0647\u060c \u0646\u0647 \u062f\u0627\u062e\u0644 Compose.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0646\u062a\u06cc\u062c\u0647 \u0646\u062f\u0627\u0634\u062a\u0646 \u062c\u0633\u062a\u062c\u0648<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0645\u062d\u0635\u0648\u0644\u06cc \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f: \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0644\u06cc\u0633\u062a \u062e\u0627\u0644\u06cc \u0628\u0628\u06cc\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647:<br>\u0645\u062d\u0635\u0648\u0644\u06cc \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f.<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648 \u062d\u062a\u06cc:<br>\u0639\u0628\u0627\u0631\u062a \u062f\u06cc\u06af\u0631\u06cc \u0631\u0648 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062f\u06a9\u0645\u0647 \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u062c\u0633\u062a\u062c\u0648<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 Query \u062e\u0627\u0644\u06cc \u0646\u0628\u0627\u0634\u0647:<br>\u06cc\u06a9 \u062f\u06a9\u0645\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u00d7\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0644\u06cc\u06a9:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>viewModel.onQueryChanged(\"\")\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">viewModel.<\/span><span style=\"color: #6F42C1\">onQueryChanged<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f: \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0648\u0628\u0627\u0631\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0622\u06cc\u0627 Query \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647\u061f<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u06cc\u0631.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Query \u062f\u0627\u062f\u0647 \u062f\u0627\u0626\u0645\u06cc \u0646\u06cc\u0633\u062a. \u0641\u0642\u0637 State \u0635\u0641\u062d\u0647 \u0627\u0633\u062a. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0630\u062e\u06cc\u0631\u0647 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Search History<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0622\u062e\u0631\u06cc\u0646 \u062c\u0633\u062a\u062c\u0648\u0647\u0627 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0646. \u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0648\u06a9\u0627\u06a9\u0648\u0644\u0627<br>\u0634\u06cc\u0631<br>\u062f\u0644\u0633\u062a\u0631<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u062c\u062f\u0627 \u0627\u0632 \u062e\u0648\u062f Search \u0627\u0633\u062a. \u0627\u06af\u0631 \u0628\u0639\u062f\u0647\u0627 \u062e\u0648\u0627\u0633\u062a\u06cc\u0645 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645\u060c \u06cc\u06a9 \u062c\u062f\u0648\u0644 \u0645\u0633\u062a\u0642\u0644 \u062e\u0648\u0627\u0647\u062f \u062f\u0627\u0634\u062a. \u0646\u0647 \u062c\u062f\u0648\u0644 Product.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0647\u0631 \u0628\u062e\u0634<\/h1>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Compose<br>\u0646\u0645\u0627\u06cc\u0634 TextField<br>\u0646\u0645\u0627\u06cc\u0634 \u0644\u06cc\u0633\u062a<br>\u2193<br>ViewModel<br>\u0646\u06af\u0647\u062f\u0627\u0631\u06cc Query<br>\u2193<br>Repository<br>Search<br>\u2193<br>Room<br>\u0627\u062c\u0631\u0627\u06cc Query<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 \u0647\u0645\u06cc\u0634\u0647\u060c \u0647\u06cc\u0686 Query \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633\u06cc \u062f\u0627\u062e\u0644 Compose \u0646\u0648\u0634\u062a\u0647 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u062c\u0633\u062a\u062c\u0648 \u0641\u0642\u0637 \u0641\u06cc\u0644\u062a\u0631 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u0644\u06cc\u0633\u062a \u0646\u06cc\u0633\u062a<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u0686\u0646\u062f \u062d\u0631\u0641 \u062f\u0627\u062e\u0644 \u06cc\u06a9 TextField \u062a\u0627\u06cc\u067e \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0646\u062a\u0627\u06cc\u062c \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646. \u0627\u0645\u0627 \u067e\u0634\u062a \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0633\u0627\u062f\u0647\u060c \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u0648\u0627\u06a9\u0646\u0634\u06cc \u06a9\u0627\u0645\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u062f\u0627\u062e\u0644 ViewModel \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u06cc\u0634\u0647\u060c \u0628\u0627 <code>debounce<\/code> \u0627\u0632 \u0627\u062c\u0631\u0627\u06cc \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u062c\u0633\u062a\u062c\u0648 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c <code>distinctUntilChanged<\/code> \u0645\u0627\u0646\u0639 \u0627\u062c\u0631\u0627\u06cc Query\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0645\u06cc\u0634\u0647 \u0648 <code>flatMapLatest<\/code> \u0641\u0642\u0637 \u0622\u062e\u0631\u06cc\u0646 \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u0639\u062a\u0628\u0631 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. Repository \u0647\u0645 \u062c\u0633\u062a\u062c\u0648 \u0631\u0648 \u0628\u0647 Room \u0645\u06cc\u200c\u0633\u067e\u0627\u0631\u0647 \u0648 \u0646\u062a\u0627\u06cc\u062c \u0628\u0647\u200c\u0635\u0648\u0631\u062a Flow \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>\u062c\u0633\u062a\u062c\u0648 \u0646\u0628\u0627\u06cc\u062f \u0628\u0627 \u0647\u0631 \u0628\u0627\u0631 \u062a\u0627\u06cc\u067e \u0628\u0647 \u0633\u0631\u0648\u0631 \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647<\/strong>. \u0648\u0642\u062a\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062f\u0627\u062e\u0644 Room \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0646\u060c \u0633\u0631\u06cc\u0639\u200c\u062a\u0631\u06cc\u0646\u060c \u0627\u0631\u0632\u0627\u0646\u200c\u062a\u0631\u06cc\u0646 \u0648 \u067e\u0627\u06cc\u062f\u0627\u0631\u062a\u0631\u06cc\u0646 \u0645\u062d\u0644 \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648 \u062e\u0648\u062f \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u062d\u0644\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u0631\u0648 \u0648\u0627\u0631\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c ViewModel \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u0648\u0627\u06a9\u0646\u0634\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Repository \u062c\u0633\u062a\u062c\u0648 \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647 \u0648 Compose \u0641\u0642\u0637 \u0646\u062a\u0627\u06cc\u062c \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647\u061b \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062d\u0631\u0641 \u062a\u0627\u06cc\u067e\u200c\u0634\u062f\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062c\u062f\u06cc\u062f\u06cc \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0633\u06cc\u200c\u0627\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0637\u0648\u0631 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0642\u06cc\u0645\u062a \u06cc\u0627 \u0632\u0645\u0627\u0646 \u062b\u0628\u062a \u0645\u0631\u062a\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0645\u0646\u0637\u0642 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0648\u0627\u0631\u062f \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0634\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u0641\u06cc\u0644\u062a\u0631 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062a\u0648\u0646\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647 \u0648 \u0628\u06cc\u0646 \u0627\u0648\u0646\u200c\u0647\u0627 \u062c\u0633\u062a\u062c\u0648 \u06a9\u0646\u0647\u060c \u0642\u062f\u0645 \u0628\u0639\u062f\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062a\u0631\u062a\u06cc\u0628 \u0646\u0645\u0627\u06cc\u0634 \u0646\u062a\u0627\u06cc\u062c \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0628\u062e\u0648\u0627\u062f \u0627\u0631\u0632\u0627\u0646\u200c\u062a\u0631\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0627\u0648\u0644 \u062f\u06cc\u062f\u0647 \u0628\u0634\u0646\u060c \u0634\u0627\u06cc\u062f \u062f\u0646\u0628\u0627\u0644 \u06af\u0631\u0627\u0646\u200c\u062a\u0631\u06cc\u0646\u200c\u0647\u0627 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0628\u062e\u0648\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u06cc \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647 \u06a9\u0647 \u062a\u0627\u0632\u0647\u200c\u062a\u0631 \u0627\u0632 \u0628\u0642\u06cc\u0647 \u062b\u0628\u062a \u0634\u062f\u0646. \u062f\u0631 \u0638\u0627\u0647\u0631\u060c \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647: <strong>\u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a\u060c \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u06cc\u0627 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u0632 \u0646\u0638\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc\u060c \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u062c\u0627 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u06cc\u0634\u0647\u060c \u0686\u0647 \u06a9\u0633\u06cc \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 Query \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0686\u0637\u0648\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u062c\u0633\u062a\u062c\u0648 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0628\u0627 \u0647\u0645 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645. \u0645\u0633\u06cc\u0631 \u06a9\u0644\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647: \u06a9\u0627\u0631\u0628\u0631 \u06af\u0632\u06cc\u0646\u0647 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c ViewModel \u0627\u0646\u062a\u062e\u0627\u0628 \u0641\u0639\u0644\u06cc \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647\u060c Repository \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0627\u0648\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u06a9\u062f\u0648\u0645 Query \u0627\u062c\u0631\u0627 \u0628\u0634\u0647\u060c Room \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0627 \u062a\u0631\u062a\u06cc\u0628 \u062f\u0631\u0633\u062a \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647 \u0648 Compose \u0641\u0642\u0637 \u0644\u06cc\u0633\u062a \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062e\u0648\u062f Compose \u0646\u0628\u0627\u06cc\u062f \u0644\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0642\u06cc\u0645\u062a \u0645\u0631\u062a\u0628 \u06a9\u0646\u0647. \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0628\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0686\u0647 \u0646\u0648\u0639 \u062a\u0631\u062a\u06cc\u0628\u06cc \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647\u061b \u0627\u062c\u0631\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0648\u0638\u06cc\u0641\u0647 \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0641\u06cc\u0644\u062a\u0631 \u06cc\u0627 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u06af\u0641\u062a\u06af\u0648\u0647\u0627\u06cc \u0631\u0648\u0632\u0645\u0631\u0647 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0647 \u0647\u0645\u0647 \u0627\u06cc\u0646 \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627 \u0641\u06cc\u0644\u062a\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0645\u060c \u0627\u0645\u0627 \u0627\u0632 \u0646\u0638\u0631 \u0641\u0646\u06cc \u062a\u0641\u0627\u0648\u062a\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0641\u06cc\u0644\u062a\u0631 \u06cc\u0639\u0646\u06cc \u0628\u062e\u0634\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062d\u0630\u0641 \u0628\u0634\u0646. \u0645\u062b\u0644\u0627\u064b \u0641\u0642\u0637 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0633\u062a\u0647 \u0646\u0648\u0634\u06cc\u062f\u0646\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646 \u06cc\u0627 \u0641\u0642\u0637 \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u06cc \u062f\u06cc\u062f\u0647 \u0628\u0634\u0646 \u06a9\u0647 \u0642\u06cc\u0645\u062a \u062f\u0627\u0631\u0646. \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u06cc\u0639\u0646\u06cc \u0647\u0645\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0646\u060c \u0627\u0645\u0627 \u062a\u0631\u062a\u06cc\u0628 \u0627\u0648\u0646\u200c\u0647\u0627 \u0639\u0648\u0636 \u0628\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0627\u0632 \u0627\u0631\u0632\u0627\u0646 \u0628\u0647 \u06af\u0631\u0627\u0646 \u06cc\u0627 \u0627\u0632 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0642\u062f\u06cc\u0645 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a\u060c \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0648 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646\u060c \u062f\u0631 \u0627\u0635\u0644 <strong>\u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc<\/strong> \u0647\u0633\u062a\u0646\u060c \u0646\u0647 \u0641\u06cc\u0644\u062a\u0631. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0639\u0646\u0648\u0627\u0646 \u062f\u06a9\u0645\u0647 \u0641\u06cc\u0644\u062a\u0631 \u0628\u0627\u0634\u0647\u060c \u0686\u0648\u0646 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0642\u0627\u0628\u0644 \u0641\u0647\u0645\u200c\u062a\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0646\u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 Compose \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u06cc\u0646 \u0631\u0627\u0647 \u0627\u06cc\u0646 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u0647 \u06a9\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u06af\u06cc\u0631\u06cc\u0645 \u0648 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val sortedProducts = products.sortedBy { it.lastPrice }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> sortedProducts <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> products.<\/span><span style=\"color: #6F42C1\">sortedBy<\/span><span style=\"color: #24292E\"> { it.lastPrice }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0648\u0627\u0642\u0639\u0627\u064b Kotlin \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0646\u0627\u0633\u0628\u06cc \u0646\u06cc\u0633\u062a. \u0627\u0648\u0644 \u0627\u06cc\u0646\u06a9\u0647 \u062a\u0645\u0627\u0645 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0627\u06cc\u062f \u0627\u0632 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0648\u0627\u0631\u062f \u062d\u0627\u0641\u0638\u0647 \u0628\u0634\u0646 \u0648 \u0628\u0639\u062f \u0645\u0631\u062a\u0628 \u0628\u0634\u0646. \u062f\u0648\u0645 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0627 \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631 State \u0645\u0645\u06a9\u0646\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647. \u0633\u0648\u0645 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u06af\u0631 \u0628\u0639\u062f\u0647\u0627 Pagination \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645\u060c \u0645\u0631\u062a\u0628 \u06a9\u0631\u062f\u0646 \u0641\u0642\u0637 \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u06cc \u06a9\u0647 \u0641\u0639\u0644\u0627\u064b \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u0647\u0633\u062a\u0646\u060c \u062a\u0631\u062a\u06cc\u0628 \u0648\u0627\u0642\u0639\u06cc \u06a9\u0644 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0645\u0634\u062e\u0635 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0628\u0631\u0627\u06cc \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647. Room \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0642\u0628\u0644 \u0627\u0632 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u062f\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u060c \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0628\u0627 <code>ORDER BY<\/code> \u0645\u0631\u062a\u0628 \u06a9\u0646\u0647. \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647 \u0641\u0642\u0637 \u062e\u0631\u0648\u062c\u06cc \u0646\u0647\u0627\u06cc\u06cc \u0648 \u0622\u0645\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u0631\u0633\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u062f\u0644 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u0628\u0647 \u062c\u0627\u06cc \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u06cc\u06a9 \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 \u0645\u062b\u0644 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a\u060c \u06cc\u06a9 \u0646\u0648\u0639 \u0645\u0634\u062e\u0635 \u0628\u0631\u0627\u06cc \u062d\u0627\u0644\u062a\u200c\u0647\u0627\u06cc \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0633\u0627\u0632\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>enum class ProductSort {\n    LOWEST_PRICE,\n    HIGHEST_PRICE,\n    NEWEST\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">enum<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ProductSort<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    LOWEST_PRICE,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    HIGHEST_PRICE,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    NEWEST<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u062f\u0631 \u0644\u0627\u06cc\u0647 Presentation \u06cc\u0627 \u062f\u0631 \u06cc\u06a9 \u0628\u062e\u0634 \u0645\u0634\u062a\u0631\u06a9 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u062f\u0644\u06cc\u0644 \u0648\u062c\u0648\u062f\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 ViewModel \u0628\u0647 \u06cc\u06a9 \u0645\u0642\u062f\u0627\u0631 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0648 \u0642\u0627\u0628\u0644 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0647. \u0627\u06af\u0631 \u0645\u062a\u0646 \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645\u060c \u0645\u0645\u06a9\u0646\u0647 \u0628\u0639\u062f\u0627\u064b \u0645\u062a\u0646 \u0641\u0627\u0631\u0633\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647 \u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0646\u062f\u0632\u0628\u0627\u0646\u0647 \u0628\u0634\u0647. \u0627\u0645\u0627 \u0645\u0642\u062f\u0627\u0631 <code>LOWEST_PRICE<\/code> \u0647\u0645\u0686\u0646\u0627\u0646 \u0647\u0645\u0648\u0646 \u0645\u0641\u0647\u0648\u0645 \u0642\u0628\u0644\u06cc \u0631\u0648 \u062d\u0641\u0638 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062a\u0646\u200c\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0641\u0642\u0637 \u062f\u0631 UI \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0642\u0627\u062f\u06cc\u0631 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u0634\u0646. \u0645\u0646\u0637\u0642 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0628\u0647 \u0645\u062a\u0646 \u062f\u06a9\u0645\u0647 \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0627\u062e\u0644 ViewModel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u062a \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc\u060c \u0645\u062b\u0644 \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648\u060c \u0628\u062e\u0634\u06cc \u0627\u0632 State \u0635\u0641\u062d\u0647 \u0627\u0633\u062a. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647\u062a\u0631\u0647 \u062f\u0627\u062e\u0644 ViewModel \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>private val _sort =\n    MutableStateFlow(ProductSort.NEWEST)\n\nval sort = _sort.asStateFlow()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">private<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> _sort <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">MutableStateFlow<\/span><span style=\"color: #24292E\">(ProductSort.NEWEST)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> sort <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> _sort.<\/span><span style=\"color: #6F42C1\">asStateFlow<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u060c \u062d\u0627\u0644\u062a \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 <code>NEWEST<\/code> \u0627\u0633\u062a. \u06cc\u0639\u0646\u06cc \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646 \u0628\u0627\u0631 \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 \u0645\u06cc\u0634\u0647\u060c \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0627\u0648\u0644 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0642\u062f\u0627\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0628\u0627\u06cc\u062f \u0628\u0627 \u0646\u06cc\u0627\u0632 \u0648\u0627\u0642\u0639\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0634\u0647. \u0628\u0631\u0627\u06cc \u0628\u0639\u0636\u06cc \u0641\u0631\u0648\u0634\u06af\u0627\u0647\u200c\u0647\u0627 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0627\u0644\u0641\u0628\u0627\u06cc\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0645\u0646\u0637\u0642\u06cc\u200c\u062a\u0631 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u0628\u06cc\u0646 \u0633\u0647 \u06af\u0632\u06cc\u0646\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0641\u0639\u0644\u0627\u064b \u062f\u0627\u0631\u06cc\u0645\u060c \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0646\u0627\u0633\u0628\u06cc\u0647 \u0686\u0648\u0646 \u0645\u062d\u0635\u0648\u0644 \u062a\u0627\u0632\u0647 \u062b\u0628\u062a\u200c\u0634\u062f\u0647 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u06af\u0632\u06cc\u0646\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c ViewModel \u0641\u0642\u0637 State \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun onSortChanged(sort: ProductSort) {\n    _sort.value = sort\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onSortChanged<\/span><span style=\"color: #24292E\">(sort: <\/span><span style=\"color: #6F42C1\">ProductSort<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    _sort.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> sort<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0647\u06cc\u0686 Query\u0627\u06cc \u0627\u062c\u0631\u0627 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u06cc\u0686 \u0644\u06cc\u0633\u062a\u06cc \u0631\u0648 \u0645\u0631\u062a\u0628 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647. \u0641\u0642\u0637 \u0645\u06cc\u06af\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u0641\u0639\u0644\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Query \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0627\u0632 \u0627\u0631\u0632\u0627\u0646 \u0628\u0647 \u06af\u0631\u0627\u0646\u060c Query \u0628\u0627\u06cc\u062f \u0628\u0631 \u0627\u0633\u0627\u0633 \u0642\u06cc\u0645\u062a \u0635\u0639\u0648\u062f\u06cc \u0645\u0631\u062a\u0628 \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Query(\n    \"\"\"\n    SELECT * FROM products\n    ORDER BY lastPrice ASC\n    \"\"\"\n)\nfun observeByLowestPrice(): Flow&lt;List&lt;ProductEntity>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    SELECT * FROM products<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    ORDER BY lastPrice ASC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeByLowestPrice<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductEntity<\/span><span style=\"color: #24292E\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ASC<\/code> \u0645\u062e\u0641\u0641 Ascending \u0627\u0633\u062a\u061b \u06cc\u0639\u0646\u06cc \u062a\u0631\u062a\u06cc\u0628 \u0635\u0639\u0648\u062f\u06cc. \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9\u200c\u062a\u0631 \u062f\u0631 \u0627\u0628\u062a\u062f\u0627\u06cc \u0644\u06cc\u0633\u062a \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646 \u0648 \u0647\u0631\u0686\u0647 \u067e\u0627\u06cc\u06cc\u0646\u200c\u062a\u0631 \u0645\u06cc\u0631\u06cc\u0645\u060c \u0642\u06cc\u0645\u062a \u0628\u06cc\u0634\u062a\u0631 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 Query \u062f\u0627\u062e\u0644 <code>ProductDao<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647\u060c \u0686\u0648\u0646 \u0627\u062c\u0631\u0627\u06cc SQL \u0645\u0633\u0626\u0648\u0644\u06cc\u062a DAO \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Query \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0627\u0632 \u06af\u0631\u0627\u0646 \u0628\u0647 \u0627\u0631\u0632\u0627\u0646\u060c \u0641\u0642\u0637 \u062c\u0647\u062a \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0639\u0648\u0636 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Query(\n    \"\"\"\n    SELECT * FROM products\n    ORDER BY lastPrice DESC\n    \"\"\"\n)\nfun observeByHighestPrice(): Flow&lt;List&lt;ProductEntity>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    SELECT * FROM products<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    ORDER BY lastPrice DESC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeByHighestPrice<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductEntity<\/span><span style=\"color: #24292E\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>DESC<\/code> \u06cc\u0639\u0646\u06cc \u062a\u0631\u062a\u06cc\u0628 \u0646\u0632\u0648\u0644\u06cc. \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\u06cc \u0628\u0632\u0631\u06af\u200c\u062a\u0631 \u0627\u0648\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Repository \u06cc\u0627 ViewModel \u0646\u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0634 <code>ASC<\/code> \u0648 <code>DESC<\/code> \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0647 \u0648 \u0628\u0647 SQL \u062a\u0632\u0631\u06cc\u0642 \u06a9\u0646\u0647. Query\u0647\u0627\u06cc \u0645\u0634\u062e\u0635 \u0648 \u0627\u0632 \u067e\u06cc\u0634 \u062a\u0639\u0631\u06cc\u0641\u200c\u0634\u062f\u0647\u060c \u0647\u0645 \u062e\u0648\u0627\u0646\u0627\u062a\u0631 \u0647\u0633\u062a\u0646 \u0648 \u0647\u0645 \u0627\u062d\u062a\u0645\u0627\u0644 \u062e\u0637\u0627 \u0631\u0648 \u06a9\u0645\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Query \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0631 \u0627\u0633\u0627\u0633 \u0632\u0645\u0627\u0646 \u062b\u0628\u062a\u060c \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0641\u06cc\u0644\u062f \u0632\u0645\u0627\u0646\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val createdAt: Long\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> createdAt: <\/span><span style=\"color: #6F42C1\">Long<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0642\u062f\u0627\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Timestamp \u0628\u0627\u0634\u0647\u061b \u06cc\u0639\u0646\u06cc \u0639\u062f\u062f\u06cc \u06a9\u0647 \u0632\u0645\u0627\u0646 \u062b\u0628\u062a \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a Query \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646\u200c\u0647\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Query(\n    \"\"\"\n    SELECT * FROM products\n    ORDER BY createdAt DESC\n    \"\"\"\n)\nfun observeNewest(): Flow&lt;List&lt;ProductEntity>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    SELECT * FROM products<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    ORDER BY createdAt DESC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeNewest<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductEntity<\/span><span style=\"color: #24292E\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u0632\u0645\u0627\u0646\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u062a\u0631 \u0645\u0642\u062f\u0627\u0631 \u0628\u0632\u0631\u06af\u200c\u062a\u0631\u06cc \u062f\u0627\u0631\u0646\u060c \u0628\u0627 <code>DESC<\/code> \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062a\u0627\u0632\u0647\u200c\u062a\u0631 \u0627\u0648\u0644 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646. \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u0628\u0627\u0634\u0647 \u0645\u0646\u0638\u0648\u0631 \u0627\u0632 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0686\u06cc\u0647. \u0645\u0645\u06a9\u0646\u0647 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0632\u0645\u0627\u0646 \u0633\u0627\u062e\u062a \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0622\u062e\u0631\u06cc\u0646 \u0648\u06cc\u0631\u0627\u06cc\u0634. \u0627\u06cc\u0646 \u062f\u0648 \u0645\u0641\u0647\u0648\u0645 \u06cc\u06a9\u0633\u0627\u0646 \u0646\u06cc\u0633\u062a\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u06cc \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647 \u06a9\u0647 \u062a\u0627\u0632\u0647 \u0628\u0647 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0646\u060c \u0628\u0627\u06cc\u062f \u0627\u0632 <code>createdAt<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645. \u0627\u06af\u0631 \u0647\u062f\u0641 \u062f\u06cc\u062f\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0648\u06cc\u0631\u0627\u06cc\u0634\u200c\u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0641\u06cc\u0644\u062f\u06cc \u0645\u062b\u0644 <code>updatedAt<\/code> \u0645\u0646\u0627\u0633\u0628\u200c\u062a\u0631\u0647. \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0628\u0631\u0627\u06cc \u06af\u0632\u06cc\u0646\u0647 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646\u060c \u0645\u0646\u0637\u0642\u06cc\u200c\u062a\u0631\u0647 \u0645\u0646\u0638\u0648\u0631 \u0632\u0645\u0627\u0646 \u062b\u0628\u062a \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u062d\u0635\u0648\u0644 \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a \u0686\u0647 \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0633\u0624\u0627\u0644 \u0645\u0647\u0645 \u067e\u06cc\u0634 \u0645\u06cc\u0627\u062f. \u0641\u0631\u0636 \u06a9\u0646 \u0628\u0639\u0636\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0646\u0648\u0632 \u0642\u06cc\u0645\u062a \u0646\u062f\u0627\u0631\u0646 \u0648 \u0645\u0642\u062f\u0627\u0631 <code>lastPrice<\/code> \u0627\u0648\u0646\u200c\u0647\u0627 <code>null<\/code> \u0627\u0633\u062a. \u0648\u0642\u062a\u06cc \u0628\u0631 \u0627\u0633\u0627\u0633 \u0642\u06cc\u0645\u062a \u0645\u0631\u062a\u0628 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06a9\u062c\u0627\u06cc \u0644\u06cc\u0633\u062a \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0646. \u0627\u06af\u0631 \u0647\u06cc\u0686 \u062a\u0635\u0645\u06cc\u0645\u06cc \u0646\u06af\u06cc\u0631\u06cc\u0645\u060c \u0631\u0641\u062a\u0627\u0631 <code>null<\/code> \u0645\u0645\u06a9\u0646\u0647 \u0628\u0627 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647 \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0627\u0634\u0647. \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u062f\u0631 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0645\u0645\u06a9\u0646\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a \u0642\u0628\u0644 \u0627\u0632 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0627\u0631\u0632\u0627\u0646 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646\u060c \u0686\u0648\u0646 <code>null<\/code> \u0627\u0632 \u0646\u0638\u0631 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0642\u06cc\u0645\u062a \u0648\u0627\u0642\u0639\u06cc \u0645\u062d\u0633\u0648\u0628 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u0632 \u062f\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631\u060c \u0645\u062d\u0635\u0648\u0644 \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a \u0646\u0628\u0627\u06cc\u062f \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0627\u0631\u0632\u0627\u0646\u200c\u062a\u0631\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644 \u062f\u06cc\u062f\u0647 \u0628\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u06cc\u0645\u062a\u200c\u062f\u0627\u0631 \u0627\u0648\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646 \u0648 \u0645\u0648\u0627\u0631\u062f \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0631\u0648 \u062f\u0627\u062e\u0644 Query \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Query(\n    \"\"\"\n    SELECT * FROM products\n    ORDER BY\n        CASE WHEN lastPrice IS NULL THEN 1 ELSE 0 END,\n        lastPrice ASC\n    \"\"\"\n)\nfun observeByLowestPrice(): Flow&lt;List&lt;ProductEntity>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    SELECT * FROM products<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    ORDER BY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">        CASE WHEN lastPrice IS NULL THEN 1 ELSE 0 END,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">        lastPrice ASC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeByLowestPrice<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductEntity<\/span><span style=\"color: #24292E\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 <code>CASE<\/code> \u0627\u0628\u062a\u062f\u0627 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0647 \u062f\u0648 \u06af\u0631\u0648\u0647 \u062a\u0642\u0633\u06cc\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u06cc \u06a9\u0647 \u0642\u06cc\u0645\u062a \u062f\u0627\u0631\u0646 \u0645\u0642\u062f\u0627\u0631 \u0635\u0641\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646 \u0648 \u0642\u0628\u0644\u200c\u062a\u0631 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646. \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u06cc \u06a9\u0647 \u0642\u06cc\u0645\u062a \u0646\u062f\u0627\u0631\u0646 \u0645\u0642\u062f\u0627\u0631 \u06cc\u06a9 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646 \u0648 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0645\u06cc\u0631\u0646. \u0628\u0639\u062f \u062f\u0627\u062e\u0644 \u06af\u0631\u0648\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u06cc\u0645\u062a\u200c\u062f\u0627\u0631\u060c \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0631 \u0627\u0633\u0627\u0633 \u0642\u06cc\u0645\u062a \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0641\u0642\u0637 \u0646\u0648\u0634\u062a\u0646 <code>ASC<\/code> \u06cc\u0627 <code>DESC<\/code> \u0646\u06cc\u0633\u062a\u061b \u0628\u0627\u06cc\u062f \u0631\u0641\u062a\u0627\u0631 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0646\u0627\u0642\u0635 \u0647\u0645 \u0645\u0634\u062e\u0635 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0647\u0645\u06cc\u0646 \u0645\u0646\u0637\u0642 \u0631\u0648 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645 \u0648 \u0641\u0642\u0637 \u062c\u0647\u062a \u0642\u06cc\u0645\u062a \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Query(\n    \"\"\"\n    SELECT * FROM products\n    ORDER BY\n        CASE WHEN lastPrice IS NULL THEN 1 ELSE 0 END,\n        lastPrice DESC\n    \"\"\"\n)\nfun observeByHighestPrice(): Flow&lt;List&lt;ProductEntity>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    SELECT * FROM products<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    ORDER BY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">        CASE WHEN lastPrice IS NULL THEN 1 ELSE 0 END,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">        lastPrice DESC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeByHighestPrice<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductEntity<\/span><span style=\"color: #24292E\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0647\u0631 \u062f\u0648 \u062d\u0627\u0644\u062a\u060c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a \u062f\u0631 \u0627\u0646\u062a\u0647\u0627 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Repository \u0686\u0637\u0648\u0631 Query \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0646\u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u0647 \u06a9\u062f\u0648\u0645 \u062a\u0627\u0628\u0639 DAO \u0628\u0627\u06cc\u062f \u0627\u062c\u0631\u0627 \u0628\u0634\u0647. \u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u062f\u0631 Repository \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun observeProducts(\n    sort: ProductSort\n): Flow&lt;List&lt;Product>> {\n    val source = when (sort) {\n        ProductSort.LOWEST_PRICE ->\n            productDao.observeByLowestPrice()\n\n        ProductSort.HIGHEST_PRICE ->\n            productDao.observeByHighestPrice()\n\n        ProductSort.NEWEST ->\n            productDao.observeNewest()\n    }\n\n    return source.map { entities ->\n        entities.map(ProductEntity::toDomain)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    sort: <\/span><span style=\"color: #6F42C1\">ProductSort<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">Product<\/span><span style=\"color: #24292E\">&gt;&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> source <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">when<\/span><span style=\"color: #24292E\"> (sort) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ProductSort.LOWEST_PRICE <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            productDao.<\/span><span style=\"color: #6F42C1\">observeByLowestPrice<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ProductSort.HIGHEST_PRICE <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            productDao.<\/span><span style=\"color: #6F42C1\">observeByHighestPrice<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ProductSort.NEWEST <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            productDao.<\/span><span style=\"color: #6F42C1\">observeNewest<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> source.<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\"> { entities <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        entities.<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\">(ProductEntity::<\/span><span style=\"color: #6F42C1\">toDomain<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u062f\u0631 <code>ProductRepository<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. ViewModel \u0641\u0642\u0637 \u0646\u0648\u0639 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 Repository \u0645\u0646\u0628\u0639 \u0645\u0646\u0627\u0633\u0628 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0628\u062f\u06cc\u0644 Entity \u0628\u0647 \u0645\u062f\u0644 Domain \u0647\u0645 \u062f\u0631 \u0647\u0645\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647 \u062a\u0627 UI \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0627 \u0645\u062f\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u06a9\u0627\u0631 \u0646\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0628\u062f\u06cc\u0644 State \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0647 \u0644\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 ViewModel\u060c \u0628\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u06af\u0632\u06cc\u0646\u0647 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0627\u06cc\u062f Flow \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647. \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u062f\u0648\u0628\u0627\u0631\u0647 <code>flatMapLatest<\/code> \u06a9\u0627\u0631\u0628\u0631\u062f \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val products =\n    sort.flatMapLatest { selectedSort ->\n        repository.observeProducts(selectedSort)\n    }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    sort.<\/span><span style=\"color: #6F42C1\">flatMapLatest<\/span><span style=\"color: #24292E\"> { selectedSort <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        repository.<\/span><span style=\"color: #6F42C1\">observeProducts<\/span><span style=\"color: #24292E\">(selectedSort)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0645\u0642\u062f\u0627\u0631 <code>sort<\/code> \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Flow \u0642\u0628\u0644\u06cc \u06a9\u0646\u0627\u0631 \u06af\u0630\u0627\u0634\u062a\u0647 \u0645\u06cc\u0634\u0647 \u0648 Repository \u062c\u0631\u06cc\u0627\u0646 \u062c\u062f\u06cc\u062f\u06cc \u0628\u0627 \u062a\u0631\u062a\u06cc\u0628 \u062a\u0627\u0632\u0647 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u0635\u0641\u062d\u0647 \u0627\u0628\u062a\u062f\u0627 <code>NEWEST<\/code> \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062c\u0631\u06cc\u0627\u0646 \u062c\u062f\u06cc\u062f\u06cc \u0627\u0632 Room \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0631 \u0627\u0633\u0627\u0633 <code>lastPrice ASC<\/code> \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647. Compose \u0647\u0645 \u0646\u062a\u06cc\u062c\u0647 \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062a\u0631\u062a\u06cc\u0628 \u0644\u06cc\u0633\u062a \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0627\u0646\u0644\u0648\u062f \u0646\u0645\u06cc\u0634\u0646. \u0641\u0642\u0637 Query \u0645\u062d\u0644\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0631\u06a9\u06cc\u0628 \u062c\u0633\u062a\u062c\u0648 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062f\u0631\u0633 \u0642\u0628\u0644\u060c \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u0631\u0648 \u062f\u0627\u0634\u062a\u06cc\u0645. \u062d\u0627\u0644\u0627 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0647\u0645 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0627\u0628\u062a\u062f\u0627 \u0634\u06cc\u0631 \u0631\u0648 \u062c\u0633\u062a\u062c\u0648 \u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f \u0628\u062e\u0648\u0627\u062f \u0646\u062a\u0627\u06cc\u062c \u0647\u0645\u0648\u0646 \u062c\u0633\u062a\u062c\u0648 \u0627\u0632 \u0627\u0631\u0632\u0627\u0646 \u0628\u0647 \u06af\u0631\u0627\u0646 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0628\u0627\u06cc\u062f \u0628\u0647 \u062f\u0648 State \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u0648 \u0646\u0648\u0639 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628 \u0627\u06cc\u0646 \u062f\u0648 \u0627\u0632 <code>combine<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val products =\n    combine(\n        query.debounce(300),\n        sort\n    ) { queryValue, sortValue ->\n        queryValue.trim() to sortValue\n    }.flatMapLatest { (queryValue, sortValue) ->\n        repository.observeProducts(\n            query = queryValue,\n            sort = sortValue\n        )\n    }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">combine<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        query.<\/span><span style=\"color: #6F42C1\">debounce<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">300<\/span><span style=\"color: #24292E\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        sort<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) { queryValue, sortValue <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        queryValue.<\/span><span style=\"color: #6F42C1\">trim<\/span><span style=\"color: #24292E\">() to sortValue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }.<\/span><span style=\"color: #6F42C1\">flatMapLatest<\/span><span style=\"color: #24292E\"> { (queryValue, sortValue) <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        repository.<\/span><span style=\"color: #6F42C1\">observeProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            query <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> queryValue,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            sort <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> sortValue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>combine<\/code> \u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 Query \u06cc\u0627 Sort \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647\u060c \u0622\u062e\u0631\u06cc\u0646 \u0645\u0642\u062f\u0627\u0631 \u0647\u0631 \u062f\u0648 \u0631\u0648 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647\u060c \u0646\u062a\u06cc\u062c\u0647 \u062a\u0627\u0632\u0647 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0641\u0642\u0637 \u0646\u0648\u0639 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647\u060c \u0647\u0645\u0648\u0646 \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u062d\u0641\u0638 \u0645\u06cc\u0634\u0647 \u0648 \u0641\u0642\u0637 \u062a\u0631\u062a\u06cc\u0628 \u0646\u062a\u0627\u06cc\u062c \u0639\u0648\u0636 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>flatMapLatest<\/code> \u0647\u0645 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0641\u0642\u0637 \u0622\u062e\u0631\u06cc\u0646 \u062a\u0631\u06a9\u06cc\u0628 \u0645\u0639\u062a\u0628\u0631 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0633\u0631\u06cc\u0639 \u062a\u0627\u06cc\u067e \u06a9\u0646\u0647 \u0648 \u06af\u0632\u06cc\u0646\u0647 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0639\u0648\u0636 \u06a9\u0646\u0647\u060c \u062c\u0631\u06cc\u0627\u0646\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u06a9\u0646\u0627\u0631 \u06af\u0630\u0627\u0634\u062a\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Repository \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u062c\u0633\u062a\u062c\u0648 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0646\u060c Repository \u0628\u0627\u06cc\u062f \u0647\u0631 \u062f\u0648 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun observeProducts(\n    query: String,\n    sort: ProductSort\n): Flow&lt;List&lt;Product>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    query: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    sort: <\/span><span style=\"color: #6F42C1\">ProductSort<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">Product<\/span><span style=\"color: #24292E\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u0633\u0626\u0644\u0647 \u0637\u0631\u0627\u062d\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062d\u0627\u0644\u062a Query \u062c\u062f\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645\u060c \u062d\u062f\u0627\u0642\u0644 \u0628\u0647 \u0634\u0634 Query \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c\u0633\u062a\u062c\u0648\u06cc \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a\u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a\u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0648 \u0647\u0645\u06cc\u0646 \u0633\u0647 \u062d\u0627\u0644\u062a \u0628\u0631\u0627\u06cc \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u062e\u0627\u0644\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u06a9\u0648\u0686\u06a9 \u0627\u06cc\u0646 \u062a\u0639\u062f\u0627\u062f \u0647\u0646\u0648\u0632 \u0642\u0627\u0628\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0628\u0627 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0646 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u060c \u0648\u0636\u0639\u06cc\u062a \u0642\u06cc\u0645\u062a\u060c \u0628\u0631\u0646\u062f \u0648 \u0641\u06cc\u0644\u062a\u0631\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u060c \u062a\u0639\u062f\u0627\u062f \u062a\u0631\u06a9\u06cc\u0628\u200c\u0647\u0627 \u062e\u06cc\u0644\u06cc \u0632\u06cc\u0627\u062f \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u0641\u0639\u0644\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 Query\u0647\u0627\u06cc \u0631\u0648\u0634\u0646 \u0648 \u0645\u0634\u062e\u0635 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645\u060c \u0686\u0648\u0646 \u0641\u0642\u0637 \u0633\u0647 \u0646\u0648\u0639 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0648 \u06cc\u06a9 \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u062f\u0627\u0631\u06cc\u0645. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0627\u0632 \u0633\u0627\u062e\u062a\u0646 SQL \u067e\u0648\u06cc\u0627 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0648 \u0627\u0645\u0646\u200c\u062a\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b Query \u062c\u0633\u062a\u062c\u0648 \u0628\u0627 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Query(\n    \"\"\"\n    SELECT * FROM products\n    WHERE name LIKE '%' || :query || '%'\n       OR barcode LIKE '%' || :query || '%'\n    ORDER BY\n        CASE WHEN lastPrice IS NULL THEN 1 ELSE 0 END,\n        lastPrice ASC\n    \"\"\"\n)\nfun searchByLowestPrice(\n    query: String\n): Flow&lt;List&lt;ProductEntity>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    SELECT * FROM products<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    WHERE name LIKE &#39;%&#39; || :query || &#39;%&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">       OR barcode LIKE &#39;%&#39; || :query || &#39;%&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    ORDER BY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">        CASE WHEN lastPrice IS NULL THEN 1 ELSE 0 END,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">        lastPrice ASC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">searchByLowestPrice<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    query: <\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductEntity<\/span><span style=\"color: #24292E\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645 \u062c\u0633\u062a\u062c\u0648 \u062f\u0627\u062e\u0644 Room \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647 \u0648 \u0647\u0645 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc. Compose \u0647\u06cc\u0686 \u0641\u06cc\u0644\u062a\u0631 \u06cc\u0627 Sort \u0627\u0636\u0627\u0641\u0647\u200c\u0627\u06cc \u0631\u0648\u06cc \u0646\u062a\u06cc\u062c\u0647 \u0627\u062c\u0631\u0627 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0628\u0631\u0627\u06cc \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 API \u0635\u062f\u0627 \u0632\u062f\u0647 \u0628\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0641\u0639\u0644\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0646\u0647. \u0686\u0648\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0628\u0644\u0627\u064b \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0646\u060c \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648\u06cc \u062f\u0627\u062f\u0647 \u0645\u062d\u0644\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647. \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0628\u0647 \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u0647\u060c \u0647\u06cc\u0686 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0646\u06cc\u0633\u062a. \u0641\u0642\u0637 Query \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Flow \u0646\u062a\u06cc\u062c\u0647 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0631 \u062a\u0639\u062f\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0633\u06cc\u0627\u0631 \u0632\u06cc\u0627\u062f \u0628\u0627\u0634\u0647 \u0648 \u0641\u0642\u0637 \u0628\u062e\u0634\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062f\u0627\u062e\u0644 \u06af\u0648\u0634\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0634\u0631\u0627\u06cc\u0637 \u0641\u0631\u0642 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u0633\u0631\u0648\u0631 \u0635\u062f \u0647\u0632\u0627\u0631 \u0645\u062d\u0635\u0648\u0644 \u062f\u0627\u0631\u0647 \u0627\u0645\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0642\u0637 \u0628\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644 \u0627\u0648\u0644 \u0631\u0648 \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0631\u062f\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0645\u0631\u062a\u0628 \u06a9\u0631\u062f\u0646 \u0647\u0645\u06cc\u0646 \u0628\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644 \u0628\u0647 \u0645\u0639\u0646\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0627\u0631\u0632\u0627\u0646\u200c\u062a\u0631\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644 \u06a9\u0644 \u0633\u0631\u0648\u0631 \u0646\u06cc\u0633\u062a. \u062f\u0631 \u0686\u0646\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc\u200c\u0627\u06cc\u060c \u0646\u0648\u0639 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0627\u06cc\u062f \u0628\u0647 API \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647 \u0648 \u0633\u0631\u0648\u0631 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0628\u0647 \u062a\u0631\u062a\u06cc\u0628 \u062f\u0631\u0633\u062a \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc \u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0632 \u0646\u0638\u0631 \u0645\u0641\u0647\u0648\u0645\u06cc \u0634\u0627\u0645\u0644 <code>sort=price_asc<\/code> \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0642\u0627\u0646\u0648\u0646 \u06a9\u0644\u06cc \u0627\u06cc\u0646\u0647: <strong>\u0627\u06af\u0631 \u062a\u0645\u0627\u0645 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u0648\u0631\u062f\u0646\u06cc\u0627\u0632 \u062f\u0627\u062e\u0644 Room \u0647\u0633\u062a\u0646\u060c \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0645\u062d\u0644\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0641\u0642\u0637 \u0628\u062e\u0634\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a Pagination \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0646\u060c \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0627\u06cc\u062f \u0627\u0632 \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0628\u0634\u0647.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u0641\u0639\u0644\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06a9\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0631 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0627\u062e\u0644 Room \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646\u060c \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0645\u062d\u0644\u06cc \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0648 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627 \u062f\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Compose \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627 \u0631\u0648 \u062f\u0627\u062e\u0644 \u06cc\u06a9 Bottom Sheet\u060c Dropdown Menu \u06cc\u0627 \u0645\u062c\u0645\u0648\u0639\u0647\u200c\u0627\u06cc \u0627\u0632 Chip\u0647\u0627 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645. \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0642\u06cc\u0642 \u0631\u0627\u0628\u0637 \u0628\u0647 \u0637\u0631\u0627\u062d\u06cc \u0635\u0641\u062d\u0647 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 \u062e\u0648\u062f Composable \u0646\u0628\u0627\u06cc\u062f \u0686\u06cc\u0632\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 SQL \u0628\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0645\u0642\u062f\u0627\u0631 <code>ProductSort<\/code> \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>FilterChip(\n    selected = selectedSort == ProductSort.LOWEST_PRICE,\n    onClick = {\n        onSortChanged(ProductSort.LOWEST_PRICE)\n    },\n    label = {\n        Text(\"\u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a\")\n    }\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">FilterChip<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    selected <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> selectedSort <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> ProductSort.LOWEST_PRICE,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    onClick <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">onSortChanged<\/span><span style=\"color: #24292E\">(ProductSort.LOWEST_PRICE)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    label <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">Text<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 Composable \u0641\u0642\u0637 \u0648\u0636\u0639\u06cc\u062a \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Callback \u0631\u0648 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. ViewModel \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0627\u062e\u0644 \u0622\u06cc\u062a\u0645 UI \u0633\u0627\u062e\u062a\u0647 \u0646\u0645\u06cc\u0634\u0647. \u0628\u0631\u0627\u06cc \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u0647\u0645 \u0647\u0645\u06cc\u0646 \u0627\u0644\u06af\u0648 \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc\u0634\u0647\u060c \u0627\u0645\u0627 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u06a9\u0644 \u0635\u0641\u062d\u0647 \u06cc\u0627 \u062a\u0645\u0627\u0645 Chip\u0647\u0627 \u0631\u0648 \u062f\u0631 \u062c\u0632\u0648\u0647 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u0627\u0646\u062a\u062e\u0627\u0628 \u0641\u0639\u0644\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u0647 \u0627\u0644\u0627\u0646 \u0686\u0647 \u062a\u0631\u062a\u06cc\u0628\u06cc \u0641\u0639\u0627\u0644\u0647. \u0627\u06af\u0631 \u062f\u06a9\u0645\u0647 \u0641\u06cc\u0644\u062a\u0631 \u0631\u0648 \u0628\u0632\u0646\u0647 \u0648 \u06af\u0632\u06cc\u0646\u0647\u200c\u0627\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0647\u060c \u0628\u0639\u062f \u0627\u0632 \u0628\u0633\u062a\u0647 \u0634\u062f\u0646 \u067e\u0646\u062c\u0631\u0647 \u0647\u0645 \u0628\u0647\u062a\u0631\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u0641\u0639\u0644\u06cc \u062f\u0631 UI \u0645\u0634\u062e\u0635 \u0628\u0627\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u0639\u0646\u0648\u0627\u0646 \u062f\u06a9\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0632 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0647 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647 \u06cc\u0627 Chip \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0627\u0648\u0646 \u062d\u0627\u0644\u062a \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0645\u062a\u0646 \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0646\u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 ViewModel \u062a\u0648\u0644\u06cc\u062f \u0628\u0634\u0647. ViewModel \u0641\u0642\u0637 <code>ProductSort.LOWEST_PRICE<\/code> \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u0648 UI \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0645\u062a\u0646 \u0641\u0627\u0631\u0633\u06cc \u0627\u0648\u0646 \u0686\u06cc \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0628\u0631\u0627\u06cc \u0686\u0646\u062f\u0632\u0628\u0627\u0646\u0647 \u0634\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645 \u0645\u0647\u0645\u0647. \u0645\u0646\u0637\u0642 \u0628\u0631\u0646\u0627\u0645\u0647 \u062b\u0627\u0628\u062a \u0645\u06cc\u200c\u0645\u0648\u0646\u0647 \u0648 \u0641\u0642\u0637 \u0645\u0646\u0627\u0628\u0639 \u0645\u062a\u0646\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0627\u06cc\u062f \u062d\u0641\u0638 \u0628\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0635\u0641\u062d\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u0628\u0631\u06af\u0631\u062f\u0647\u060c \u0628\u0647\u062a\u0631\u0647 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0642\u0628\u0644\u06cc \u062d\u0641\u0638 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0686\u0648\u0646 State \u062f\u0627\u062e\u0644 ViewModel \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0647\u060c \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0647\u0645\u0648\u0646 ViewModel \u0632\u0646\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u0632 \u0628\u06cc\u0646 \u0646\u0645\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0633\u062a\u0647 \u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627\u0632 \u0628\u0634\u0647\u060c \u062d\u0627\u0644\u062a \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0647. \u0627\u06cc\u0646\u06a9\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc \u062f\u0641\u0639\u0627\u062a \u0628\u0639\u062f \u0647\u0645 \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647 \u06cc\u0627 \u0646\u0647\u060c \u06cc\u06a9 \u062a\u0635\u0645\u06cc\u0645 \u0645\u062d\u0635\u0648\u0644\u06cc\u0647. \u0627\u06af\u0631 \u0627\u06cc\u0646 \u062a\u0631\u062c\u06cc\u062d \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0645\u0647\u0645 \u0628\u0627\u0634\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0645\u0642\u062f\u0627\u0631 Sort \u0631\u0648 \u062f\u0627\u062e\u0644 DataStore \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u0645. \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u06cc\u06a9 State \u0633\u0627\u062f\u0647 \u0635\u0641\u062d\u0647\u060c \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0648\u0627\u0642\u0639\u06cc \u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0627\u0626\u0645\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u0627\u0648\u0644\u06cc\u0647\u060c \u062d\u0641\u0638 \u0634\u062f\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0631 \u0647\u0645\u0627\u0646 Session \u06a9\u0627\u0641\u06cc \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u063a\u06cc\u06cc\u0631 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0646\u0628\u0627\u06cc\u062f Loading \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u0628\u0633\u0627\u0632\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0632 Room \u0645\u06cc\u0627\u0646\u060c \u062a\u063a\u06cc\u06cc\u0631 \u062a\u0631\u062a\u06cc\u0628 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0633\u06cc\u0627\u0631 \u0633\u0631\u06cc\u0639\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u06af\u0632\u06cc\u0646\u0647 \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u06a9\u0644 \u0635\u0641\u062d\u0647 \u0648\u0627\u0631\u062f Loading \u0628\u0634\u0647 \u0648 \u0644\u06cc\u0633\u062a \u0646\u0627\u067e\u062f\u06cc\u062f \u0628\u0634\u0647. \u0644\u06cc\u0633\u062a \u0642\u0628\u0644\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u0627 \u0632\u0645\u0627\u0646 \u0631\u0633\u06cc\u062f\u0646 \u062e\u0631\u0648\u062c\u06cc \u062c\u062f\u06cc\u062f \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647 \u0648 \u0628\u0639\u062f \u062a\u0631\u062a\u06cc\u0628\u0634 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647. \u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0631\u062f \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0622\u0646\u200c\u0642\u062f\u0631 \u0633\u0631\u06cc\u0639 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u062d\u062a\u06cc Loading \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a. Loading \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u0645\u0646\u0637\u0642\u06cc\u0647 \u06a9\u0647 \u0647\u06cc\u0686 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0646\u062f\u0627\u0631\u06cc\u0645. \u062a\u063a\u06cc\u06cc\u0631 Sort \u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a \u0645\u062d\u0644\u06cc \u06a9\u0648\u062a\u0627\u0647\u0647\u060c \u0646\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0635\u0641\u062d\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0631\u062a\u06cc\u0628 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\u06cc \u0628\u0631\u0627\u0628\u0631<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0686\u0646\u062f \u0645\u062d\u0635\u0648\u0644 \u062f\u0642\u06cc\u0642\u0627\u064b \u0642\u06cc\u0645\u062a \u06cc\u06a9\u0633\u0627\u0646 \u062f\u0627\u0631\u0646. \u0627\u06af\u0631 \u0641\u0642\u0637 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0642\u06cc\u0645\u062a \u0645\u0631\u062a\u0628 \u06a9\u0646\u06cc\u0645\u060c \u062a\u0631\u062a\u06cc\u0628 \u0627\u0648\u0646\u200c\u0647\u0627 \u0645\u0645\u06a9\u0646\u0647 \u0628\u06cc\u0646 \u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062b\u0627\u0628\u062a \u0646\u0628\u0627\u0634\u0647. \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0646\u062a\u06cc\u062c\u0647 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0628\u0627\u0634\u0647\u060c \u06cc\u06a9 \u0645\u0639\u06cc\u0627\u0631 \u062f\u0648\u0645 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Query(\n    \"\"\"\n    SELECT * FROM products\n    ORDER BY\n        CASE WHEN lastPrice IS NULL THEN 1 ELSE 0 END,\n        lastPrice ASC,\n        name ASC\n    \"\"\"\n)\nfun observeByLowestPrice(): Flow&lt;List&lt;ProductEntity>>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    SELECT * FROM products<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    ORDER BY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">        CASE WHEN lastPrice IS NULL THEN 1 ELSE 0 END,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">        lastPrice ASC,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">        name ASC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">observeByLowestPrice<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductEntity<\/span><span style=\"color: #24292E\">&gt;&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0628\u062a\u062f\u0627 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0631 \u0627\u0633\u0627\u0633 \u0642\u06cc\u0645\u062a \u0645\u0631\u062a\u0628 \u0645\u06cc\u0634\u0646. \u0627\u06af\u0631 \u0642\u06cc\u0645\u062a \u062f\u0648 \u0645\u062d\u0635\u0648\u0644 \u0628\u0631\u0627\u0628\u0631 \u0628\u0648\u062f\u060c \u0646\u0627\u0645 \u0627\u0648\u0646\u200c\u0647\u0627 \u062a\u0631\u062a\u06cc\u0628 \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0634\u0627\u06cc\u062f \u062f\u0631 \u0638\u0627\u0647\u0631 \u06a9\u0648\u0686\u06a9 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u0647\u060c \u0627\u0645\u0627 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0644\u06cc\u0633\u062a \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u062c\u0627\u0628\u0647\u200c\u062c\u0627 \u0646\u0634\u0647 \u0648 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0627\u06cc\u062f\u0627\u0631\u062a\u0631 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">State \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 State \u0635\u0641\u062d\u0647 \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 Query \u0648 Products\u060c \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0647\u0645 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class ProductsUiState(\n    val query: String = \"\",\n    val selectedSort: ProductSort = ProductSort.NEWEST,\n    val products: List&lt;Product> = emptyList(),\n    val isLoading: Boolean = false,\n    val isRefreshing: Boolean = false,\n    val errorMessage: String? = null\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ProductsUiState<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> query: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> selectedSort: <\/span><span style=\"color: #6F42C1\">ProductSort<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> ProductSort.NEWEST,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products: <\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">Product<\/span><span style=\"color: #24292E\">&gt; <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">emptyList<\/span><span style=\"color: #24292E\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isLoading: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isRefreshing: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> errorMessage: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">? <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>selectedSort<\/code> \u0628\u0647 UI \u0645\u06cc\u06af\u0647 \u06a9\u062f\u0648\u0645 \u06af\u0632\u06cc\u0646\u0647 \u0628\u0627\u06cc\u062f \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u062e\u0648\u062f Products \u0647\u0645 \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc \u062c\u0633\u062a\u062c\u0648 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0627\u0632 Flow\u0647\u0627\u06cc \u062c\u062f\u0627 \u062a\u0631\u06a9\u06cc\u0628 \u06a9\u0646\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0635\u0641\u062d\u0647 \u062e\u0648\u062f\u0634 Query\u060c Sort \u0648 Products \u0631\u0648 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a Refresh \u0628\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0641\u06cc\u0644\u062a\u0631<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Refresh \u06cc\u0639\u0646\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0627\u0632 \u0633\u0631\u0648\u0631 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647 \u0648 Room \u0628\u0647\u200c\u0631\u0648\u0632 \u0628\u0634\u0647. \u0627\u0645\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0641\u0642\u0637 \u0646\u062d\u0648\u0647 \u062e\u0648\u0627\u0646\u062f\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0627\u0632 Room \u0631\u0648 \u0639\u0648\u0636 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u067e\u0633 \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0646\u0628\u0627\u06cc\u062f API \u062f\u0648\u0628\u0627\u0631\u0647 \u0635\u062f\u0627 \u0632\u062f\u0647 \u0628\u0634\u0647. \u0627\u0645\u0627 \u0627\u06af\u0631 \u0628\u0639\u062f \u0627\u0632 \u0627\u0648\u0646 \u0635\u0641\u062d\u0647 \u0631\u0648 Refresh \u06a9\u0646\u0647\u060c Repository \u0622\u062e\u0631\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0648 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647\u060c Room \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Query \u0641\u0639\u0627\u0644 \u062f\u0648\u0628\u0627\u0631\u0647 \u0646\u062a\u06cc\u062c\u0647 \u062c\u062f\u06cc\u062f \u0631\u0648 \u0628\u0627 \u0647\u0645\u0627\u0646 \u062a\u0631\u062a\u06cc\u0628 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u062d\u0627\u0644\u062a \u0641\u0639\u0644\u06cc \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0628\u0627\u0634\u0647\u060c \u0628\u0639\u062f \u0627\u0632 Refresh \u0647\u0645 \u0644\u06cc\u0633\u062a \u0647\u0645\u0686\u0646\u0627\u0646 \u0627\u0632 \u0627\u0631\u0632\u0627\u0646 \u0628\u0647 \u06af\u0631\u0627\u0646 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647\u061b \u0641\u0642\u0637 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0648 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0645\u06a9\u0646\u0647 \u062a\u0627\u0632\u0647 \u0634\u062f\u0647 \u0628\u0627\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0647\u0631 \u0628\u062e\u0634<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Compose \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647\u060c \u062d\u0627\u0644\u062a \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 Callback \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u0646\u0648\u0639 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0641\u0639\u0644\u06cc \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u0648 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0627 \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u062a\u0631\u06a9\u06cc\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u0628\u0631 \u0627\u0633\u0627\u0633 Query \u0648 Sort \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u06a9\u062f\u0648\u0645 \u062c\u0631\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Room \u062c\u0633\u062a\u062c\u0648 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0648\u0627\u0642\u0639\u06cc \u0631\u0648 \u0628\u0627 SQL \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">API \u0641\u0642\u0637 \u0647\u0646\u06af\u0627\u0645 Sync \u06cc\u0627 Refresh \u0648\u0627\u0631\u062f \u0641\u0631\u0627\u06cc\u0646\u062f \u0645\u06cc\u0634\u0647 \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u06a9 \u06af\u0632\u06cc\u0646\u0647 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0646\u0628\u0627\u06cc\u062f \u0628\u0627\u0639\u062b \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u0628\u06a9\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0641\u06cc\u0644\u062a\u0631 \u0641\u0642\u0637 \u062a\u063a\u06cc\u06cc\u0631 \u0638\u0627\u0647\u0631 \u0644\u06cc\u0633\u062a \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0645\u06cc\u200c\u0632\u0646\u0647 \u0648 \u062a\u0631\u062a\u06cc\u0628 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0639\u0648\u0636 \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u067e\u0634\u062a \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0633\u0627\u062f\u0647\u060c \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u0648\u0627\u06a9\u0646\u0634\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 ViewModel \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u06cc\u0634\u0647\u060c \u0628\u0627 Query \u062c\u0633\u062a\u062c\u0648 \u062a\u0631\u06a9\u06cc\u0628 \u0645\u06cc\u0634\u0647\u060c Repository \u0645\u0633\u06cc\u0631 \u0645\u0646\u0627\u0633\u0628 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Room \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0628\u0627 \u062a\u0631\u062a\u06cc\u0628 \u062f\u0642\u06cc\u0642 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>UI \u0641\u0642\u0637 \u0646\u0648\u0639 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061b \u062e\u0648\u062f \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0627\u06cc\u062f \u062a\u0627 \u062c\u0627\u06cc \u0645\u0645\u06a9\u0646 \u062f\u0631 \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647<\/strong>. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0645\u0646\u0637\u0642 \u0635\u0641\u062d\u0647 \u0633\u0627\u062f\u0647 \u0628\u0645\u0648\u0646\u0647\u060c \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f \u0628\u0647\u062a\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0646 \u0648 \u0628\u0639\u062f\u0627\u064b \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 Pagination \u06cc\u0627 \u0641\u06cc\u0644\u062a\u0631\u0647\u0627\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647\u200c\u062a\u0631 \u0631\u0627\u062d\u062a\u200c\u062a\u0631 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f: \u06a9\u0627\u0631\u0628\u0631 \u06cc\u06a9\u06cc \u0627\u0632 \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a\u060c \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u06cc\u0627 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c ViewModel \u0627\u06cc\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u0631\u0648 \u0628\u0627 \u0645\u062a\u0646 \u062c\u0633\u062a\u062c\u0648 \u062a\u0631\u06a9\u06cc\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Repository Query \u0645\u0646\u0627\u0633\u0628 Room \u0631\u0648 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Compose \u0641\u0642\u0637 \u0641\u0647\u0631\u0633\u062a \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647\u061b \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u062a\u0631\u062a\u06cc\u0628\u060c \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u06cc\u06a9\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0637\u0648\u0631 \u0647\u0632\u0627\u0631\u0627\u0646 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u06a9\u0645\u200c\u06a9\u0645 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u062d\u0627\u0641\u0638\u0647 \u06af\u0648\u0634\u06cc\u060c \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06a9\u0627\u0631\u0628\u0631 \u06cc\u0627 \u0633\u0631\u0648\u0631 \u0631\u0648 \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u062f\u0631\u06af\u06cc\u0631 \u06a9\u0646\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Pagination<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062f\u0631\u0633 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06af\u0641\u062a\u06cc\u0645 \u06a9\u0647 \u0627\u06af\u0631 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0641\u0642\u0637 \u0686\u0646\u062f\u0635\u062f \u0645\u062d\u0635\u0648\u0644 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0645\u06cc\u0634\u0647 \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u06cc\u06a9\u200c\u062c\u0627 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f. \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0634\u0647 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u06cc\u0633\u062a. \u0645\u0645\u06a9\u0646\u0647 \u062a\u0639\u062f\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0647 \u0686\u0646\u062f \u0647\u0632\u0627\u0631 \u06cc\u0627 \u062d\u062a\u06cc \u0686\u0646\u062f \u062f\u0647 \u0647\u0632\u0627\u0631 \u0645\u0648\u0631\u062f \u0628\u0631\u0633\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u0634\u0631\u0627\u06cc\u0637\u060c \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0631\u062f\u0646 \u06a9\u0644 \u0641\u0647\u0631\u0633\u062a \u062f\u0631 \u0627\u0648\u0644\u06cc\u0646 \u0648\u0631\u0648\u062f \u0628\u0647 \u0635\u0641\u062d\u0647 \u0647\u0645 \u0632\u0645\u0627\u0646 \u0632\u06cc\u0627\u062f\u06cc \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647\u060c \u0647\u0645 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0645\u0635\u0631\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0645 \u062d\u062c\u0645 \u0632\u06cc\u0627\u062f\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0648\u0627\u0631\u062f \u062d\u0627\u0641\u0638\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061b \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0634\u0627\u06cc\u062f \u0641\u0642\u0637 \u062f\u0647 \u06cc\u0627 \u0628\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644 \u0627\u0648\u0644 \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pagination \u0628\u0631\u0627\u06cc \u062d\u0644 \u0647\u0645\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647 \u0628\u0647 \u0648\u062c\u0648\u062f \u0627\u0648\u0645\u062f\u0647. \u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0644 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u06cc\u06a9\u200c\u062c\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0646\u060c \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0628\u0647 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9\u200c\u062a\u0631\u06cc \u0628\u0647 \u0646\u0627\u0645 Page \u062a\u0642\u0633\u06cc\u0645 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0628\u062a\u062f\u0627 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0646\u0632\u062f\u06cc\u06a9 \u0634\u062f\u060c \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u0647\u0631 \u0635\u0641\u062d\u0647 \u0634\u0627\u0645\u0644 \u06f2\u06f0 \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u0634\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0628\u062a\u062f\u0627 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06f1 \u062a\u0627 \u06f2\u06f0 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u067e\u0627\u06cc\u06cc\u0646 \u0645\u06cc\u0631\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06f2\u06f1 \u062a\u0627 \u06f4\u06f0 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646 \u0648 \u0647\u0645\u06cc\u0646 \u0631\u0648\u0646\u062f \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0632 \u062f\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631\u060c \u0644\u06cc\u0633\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u067e\u06cc\u0648\u0633\u062a\u0647 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u067e\u0634\u062a \u0635\u062d\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0645\u0631\u062d\u0644\u0647\u200c\u0628\u0647\u200c\u0645\u0631\u062d\u0644\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0632 <strong>Paging 3<\/strong> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. \u0627\u06cc\u0646 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u0627\u0632 \u0634\u0628\u06a9\u0647 \u06cc\u0627 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0648 \u0628\u0627 Kotlin Flow\u060c Room\u060c ViewModel \u0648 Compose \u0647\u0645\u0627\u0647\u0646\u06af\u0647. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a Cache \u062d\u0627\u0641\u0638\u0647\u060c \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc\u060c Refresh\u060c Retry \u0648 \u062e\u0637\u0627\u0647\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0635\u0641\u062d\u0627\u062a \u0631\u0648 \u062a\u0627 \u062d\u062f \u0632\u06cc\u0627\u062f\u06cc \u0628\u0631 \u0639\u0647\u062f\u0647 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 LazyColumn \u0628\u0647\u200c\u062a\u0646\u0647\u0627\u06cc\u06cc Pagination \u0646\u06cc\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062f\u0631\u0633 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0627\u0632 <code>LazyColumn<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u06cc\u0645. <code>LazyColumn<\/code> \u0641\u0642\u0637 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647 \u06a9\u0647 \u062f\u0631 \u0645\u062d\u062f\u0648\u062f\u0647 \u062f\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0646\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0645\u062c\u0628\u0648\u0631 \u0646\u06cc\u0633\u062a \u0647\u0632\u0627\u0631\u0627\u0646 Composable \u0631\u0648 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0628\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646 \u0628\u0647 \u0645\u0639\u0646\u06cc Pagination \u0646\u06cc\u0633\u062a. \u0645\u0645\u06a9\u0646\u0647 \u0645\u0627 \u062f\u0647 \u0647\u0632\u0627\u0631 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0627\u0632 API \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645\u060c \u0647\u0645\u0647 \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u062f\u0627\u062e\u0644 \u06cc\u06a9 List \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645 \u0648 \u0628\u0639\u062f \u0628\u0627 <code>LazyColumn<\/code> \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c \u0633\u0627\u062e\u062a UI \u0628\u0647\u06cc\u0646\u0647 \u0634\u062f\u0647\u060c \u0627\u0645\u0627 \u0647\u0645\u0686\u0646\u0627\u0646 \u062a\u0645\u0627\u0645 \u062f\u0647 \u0647\u0632\u0627\u0631 \u0645\u062d\u0635\u0648\u0644 \u062f\u0627\u0646\u0644\u0648\u062f \u0648 \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0634\u062f\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0627\u06cc\u0646 \u062f\u0648 \u0627\u0628\u0632\u0627\u0631 \u062f\u0648 \u0645\u0633\u0626\u0644\u0647 \u0645\u062a\u0641\u0627\u0648\u062a \u0631\u0648 \u062d\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0646: <strong>LazyColumn<\/strong> \u062a\u0639\u062f\u0627\u062f Composable\u0647\u0627\u06cc \u0633\u0627\u062e\u062a\u0647\u200c\u0634\u062f\u0647 \u0631\u0648 \u0645\u062d\u062f\u0648\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 <strong>Pagination<\/strong> \u062a\u0639\u062f\u0627\u062f \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a\u200c\u0634\u062f\u0647 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc\u200c\u0634\u062f\u0647 \u0631\u0648 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062f\u0631 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0647\u0631 \u062f\u0648 \u0631\u0648 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pagination \u062f\u0631 Backend \u0686\u0637\u0648\u0631 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u062a\u0648\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647\u060c Backend \u0647\u0645 \u0628\u0627\u06cc\u062f Pagination \u0631\u0648 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u0646\u0647. \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u0633\u0627\u062f\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0648 \u062a\u0639\u062f\u0627\u062f \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc \u0647\u0631 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 \u0628\u0641\u0631\u0633\u062a\u06cc\u0645. \u062f\u0631 Retrofit\u060c \u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 Endpoint \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0686\u0646\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@GET(\"products\")\nsuspend fun getProducts(\n    @Query(\"page\") page: Int,\n    @Query(\"limit\") pageSize: Int\n): ProductsPageDto\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@GET<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;products&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">getProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;page&quot;<\/span><span style=\"color: #24292E\">) page: <\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;limit&quot;<\/span><span style=\"color: #24292E\">) pageSize: <\/span><span style=\"color: #6F42C1\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">): <\/span><span style=\"color: #6F42C1\">ProductsPageDto<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0627\u0631\u0627\u0645\u062a\u0631 <code>page<\/code> \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u062f\u0648\u0645 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0645\u06cc\u200c\u062e\u0648\u0627\u06cc\u0645 \u0648 <code>pageSize<\/code> \u062a\u0639\u062f\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0631 \u0635\u0641\u062d\u0647 \u0631\u0648 \u062a\u0639\u06cc\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0635\u0641\u062d\u0647 \u0633\u0648\u0645 \u0628\u0627 \u0627\u0646\u062f\u0627\u0632\u0647 \u06f2\u06f0 \u06cc\u0639\u0646\u06cc \u0633\u0631\u0648\u0631 \u0628\u0627\u06cc\u062f \u0628\u062e\u0634 \u0633\u0648\u0645 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0627\u0633\u062e \u0633\u0631\u0648\u0631 \u0647\u0645 \u0628\u0647\u062a\u0631\u0647 \u0641\u0642\u0637 \u06cc\u06a9 List \u0633\u0627\u062f\u0647 \u0646\u0628\u0627\u0634\u0647\u060c \u0686\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u0647 \u0622\u06cc\u0627 \u0635\u0641\u062d\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u06cc\u0627 \u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class ProductsPageDto(\n    val items: List&lt;ProductDto>,\n    val currentPage: Int,\n    val hasNextPage: Boolean\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ProductsPageDto<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> items: <\/span><span style=\"color: #6F42C1\">List<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductDto<\/span><span style=\"color: #24292E\">&gt;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> currentPage: <\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> hasNextPage: <\/span><span style=\"color: #6F42C1\">Boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>items<\/code> \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0645\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. <code>currentPage<\/code> \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u067e\u0627\u0633\u062e \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06a9\u062f\u0648\u0645 \u0635\u0641\u062d\u0647 \u0628\u0648\u062f\u0647 \u0648 <code>hasNextPage<\/code> \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u06af\u0647 \u0622\u06cc\u0627 \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647\u060c \u062f\u0627\u062f\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u06cc\u0627 \u0646\u0647. \u0645\u0645\u06a9\u0646\u0647 Backend \u0628\u0647 \u062c\u0627\u06cc <code>hasNextPage<\/code> \u062a\u0639\u062f\u0627\u062f \u06a9\u0644 \u0635\u0641\u062d\u0627\u062a \u06cc\u0627 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647. \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0642\u0631\u0627\u0631\u062f\u0627\u062f API \u0631\u0648\u0634\u0646 \u0628\u0627\u0634\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u062a\u0648\u0646\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0641\u0647\u0631\u0633\u062a \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Page Number \u0648 Offset<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pagination \u0641\u0642\u0637 \u06cc\u06a9 \u0645\u062f\u0644 \u0646\u062f\u0627\u0631\u0647. \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0627\u0633\u062a\u061b \u0645\u062b\u0644\u0627\u064b \u0635\u0641\u062d\u0647 \u06f1\u060c \u0635\u0641\u062d\u0647 \u06f2 \u0648 \u0635\u0641\u062d\u0647 \u06f3. \u0631\u0648\u0634 \u062f\u06cc\u06af\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>offset<\/code> \u0648 <code>limit<\/code> \u0627\u0633\u062a. \u062f\u0631 \u0645\u062f\u0644 Offset\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u06af\u0647 \u0627\u0632 \u0622\u06cc\u062a\u0645 \u0634\u0645\u0627\u0631\u0647 \u06f4\u06f0 \u0634\u0631\u0648\u0639 \u06a9\u0646 \u0648 \u06f2\u06f0 \u0645\u0648\u0631\u062f \u0628\u0631\u06af\u0631\u062f\u0648\u0646. \u06cc\u0639\u0646\u06cc <code>offset<\/code> \u0646\u0642\u0637\u0647 \u0634\u0631\u0648\u0639 \u0648 <code>limit<\/code> \u062a\u0639\u062f\u0627\u062f \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u0633\u062a. \u0647\u0631 \u062f\u0648 \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u0645\u0639\u0645\u0648\u0644\u06cc \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u0646\u060c \u0627\u0645\u0627 \u06cc\u06a9 \u0636\u0639\u0641 \u0645\u0634\u062a\u0631\u06a9 \u062f\u0627\u0631\u0646. \u0627\u06af\u0631 \u0647\u0646\u06af\u0627\u0645 \u0645\u0631\u0648\u0631 \u0644\u06cc\u0633\u062a\u060c \u0645\u062d\u0635\u0648\u0644\u06cc \u062f\u0631 \u0627\u0628\u062a\u062f\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u06cc\u0627 \u062d\u0630\u0641 \u0628\u0634\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u0628\u0639\u0636\u06cc \u0622\u06cc\u062a\u0645\u200c\u0647\u0627 \u062a\u06a9\u0631\u0627\u0631 \u06cc\u0627 \u062c\u0627 \u0627\u0646\u062f\u0627\u062e\u062a\u0647 \u0628\u0634\u0646\u061b \u0686\u0648\u0646 \u0645\u0648\u0642\u0639\u06cc\u062a \u0639\u062f\u062f\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u0628\u0632\u0631\u06af\u200c\u062a\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 Cursor Pagination \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062f\u0644\u060c \u0633\u0631\u0648\u0631 \u0628\u0647 \u062c\u0627\u06cc \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u06cc\u06a9 Cursor \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647 \u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0639\u062f\u06cc \u0627\u0632 \u0647\u0645\u0648\u0646 \u0646\u0642\u0637\u0647 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. Cursor \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0634\u0646\u0627\u0633\u0647\u060c \u062a\u0627\u0631\u06cc\u062e \u06cc\u0627 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc\u200c\u0634\u062f\u0647 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647. \u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u0641\u0639\u0644\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c Page Number \u06cc\u0627 Offset \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u0647. \u0627\u0645\u0627 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u06cc\u0645 Pagination \u0641\u0642\u0637 \u0628\u0647 \u0645\u0639\u0646\u06cc \u0641\u0631\u0633\u062a\u0627\u062f\u0646 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0646\u06cc\u0633\u062a \u0648 \u0646\u0648\u0639 Backend \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0631\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u062b\u0631 \u0628\u0630\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u062c\u0632\u0627\u06cc \u0627\u0635\u0644\u06cc Paging 3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Paging 3 \u0686\u0646\u062f \u0642\u0637\u0639\u0647 \u0627\u0635\u0644\u06cc \u062f\u0627\u0631\u0647 \u06a9\u0647 \u0647\u0631 \u06a9\u062f\u0648\u0645 \u062f\u0631 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>PagingSource<\/code> \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0647\u0631 \u0635\u0641\u062d\u0647 \u0627\u0632 \u06a9\u062c\u0627 \u0648 \u0686\u0637\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0646. <code>Pager<\/code> \u062c\u0631\u06cc\u0627\u0646 \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647. <code>PagingData<\/code> \u0628\u0633\u062a\u0647\u200c\u0627\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0635\u0641\u062d\u0647\u200c\u0627\u06cc\u0647 \u06a9\u0647 \u0628\u0647 UI \u0645\u06cc\u0631\u0633\u0647 \u0648 Compose \u0628\u0627 <code>collectAsLazyPagingItems<\/code> \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644\u06cc \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 <code>LazyColumn<\/code> \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u0633\u0627\u062f\u0647 Pagination \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0632 \u0634\u0628\u06a9\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\"><strong>Compose \u2192 ViewModel \u2192 Pager \u2192 PagingSource \u2192 API<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc Offline First \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c UI \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 API \u062f\u0627\u062f\u0647 \u0628\u062e\u0648\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u06a9\u0627\u0645\u0644\u200c\u062a\u0631 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\"><strong>Compose \u2192 ViewModel \u2192 Pager \u2192 Room PagingSource<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648 \u0648\u0642\u062a\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u06a9\u0627\u0641\u06cc \u0646\u0628\u0648\u062f\u0646:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\"><strong>RemoteMediator \u2192 API \u2192 Room<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u0628\u0627\u0632 \u0647\u0645 Room \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PagingSource \u0686\u06cc\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>PagingSource<\/code> \u0628\u0647 Paging 3 \u0645\u06cc\u06af\u0647 \u0647\u0631 \u0635\u0641\u062d\u0647 \u0627\u0632 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0686\u0637\u0648\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u0647. \u0627\u06af\u0631 \u0641\u0642\u0637 \u0628\u062e\u0648\u0627\u06cc\u0645 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0632 API \u0628\u062e\u0648\u0646\u06cc\u0645\u060c \u06cc\u06a9 <code>PagingSource<\/code> \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u0628\u06a9\u0647 \u0631\u0648 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0627\u062e\u062a\u0627\u0631 \u0627\u0635\u0644\u06cc \u0627\u0648\u0646 \u0628\u0647 \u0634\u06a9\u0644 \u0632\u06cc\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class ProductsPagingSource(\n    private val api: ProductsApi\n) : PagingSource&lt;Int, Product>() {\n\n    override suspend fun load(\n        params: LoadParams&lt;Int>\n    ): LoadResult&lt;Int, Product> {\n        \/\/ \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06cc\u06a9 \u0635\u0641\u062d\u0647\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ProductsPagingSource<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">private<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> api: <\/span><span style=\"color: #6F42C1\">ProductsApi<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) : <\/span><span style=\"color: #6F42C1\">PagingSource<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #6F42C1\">Product<\/span><span style=\"color: #24292E\">&gt;() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">load<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        params: <\/span><span style=\"color: #6F42C1\">LoadParams<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ): <\/span><span style=\"color: #6F42C1\">LoadResult<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #6F42C1\">Product<\/span><span style=\"color: #24292E\">&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6A737D\">\/\/ \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06cc\u06a9 \u0635\u0641\u062d\u0647<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0648\u0639 <code>Int<\/code> \u06a9\u0644\u06cc\u062f \u0635\u0641\u062d\u0647 \u0627\u0633\u062a\u061b \u0686\u0648\u0646 Backend \u0645\u0627 \u0628\u0627 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0646\u0648\u0639 <code>Product<\/code> \u0647\u0645 \u0645\u062f\u0644 \u0647\u0631 \u0622\u06cc\u062a\u0645 \u062e\u0631\u0648\u062c\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u062f\u0631 \u0644\u0627\u06cc\u0647 Data \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647\u060c \u0686\u0648\u0646 \u0628\u0627 \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647 \u0648 API \u0627\u0631\u062a\u0628\u0627\u0637 \u062f\u0627\u0631\u0647. ViewModel \u0646\u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0634 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0628\u062f\u0647 \u06cc\u0627 \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u0647 \u06a9\u062f\u0648\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0639\u062f\u06cc \u0628\u0627\u06cc\u062f \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u062a\u062f load \u0686\u0647 \u0686\u06cc\u0632\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Paging 3 \u0647\u0646\u06af\u0627\u0645 \u0646\u06cc\u0627\u0632\u060c \u0645\u062a\u062f <code>load<\/code> \u0631\u0648 \u0635\u062f\u0627 \u0645\u06cc\u200c\u0632\u0646\u0647. \u0645\u0642\u062f\u0627\u0631 <code>params.key<\/code> \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u062f\u0648\u0645 \u0635\u0641\u062d\u0647 \u0628\u0627\u06cc\u062f \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0647 \u0648 <code>params.loadSize<\/code> \u062a\u0639\u062f\u0627\u062f \u062a\u0642\u0631\u06cc\u0628\u06cc \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc \u0645\u0648\u0631\u062f\u0646\u06cc\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0627\u0635\u0644\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val page = params.key ?: 1\n\nval response = api.getProducts(\n    page = page,\n    pageSize = params.loadSize\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> page <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> params.key ?: <\/span><span style=\"color: #005CC5\">1<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> response <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> api.<\/span><span style=\"color: #6F42C1\">getProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    page <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> page,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    pageSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> params.loadSize<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 <code>key<\/code> \u0645\u0642\u062f\u0627\u0631 \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u06cc\u0639\u0646\u06cc \u0627\u0648\u0644\u06cc\u0646 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647 \u0648 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Paging 3 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0648\u0644\u06cc\u0647 \u062a\u0639\u062f\u0627\u062f \u0628\u06cc\u0634\u062a\u0631\u06cc \u0627\u0632 \u0627\u0646\u062f\u0627\u0632\u0647 \u0645\u0639\u0645\u0648\u0644 \u0635\u0641\u062d\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647\u062a\u0631\u0647 \u062a\u0627 \u062c\u0627\u06cc \u0645\u0645\u06a9\u0646 \u0627\u0632 <code>params.loadSize<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0639\u062f\u062f \u06f2\u06f0 \u0631\u0648 \u062f\u0631 \u0686\u0646\u062f \u062c\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062b\u0627\u0628\u062a \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645. \u0627\u0644\u0628\u062a\u0647 Backend \u0647\u0645 \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0646\u0647 \u0627\u0646\u062f\u0627\u0632\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0642\u0628\u0648\u0644 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u062a\u06cc\u062c\u0647 \u0645\u0648\u0641\u0642 \u06cc\u06a9 \u0635\u0641\u062d\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u0627\u0633\u062e\u060c <code>PagingSource<\/code> \u0628\u0627\u06cc\u062f \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0635\u0641\u062d\u0647 \u0641\u0639\u0644\u06cc \u0648 \u06a9\u0644\u06cc\u062f \u0635\u0641\u062d\u0627\u062a \u0642\u0628\u0644 \u0648 \u0628\u0639\u062f \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>return LoadResult.Page(\n    data = response.items.map(ProductDto::toDomain),\n    prevKey = if (page == 1) null else page - 1,\n    nextKey = if (response.hasNextPage) page + 1 else null\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> LoadResult.<\/span><span style=\"color: #6F42C1\">Page<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> response.items.<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\">(ProductDto::<\/span><span style=\"color: #6F42C1\">toDomain<\/span><span style=\"color: #24292E\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    prevKey <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (page <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #005CC5\">null<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> page <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    nextKey <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (response.hasNextPage) page <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>data<\/code> \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0645\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0627\u0633\u062a. <code>prevKey<\/code> \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0635\u0641\u062d\u0647 \u0642\u0628\u0644\u06cc \u0686\u06cc\u0647 \u0648 <code>nextKey<\/code> \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc <code>nextKey<\/code> \u0628\u0631\u0627\u0628\u0631 <code>null<\/code> \u0628\u0627\u0634\u0647\u060c Paging \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0633\u06cc\u062f\u0647 \u0648 \u062f\u06cc\u06af\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062c\u062f\u06cc\u062f\u06cc \u0627\u0631\u0633\u0627\u0644 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0644\u06cc\u0633\u062a\u06cc \u06a9\u0647 \u0641\u0642\u0637 \u0627\u0632 \u0628\u0627\u0644\u0627 \u0628\u0647 \u067e\u0627\u06cc\u06cc\u0646 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u0634\u0647\u060c \u0635\u0641\u062d\u0647 \u0642\u0628\u0644\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0627\u0647\u0645\u06cc\u062a \u06a9\u0645\u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 Paging \u0628\u0631\u0627\u06cc \u062d\u0631\u06a9\u062a \u062f\u0631 \u0647\u0631 \u062f\u0648 \u062c\u0647\u062a \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627 \u062f\u0631 PagingSource<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u0628\u06a9\u0647 \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u0647\u060c \u0646\u0628\u0627\u06cc\u062f Exception \u0627\u0632 <code>load<\/code> \u062e\u0627\u0631\u062c \u0628\u0634\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 Crash \u06a9\u0646\u0647. PagingSource \u062e\u0637\u0627 \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 <code>LoadResult.Error<\/code> \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>return try {\n    val response = api.getProducts(\n        page = page,\n        pageSize = params.loadSize\n    )\n\n    LoadResult.Page(\n        data = response.items.map(ProductDto::toDomain),\n        prevKey = if (page == 1) null else page - 1,\n        nextKey = if (response.hasNextPage) page + 1 else null\n    )\n} catch (error: Exception) {\n    LoadResult.Error(error)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">try<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> response <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> api.<\/span><span style=\"color: #6F42C1\">getProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        page <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> page,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        pageSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> params.loadSize<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    LoadResult.<\/span><span style=\"color: #6F42C1\">Page<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> response.items.<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\">(ProductDto::<\/span><span style=\"color: #6F42C1\">toDomain<\/span><span style=\"color: #24292E\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        prevKey <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (page <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #005CC5\">null<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> page <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        nextKey <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (response.hasNextPage) page <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">} <\/span><span style=\"color: #D73A49\">catch<\/span><span style=\"color: #24292E\"> (error: <\/span><span style=\"color: #6F42C1\">Exception<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    LoadResult.<\/span><span style=\"color: #6F42C1\">Error<\/span><span style=\"color: #24292E\">(error)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637\u0627 \u0628\u0639\u062f\u0627\u064b \u0628\u0647 UI \u0645\u06cc\u0631\u0633\u0647 \u0648 Compose \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0646\u0648\u0639 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc\u060c \u067e\u06cc\u0627\u0645 \u0648 \u062f\u06a9\u0645\u0647 Retry \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06a9\u0647 Room \u0648 Offline First \u0631\u0648 \u062f\u0627\u0631\u06cc\u0645\u060c PagingSource \u0645\u0633\u062a\u0642\u06cc\u0645 \u0634\u0628\u06a9\u0647 \u0645\u0633\u06cc\u0631 \u0646\u0647\u0627\u06cc\u06cc \u0645\u0627 \u0646\u06cc\u0633\u062a. \u0627\u06cc\u0646 \u0646\u0645\u0648\u0646\u0647 \u0641\u0642\u0637 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0646\u0642\u0634 PagingSource \u0631\u0648 \u0628\u0641\u0647\u0645\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pager \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Pager<\/code> \u062a\u0646\u0638\u06cc\u0645\u0627\u062a Pagination \u0648 PagingSource \u0631\u0648 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647 \u0648 \u06cc\u06a9 <code>Flow&lt;PagingData&lt;Product&gt;&gt;<\/code> \u0645\u06cc\u200c\u0633\u0627\u0632\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun pagedProducts(): Flow&lt;PagingData&lt;Product>> {\n    return Pager(\n        config = PagingConfig(\n            pageSize = 20\n        ),\n        pagingSourceFactory = {\n            ProductsPagingSource(api)\n        }\n    ).flow\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">pagedProducts<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">PagingData<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">Product<\/span><span style=\"color: #24292E\">&gt;&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Pager<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        config <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">PagingConfig<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            pageSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        pagingSourceFactory <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #6F42C1\">ProductsPagingSource<\/span><span style=\"color: #24292E\">(api)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ).flow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0631 Repository \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. <code>PagingConfig<\/code> \u062a\u0639\u06cc\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0628\u0627 \u0686\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0628\u0634\u0646 \u0648 <code>pagingSourceFactory<\/code> \u0647\u0631 \u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 \u06cc\u06a9 PagingSource \u062c\u062f\u06cc\u062f \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0646\u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 PagingSource \u0631\u0648 \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0634\u0647 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645. PagingSource \u0645\u0645\u06a9\u0646\u0647 Invalid \u0628\u0634\u0647 \u0648 Pager \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0646\u0647 \u0646\u0645\u0648\u0646\u0647 \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0628\u0633\u0627\u0632\u0647\u061b \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 Factory \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">pageSize<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>pageSize<\/code> \u062a\u0639\u062f\u0627\u062f \u0645\u0639\u0645\u0648\u0644 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc \u0647\u0631 \u0635\u0641\u062d\u0647 \u0627\u0633\u062a:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>PagingConfig(\n    pageSize = 20\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">PagingConfig<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    pageSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0639\u062f\u062f \u0645\u0646\u0627\u0633\u0628 \u0628\u0647 \u0627\u0646\u062f\u0627\u0632\u0647 \u0647\u0631 \u0622\u06cc\u062a\u0645\u060c \u0633\u0631\u0639\u062a API \u0648 \u0646\u0648\u0639 \u0635\u0641\u062d\u0647 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647. \u0627\u06af\u0631 \u0647\u0631 \u0645\u062d\u0635\u0648\u0644 \u062a\u0635\u0648\u06cc\u0631 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0632\u06cc\u0627\u062f\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9\u200c\u062a\u0631 \u0645\u0646\u0637\u0642\u06cc\u200c\u062a\u0631\u0646. \u0627\u06af\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0647\u0631 \u0645\u062d\u0635\u0648\u0644 \u0633\u0628\u06a9 \u0628\u0627\u0634\u0647\u060c \u0645\u06cc\u0634\u0647 \u062a\u0639\u062f\u0627\u062f \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0639\u062f\u062f \u062e\u06cc\u0644\u06cc \u06a9\u0648\u0686\u06a9 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0646 \u0648 \u0639\u062f\u062f \u062e\u06cc\u0644\u06cc \u0628\u0632\u0631\u06af \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0641\u0627\u06cc\u062f\u0647 Pagination \u0631\u0648 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u200c\u0628\u0631\u0647. \u0627\u06cc\u0646 \u0645\u0642\u062f\u0627\u0631 \u0628\u0627\u06cc\u062f \u0628\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0648\u0627\u0642\u0639\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0634\u0647\u060c \u0646\u0647 \u0635\u0631\u0641\u0627\u064b \u0628\u0631\u0627\u0633\u0627\u0633 \u06cc\u06a9 \u0639\u062f\u062f \u0631\u0627\u06cc\u062c.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">prefetchDistance<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a Paging \u0635\u0628\u0631 \u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0647 \u0622\u062e\u0631\u06cc\u0646 \u0622\u06cc\u062a\u0645 \u0628\u0631\u0633\u0647. \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06a9\u0645\u06cc \u0632\u0648\u062f\u062a\u0631 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0631\u0648 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>PagingConfig(\n    pageSize = 20,\n    prefetchDistance = 5\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">PagingConfig<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    pageSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">20<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    prefetchDistance <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>prefetchDistance = 5<\/code> \u06cc\u0639\u0646\u06cc \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062d\u062f\u0648\u062f \u067e\u0646\u062c \u0622\u06cc\u062a\u0645 \u062a\u0627 \u0627\u0646\u062a\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0641\u0627\u0635\u0644\u0647 \u062f\u0627\u0631\u0647\u060c \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0634\u0631\u0648\u0639 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u062f\u0631 \u062d\u0627\u0644\u062a \u0639\u0627\u062f\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 Loading \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0646\u0631\u0633\u0647 \u0648 \u0627\u0633\u06a9\u0631\u0648\u0644 \u067e\u06cc\u0648\u0633\u062a\u0647\u200c\u062a\u0631 \u0627\u062d\u0633\u0627\u0633 \u0628\u0634\u0647. \u0627\u0645\u0627 \u0645\u0642\u062f\u0627\u0631 \u062e\u06cc\u0644\u06cc \u0628\u0632\u0631\u06af \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0635\u0641\u062d\u0627\u062a \u0628\u0639\u062f\u06cc \u0632\u0648\u062f\u062a\u0631 \u0627\u0632 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0646\u0644\u0648\u062f \u0628\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">initialLoadSize<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u0648\u0644\u06cc\u0646 \u0648\u0631\u0648\u062f \u0628\u0647 \u0635\u0641\u062d\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0628\u062e\u0648\u0627\u06cc\u0645 \u0628\u06cc\u0634 \u0627\u0632 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0646\u0645\u0627\u06cc\u0634 \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0627\u0645\u0644\u200c\u062a\u0631 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>PagingConfig(\n    pageSize = 20,\n    initialLoadSize = 40\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">PagingConfig<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    pageSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">20<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    initialLoadSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">40<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06f4\u06f0 \u0645\u062d\u0635\u0648\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647 \u0648 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc\u200c\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc \u0628\u0627 \u0627\u0646\u062f\u0627\u0632\u0647 \u0645\u0639\u0645\u0648\u0644 \u06f2\u06f0 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0632\u0645\u0627\u0646\u06cc \u0645\u0641\u06cc\u062f\u0647 \u06a9\u0647 \u0635\u0641\u062d\u0647 \u06af\u0648\u0634\u06cc\u060c \u0633\u0631\u0639\u062a \u0627\u0633\u06a9\u0631\u0648\u0644 \u06cc\u0627 \u0637\u0631\u0627\u062d\u06cc UI \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u0645\u0635\u0631\u0641 \u0628\u0634\u0647. \u0627\u0645\u0627 \u0628\u0627\u0632 \u0647\u0645 \u0646\u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0648\u0627\u0642\u0639\u06cc \u062f\u0627\u062f\u0647 \u0632\u06cc\u0627\u062f\u06cc \u0631\u0648 \u062f\u0631 \u0627\u0648\u0644\u06cc\u0646 \u0648\u0631\u0648\u062f \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PagingData \u062f\u0631 ViewModel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u06cc\u06a9 <code>Flow&lt;PagingData&lt;Product&gt;&gt;<\/code> \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647 \u0648 ViewModel \u0627\u0648\u0646 \u0631\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 UI \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val products =\n    repository.pagedProducts()\n        .cachedIn(viewModelScope)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    repository.<\/span><span style=\"color: #6F42C1\">pagedProducts<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">cachedIn<\/span><span style=\"color: #24292E\">(viewModelScope)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>cachedIn(viewModelScope)<\/code> \u06cc\u06a9\u06cc \u0627\u0632 \u062e\u0637\u0648\u0637 \u0645\u0647\u0645 Paging \u0627\u0633\u062a. \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647 \u0631\u0648 \u062f\u0631 \u0645\u062d\u062f\u0648\u062f\u0647 ViewModel Cache \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062a\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc Compose \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0648\u0642\u062a UI \u0628\u0627\u0639\u062b \u0634\u0631\u0648\u0639 \u062f\u0648\u0628\u0627\u0631\u0647 \u06a9\u0644 \u062c\u0631\u06cc\u0627\u0646 Pagination \u0646\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 Cache \u062f\u0627\u0626\u0645\u06cc \u0646\u06cc\u0633\u062a \u0648 \u062c\u0627\u06cc Room \u0631\u0648 \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0641\u0642\u0637 Snapshot \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647 \u0631\u0648 \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u0648 \u062f\u0631 \u0637\u0648\u0644 \u0639\u0645\u0631 ViewModel \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. \u062e\u0648\u062f Paging 3 \u0646\u06cc\u0632 \u0628\u0631\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0635\u0641\u062d\u0647\u200c\u0627\u06cc Cache \u062d\u0627\u0641\u0638\u0647 \u0648 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u0645\u0627\u06cc\u0634 \u062f\u0631 Compose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Compose\u060c <code>Flow&lt;PagingData&lt;Product&gt;&gt;<\/code> \u0631\u0648 \u0628\u0647 <code>LazyPagingItems<\/code> \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val products =\n    viewModel.products.collectAsLazyPagingItems()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    viewModel.products.<\/span><span style=\"color: #6F42C1\">collectAsLazyPagingItems<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u062f\u0631 <code>LazyColumn<\/code> \u0628\u0647 \u062c\u0627\u06cc List \u0645\u0639\u0645\u0648\u0644\u06cc \u0627\u0632 \u062a\u0639\u062f\u0627\u062f \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc Paging \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LazyColumn {\n    items(\n        count = products.itemCount,\n        key = products.itemKey { it.id }\n    ) { index ->\n        products&#91;index&#93;?.let { product ->\n            ProductItem(product)\n        }\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">LazyColumn<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">items<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        count <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> products.itemCount,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        key <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> products.<\/span><span style=\"color: #6F42C1\">itemKey<\/span><span style=\"color: #24292E\"> { it.id }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) { index <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        products&#91;index&#93;?.<\/span><span style=\"color: #6F42C1\">let<\/span><span style=\"color: #24292E\"> { product <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #6F42C1\">ProductItem<\/span><span style=\"color: #24292E\">(product)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>products[index]<\/code> \u0645\u0645\u06a9\u0646\u0647 \u0645\u0648\u0642\u062a\u0627\u064b <code>null<\/code> \u0628\u0627\u0634\u0647\u060c \u0686\u0648\u0646 Paging \u0647\u0646\u0648\u0632 \u0628\u0639\u0636\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u062f\u0631 \u062d\u0627\u0644 \u0622\u0645\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0627\u0631\u0647. \u0645\u06cc\u0634\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a Placeholder \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f \u06cc\u0627 \u062a\u0627 \u0631\u0633\u06cc\u062f\u0646 \u0622\u06cc\u062a\u0645 \u0686\u06cc\u0632\u06cc \u0646\u0633\u0627\u062e\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>itemKey<\/code> \u0647\u0645 \u0645\u062b\u0644 <code>key<\/code> \u062f\u0631 \u0644\u06cc\u0633\u062a \u0645\u0639\u0645\u0648\u0644\u06cc\u060c \u0634\u0646\u0627\u0633\u0647 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0628\u0647 Compose \u0645\u06cc\u062f\u0647 \u062a\u0627 \u062c\u0627\u0628\u0647\u200c\u062c\u0627\u06cc\u06cc \u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0622\u06cc\u062a\u0645\u200c\u0647\u0627 \u0628\u0647\u062a\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0647. API \u0631\u0633\u0645\u06cc Compose \u0628\u0631\u0627\u06cc Paging \u0647\u0645 \u0647\u0645\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0631\u0648 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 <code>PagingData<\/code> \u0628\u0647 Lazy layout\u0647\u0627 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0633\u0647 \u0646\u0648\u0639 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062f\u0631 Paging<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Paging \u0641\u0642\u0637 \u06cc\u06a9 Loading \u0646\u062f\u0627\u0631\u0647. \u0633\u0647 \u0646\u0648\u0639 \u0639\u0645\u0644\u06cc\u0627\u062a \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0635\u0644\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Refresh<\/strong> \u06cc\u0639\u0646\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06cc\u0627 \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0644 \u062c\u0631\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647. <strong>Append<\/strong> \u06cc\u0639\u0646\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0628\u0639\u062f \u0627\u0632 \u0627\u0646\u062a\u0647\u0627\u06cc \u0641\u0639\u0644\u06cc \u0644\u06cc\u0633\u062a. <strong>Prepend<\/strong> \u06cc\u0639\u0646\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0642\u0628\u0644 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627\u06cc \u0641\u0639\u0644\u06cc \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0635\u0641\u062d\u0647 \u0645\u0639\u0645\u0648\u0644 \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u060c \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627 Refresh \u0648 Append \u0633\u0631\u0648\u06a9\u0627\u0631 \u062f\u0627\u0631\u06cc\u0645. \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0628\u0627\u0644\u0627\u06cc \u0644\u06cc\u0633\u062a \u0634\u0631\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0627 \u067e\u0627\u06cc\u06cc\u0646 \u0631\u0641\u062a\u0646\u060c \u0635\u0641\u062d\u0627\u062a \u0628\u0639\u062f\u06cc Append \u0645\u06cc\u0634\u0646. \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0646\u06cc\u0627\u0632\u06cc \u0646\u062f\u0627\u0631\u06cc\u0645 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0642\u0628\u0644 \u0627\u0632 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0634\u0646\u0627\u062e\u062a \u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u0645\u0647\u0645\u0647\u060c \u0686\u0648\u0646 \u0647\u0631 \u06a9\u062f\u0648\u0645 \u0628\u0627\u06cc\u062f UI \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Loading \u0627\u0648\u0644\u06cc\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0635\u0641\u062d\u0647 \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646 \u0628\u0627\u0631 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647 \u0648 \u0647\u0646\u0648\u0632 \u0647\u06cc\u0686 \u0645\u062d\u0635\u0648\u0644\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647\u060c Loading \u0628\u0627\u06cc\u062f \u062f\u0631 \u0645\u0631\u06a9\u0632 \u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>when (products.loadState.refresh) {\n    is LoadState.Loading -> {\n        FullPageLoading()\n    }\n\n    is LoadState.Error -> {\n        InitialLoadError()\n    }\n\n    is LoadState.NotLoading -> {\n        ProductsList()\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">when<\/span><span style=\"color: #24292E\"> (products.loadState.refresh) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.Loading <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">FullPageLoading<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.Error <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">InitialLoadError<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.NotLoading <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">ProductsList<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0646\u0645\u0648\u0646\u0647 \u0641\u0642\u0637 \u0628\u062e\u0634 \u062a\u0635\u0645\u06cc\u0645\u200c\u06af\u06cc\u0631\u06cc \u0645\u0647\u0645 \u0631\u0648 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647. \u0647\u062f\u0641 \u0627\u06cc\u0646 \u0646\u06cc\u0633\u062a \u06a9\u0647 \u06a9\u0644 Composable \u0635\u0641\u062d\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 \u062c\u0632\u0648\u0647 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>loadState.refresh<\/code> \u0648\u0636\u0639\u06cc\u062a \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0635\u0644\u06cc \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06af\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u0647 \u0648 \u0647\u06cc\u0686 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645\u060c \u0646\u0645\u0627\u06cc\u0634 \u062e\u0637\u0627\u06cc \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u0645\u0646\u0637\u0642\u06cc\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Loading \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0628\u0644\u06cc \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0647\u0633\u062a\u0646 \u0648 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u062f\u0631 \u062d\u0627\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0646\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u06a9\u0644 \u0635\u0641\u062d\u0647 \u0628\u0627 Loading \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0628\u0634\u0647. \u0641\u0642\u0637 \u06cc\u06a9 \u0646\u0634\u0627\u0646\u06af\u0631 \u06a9\u0648\u0686\u06a9 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u200c\u062f\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (products.loadState.append is LoadState.Loading) {\n    item {\n        AppendLoading()\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (products.loadState.append <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.Loading) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">item<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">AppendLoading<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u0686\u0646\u0627\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0631\u06cc\u0627\u0641\u062a\u200c\u0634\u062f\u0647 \u0631\u0648 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647 \u0648 \u0641\u0642\u0637 \u0645\u062a\u0648\u062c\u0647 \u0645\u06cc\u0634\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0647\u0645\u0648\u0646 \u062a\u0641\u0627\u0648\u062a\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0628\u06cc\u0646 Loading \u0627\u0648\u0644\u06cc\u0647 \u0648 Refresh \u062f\u06cc\u062f\u06cc\u0645\u060c \u0627\u0645\u0627 \u062f\u0631 Pagination \u06cc\u06a9 \u062d\u0627\u0644\u062a \u0627\u0636\u0627\u0641\u0647 \u0628\u0647 \u0646\u0627\u0645 Append \u0647\u0645 \u062f\u0627\u0631\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0637\u0627\u06cc \u0635\u0641\u062d\u0647 \u0628\u0639\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u0647\u0646\u06af\u0627\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0634\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0646\u0628\u0627\u06cc\u062f \u06a9\u0644 \u0644\u06cc\u0633\u062a \u0646\u0627\u067e\u062f\u06cc\u062f \u0628\u0634\u0647. \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0628\u0644\u06cc \u0647\u0645\u0686\u0646\u0627\u0646 \u0645\u0639\u062a\u0628\u0631\u0646 \u0648 \u0641\u0642\u0637 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u062f\u0627\u0645\u0647 \u0644\u06cc\u0633\u062a \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u062e\u0637\u0627 \u0631\u0648 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0641\u0647\u0631\u0633\u062a \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u200c\u062f\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (products.loadState.append is LoadState.Error) {\n    item {\n        AppendError(\n            onRetry = products::retry\n        )\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (products.loadState.append <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.Error) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">item<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">AppendError<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            onRetry <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> products::<\/span><span style=\"color: #6F42C1\">retry<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>retry<\/code> \u0641\u0642\u0637 \u0639\u0645\u0644\u06cc\u0627\u062a \u0634\u06a9\u0633\u062a\u200c\u062e\u0648\u0631\u062f\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06af\u0631 Append \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0647\u0645\u0648\u0646 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u0634\u0647\u061b \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0644 \u0644\u06cc\u0633\u062a \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0632\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 Paging 3 \u0627\u0633\u062a\u061b \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0646\u0648\u0639 \u0639\u0645\u0644\u06cc\u0627\u062a \u0646\u0627\u0645\u0648\u0641\u0642 \u0631\u0648 \u0645\u06cc\u200c\u0634\u0646\u0627\u0633\u0647 \u0648 Retry \u0631\u0648 \u0631\u0648\u06cc \u0647\u0645\u0648\u0646 \u0645\u0631\u062d\u0644\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u062f\u0633\u062a\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0644 \u0644\u06cc\u0633\u062a \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>products.refresh()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">products.<\/span><span style=\"color: #6F42C1\">refresh<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>refresh<\/code> \u06cc\u06a9 \u0646\u0633\u0644 \u062a\u0627\u0632\u0647 \u0627\u0632 PagingData \u0645\u06cc\u200c\u0633\u0627\u0632\u0647 \u0648 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0631\u0648 \u0627\u0632 \u0646\u0642\u0637\u0647 \u0645\u0646\u0627\u0633\u0628 \u062f\u0648\u0628\u0627\u0631\u0647 \u0634\u0631\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0628\u0627 <code>retry<\/code> \u0641\u0631\u0642 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>retry<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u06a9\u0633\u062a\u200c\u062e\u0648\u0631\u062f\u0647 \u0642\u0628\u0644\u06cc \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 <code>refresh<\/code> \u0645\u06cc\u06af\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0639\u0644\u06cc \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0648 \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 Paging \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0632 API \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 <code>PagingSource<\/code> \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 API \u0628\u062e\u0648\u0646\u0647\u060c \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0647\u0633\u062a\u0646 \u06a9\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0628\u0647 \u0645\u062d\u0636 \u0628\u0633\u062a\u0647 \u0634\u062f\u0646 \u062c\u0631\u06cc\u0627\u0646 \u06cc\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0631\u0641\u062a\u0646 Cache \u062d\u0627\u0641\u0638\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u062d\u0644\u06cc \u0642\u0627\u0628\u0644 \u0627\u062a\u06a9\u0627\u06cc\u06cc \u0646\u062f\u0627\u0631\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u062f\u0631 \u062f\u0631\u0633\u200c\u0647\u0627\u06cc \u0642\u0628\u0644 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u06cc\u0645 Room \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0627\u0634\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0646\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0631\u06cc\u0627\u0641\u062a\u200c\u0634\u062f\u0647 \u0631\u0648 \u062d\u062a\u06cc \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646 \u0628\u0628\u06cc\u0646\u0647 \u0648 \u062c\u0633\u062a\u062c\u0648 \u06cc\u0627 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0647\u0645 \u0631\u0648\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628 Pagination \u0628\u0627 Offline First \u0627\u0632 <code>RemoteMediator<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. Android \u0627\u06cc\u0646 \u0642\u0637\u0639\u0647 \u0631\u0648 \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0631\u0627\u06cc \u062d\u0627\u0644\u062a\u06cc \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u06a9\u0647 UI \u0627\u0632 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u062d\u0644\u06cc \u0628\u062e\u0648\u0646\u0647\u060c \u0627\u0645\u0627 \u0647\u0646\u06af\u0627\u0645 \u062a\u0645\u0627\u0645 \u0634\u062f\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc Cache\u060c \u0635\u0641\u062d\u0627\u062a \u062c\u062f\u06cc\u062f \u0627\u0632 \u0634\u0628\u06a9\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0645\u0627\u0631\u06cc \u0646\u0647\u0627\u06cc\u06cc Pagination \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u0646\u0647\u0627\u06cc\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\"><strong>Compose \u2192 PagingData \u2192 Pager \u2192 Room PagingSource<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc Room \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u0644\u06cc\u0633\u062a \u062f\u0627\u062f\u0647 \u06a9\u0627\u0641\u06cc \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c Paging \u0628\u0647 RemoteMediator \u062e\u0628\u0631 \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\"><strong>RemoteMediator \u2192 Products API \u2192 Room<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f Room \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c PagingSource \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u0645\u06cc\u0634\u0647 \u0648 \u062e\u0631\u0648\u062c\u06cc \u062c\u062f\u06cc\u062f \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647 UI \u0645\u06cc\u0631\u0633\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <code>RemoteMediator<\/code> \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc API \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 Compose \u062a\u062d\u0648\u06cc\u0644 \u0646\u0645\u06cc\u062f\u0647. \u0641\u0642\u0637 \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. UI \u0647\u0645\u0686\u0646\u0627\u0646 \u0641\u0642\u0637 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647 \u06a9\u0647 \u062f\u0631 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u062d\u0644\u06cc \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0646. \u0627\u06cc\u0646 \u0647\u0645\u0648\u0646 Single Source of Truth \u0642\u0628\u0644\u06cc\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PagingSource \u0627\u0632 Room<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0627\u0632 Room \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a PagingSource \u0631\u0648 \u062f\u0633\u062a\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645. DAO \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b <code>PagingSource<\/code> \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Query(\n    \"\"\"\n    SELECT * FROM products\n    ORDER BY createdAt DESC\n    \"\"\"\n)\nfun pagingSource():\n    PagingSource&lt;Int, ProductEntity>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    SELECT * FROM products<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    ORDER BY createdAt DESC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #032F62\">    &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">pagingSource<\/span><span style=\"color: #24292E\">():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    PagingSource<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">Int, ProductEntity<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Room \u062e\u0648\u062f\u0634 Query \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0641\u0642\u0637 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u0648\u0631\u062f\u0646\u06cc\u0627\u0632 \u0631\u0648 \u0627\u0632 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u06cc\u200c\u062e\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u062f\u0631 <code>ProductDao<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0647\u0631 \u0628\u0627\u0631 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u0648\u0644 Product \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0646\u060c Room \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 PagingSource \u0641\u0639\u0644\u06cc \u0631\u0648 Invalid \u06a9\u0646\u0647 \u062a\u0627 Pager \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RemoteMediator \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">RemoteMediator \u062f\u0631 \u0686\u0646\u062f \u062d\u0627\u0644\u062a \u0627\u0635\u0644\u06cc \u0648\u0627\u0631\u062f \u0639\u0645\u0644 \u0645\u06cc\u0634\u0647. \u0647\u0646\u06af\u0627\u0645 Refresh \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u0647 \u0622\u06cc\u0627 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u062a\u0627\u0632\u0647 \u0628\u0634\u0646. \u0647\u0646\u06af\u0627\u0645 Append\u060c \u0648\u0642\u062a\u06cc PagingSource \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u062f\u0631 Room \u0645\u06cc\u0631\u0633\u0647\u060c \u0628\u0627\u06cc\u062f \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0631\u0648 \u0627\u0632 API \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647. \u062f\u0631 \u062d\u0627\u0644\u062a Prepend \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0642\u0628\u0644 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627\u06cc \u0641\u0639\u0644\u06cc \u0631\u0648 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u0647\u060c \u0647\u0631\u0686\u0646\u062f \u062f\u0631 \u0644\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0627\u0648\u0646 \u0646\u062f\u0627\u0631\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0627\u062e\u062a\u0627\u0631 \u0627\u0635\u0644\u06cc \u06a9\u0644\u0627\u0633 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class ProductsRemoteMediator(\n    private val api: ProductsApi,\n    private val database: AppDatabase\n) : RemoteMediator&lt;Int, ProductEntity>() {\n\n    override suspend fun load(\n        loadType: LoadType,\n        state: PagingState&lt;Int, ProductEntity>\n    ): MediatorResult {\n        \/\/ \u0647\u0645\u0627\u0647\u0646\u06af\u06cc API \u0648 Room\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ProductsRemoteMediator<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">private<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> api: <\/span><span style=\"color: #6F42C1\">ProductsApi<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">private<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> database: <\/span><span style=\"color: #6F42C1\">AppDatabase<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) : <\/span><span style=\"color: #6F42C1\">RemoteMediator<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #6F42C1\">ProductEntity<\/span><span style=\"color: #24292E\">&gt;() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">load<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        loadType: <\/span><span style=\"color: #6F42C1\">LoadType<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        state: <\/span><span style=\"color: #6F42C1\">PagingState<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #6F42C1\">ProductEntity<\/span><span style=\"color: #24292E\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ): <\/span><span style=\"color: #6F42C1\">MediatorResult<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6A737D\">\/\/ \u0647\u0645\u0627\u0647\u0646\u06af\u06cc API \u0648 Room<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u062f\u0631 \u0644\u0627\u06cc\u0647 Data \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0648\u0638\u06cc\u0641\u0647\u200c\u0627\u0634 \u0646\u0645\u0627\u06cc\u0634 UI \u06cc\u0627 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc State \u0635\u0641\u062d\u0647 \u0646\u06cc\u0633\u062a\u061b \u0641\u0642\u0637 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u0631 \u0647\u0631 \u0646\u0648\u0639 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc\u060c \u06a9\u062f\u0648\u0645 \u0635\u0641\u062d\u0647 \u0627\u0632 \u0634\u0628\u06a9\u0647 \u06af\u0631\u0641\u062a\u0647 \u0648 \u0686\u0637\u0648\u0631 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0634\u062e\u06cc\u0635 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0645\u062f\u0644 \u0633\u0627\u062f\u0647 Page Number\u060c RemoteMediator \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u0647 \u0622\u062e\u0631\u06cc\u0646 \u0635\u0641\u062d\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a\u200c\u0634\u062f\u0647 \u06a9\u062f\u0648\u0645 \u0628\u0648\u062f\u0647. \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u06cc\u06a9 \u0645\u062a\u063a\u06cc\u0631 \u0645\u0639\u0645\u0648\u0644\u06cc \u062f\u0627\u062e\u0644 \u06a9\u0644\u0627\u0633 \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a\u060c \u0686\u0648\u0646 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u062a\u0647 \u0628\u0634\u0647\u060c \u0641\u0631\u0627\u06cc\u0646\u062f \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u0647 \u06cc\u0627 PagingSource \u062f\u0648\u0628\u0627\u0631\u0647 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06cc\u06a9 \u062c\u062f\u0648\u0644 \u062c\u062f\u0627 \u0628\u0647 \u0646\u0627\u0645 Remote Keys \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 \u062c\u062f\u0648\u0644 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062c\u0631\u06cc\u0627\u0646 \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0645\u062b\u0644 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u060c \u0635\u0641\u062d\u0647 \u0642\u0628\u0644\u06cc \u06cc\u0627 Cursor \u0627\u062f\u0627\u0645\u0647 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062f\u0644 \u0633\u0627\u062f\u0647 \u0627\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Entity(tableName = \"product_remote_keys\")\ndata class ProductRemoteKeysEntity(\n    @PrimaryKey\n    val scope: String,\n    val nextPage: Int?,\n    val updatedAt: Long\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@Entity<\/span><span style=\"color: #24292E\">(tableName <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;product_remote_keys&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ProductRemoteKeysEntity<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">@PrimaryKey<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> scope: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> nextPage: <\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">?,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> updatedAt: <\/span><span style=\"color: #6F42C1\">Long<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>scope<\/code> \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0627\u06cc\u0646 \u06a9\u0644\u06cc\u062f \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06a9\u062f\u0648\u0645 \u0644\u06cc\u0633\u062a\u0647. \u0645\u062b\u0644\u0627\u064b \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646\u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u06cc\u0631 \u06cc\u0627 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u062e\u0627\u0635 \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u062c\u0631\u06cc\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>nextPage<\/code> \u0635\u0641\u062d\u0647\u200c\u0627\u06cc\u0647 \u06a9\u0647 \u062f\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0639\u062f\u06cc \u0628\u0627\u06cc\u062f \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0647 \u0648 <code>updatedAt<\/code> \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u0642\u062f\u06cc\u0645\u06cc \u0634\u062f\u0646 Cache \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u06a9\u0644\u06cc\u062f Pagination \u0628\u0627\u06cc\u062f \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0635\u0641\u062d\u0627\u062a \u06f1 \u062a\u0627 \u06f5 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0639\u062f \u0641\u0631\u0627\u06cc\u0646\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0641\u0642\u0637 \u062f\u0627\u062e\u0644 \u062d\u0627\u0641\u0638\u0647 \u0628\u0648\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u062f\u0641\u0639\u0647 \u0628\u0639\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0635\u0641\u062d\u0647 \u06f6 \u0627\u062f\u0627\u0645\u0647 \u0628\u062f\u0647 \u06cc\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0631\u0648 \u0628\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0630\u062e\u06cc\u0631\u0647 Remote Key \u062f\u0627\u062e\u0644 Room \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0648\u0636\u0639\u06cc\u062a Pagination \u0647\u0645\u0631\u0627\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc Cache \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u0634\u0647 \u062f\u0631\u062c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0644\u06cc\u062f \u0635\u0641\u062d\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 \u06cc\u06a9 Transaction \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f \u062a\u0627 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0647\u06cc\u0686\u200c\u0648\u0642\u062a \u062f\u0631 \u062d\u0627\u0644\u062a \u0646\u06cc\u0645\u0647\u200c\u06a9\u0627\u0631\u0647 \u0642\u0631\u0627\u0631 \u0646\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0635\u0645\u06cc\u0645\u200c\u06af\u06cc\u0631\u06cc \u0628\u0631 \u0627\u0633\u0627\u0633 LoadType<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u062e\u0644 <code>load<\/code> \u0627\u0628\u062a\u062f\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0686\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val page = when (loadType) {\n    LoadType.REFRESH -> 1\n\n    LoadType.APPEND ->\n        remoteKeysDao.getNextPage() ?: return\n            MediatorResult.Success(\n                endOfPaginationReached = true\n            )\n\n    LoadType.PREPEND ->\n        return MediatorResult.Success(\n            endOfPaginationReached = true\n        )\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> page <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">when<\/span><span style=\"color: #24292E\"> (loadType) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    LoadType.REFRESH <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    LoadType.APPEND <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        remoteKeysDao.<\/span><span style=\"color: #6F42C1\">getNextPage<\/span><span style=\"color: #24292E\">() ?: <\/span><span style=\"color: #D73A49\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            MediatorResult.<\/span><span style=\"color: #6F42C1\">Success<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                endOfPaginationReached <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    LoadType.PREPEND <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> MediatorResult.<\/span><span style=\"color: #6F42C1\">Success<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            endOfPaginationReached <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Refresh \u0627\u0632 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0634\u0631\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. \u062f\u0631 Append \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0631\u0648 \u0627\u0632 Remote Keys \u0645\u06cc\u200c\u06af\u06cc\u0631\u06cc\u0645. \u0627\u06af\u0631 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u06cc\u0639\u0646\u06cc \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc Pagination \u0631\u0633\u06cc\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc Prepend \u0647\u0645 \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0645\u0648\u0641\u0642\u06cc\u062a \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u06cc\u0645\u060c \u0686\u0648\u0646 \u062f\u0631 \u0637\u0631\u0627\u062d\u06cc \u0641\u0639\u0644\u06cc \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u0686\u06cc\u0632\u06cc \u0642\u0628\u0644 \u0627\u0632 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0641\u0642\u0637 \u0645\u0646\u0637\u0642 \u0645\u062a\u0645\u0627\u06cc\u0632 \u062a\u0635\u0645\u06cc\u0645\u200c\u06af\u06cc\u0631\u06cc\u0647 \u0648 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u0644 RemoteMediator \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u0630\u062e\u06cc\u0631\u0647 \u0627\u062a\u0645\u06cc\u06a9 \u062f\u0627\u062f\u0647\u200c\u0647\u0627<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0645\u0634\u062e\u0635 \u0634\u062f\u0646 \u0635\u0641\u062d\u0647\u060c API \u0635\u062f\u0627 \u0632\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0633\u067e\u0633 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0648 Remote Key \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 \u06cc\u06a9 Transaction \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>database.withTransaction {\n    if (loadType == LoadType.REFRESH) {\n        productDao.clearAll()\n        remoteKeysDao.clear()\n    }\n\n    productDao.upsertAll(\n        response.items.map(ProductDto::toEntity)\n    )\n\n    remoteKeysDao.save(\n        nextPage = if (response.hasNextPage) {\n            page + 1\n        } else {\n            null\n        }\n    )\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">database.<\/span><span style=\"color: #6F42C1\">withTransaction<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (loadType <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> LoadType.REFRESH) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        productDao.<\/span><span style=\"color: #6F42C1\">clearAll<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        remoteKeysDao.<\/span><span style=\"color: #6F42C1\">clear<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    productDao.<\/span><span style=\"color: #6F42C1\">upsertAll<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        response.items.<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\">(ProductDto::<\/span><span style=\"color: #6F42C1\">toEntity<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    remoteKeysDao.<\/span><span style=\"color: #6F42C1\">save<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        nextPage <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (response.hasNextPage) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            page <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        } <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>withTransaction<\/code> \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0647\u0645\u0647 \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0627 \u0647\u0645 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0646. \u0627\u06af\u0631 \u0648\u0633\u0637 \u0639\u0645\u0644\u06cc\u0627\u062a \u062e\u0637\u0627\u06cc\u06cc \u0631\u062e \u0628\u062f\u0647\u060c \u0646\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0646\u0627\u0642\u0635 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0646 \u0648 \u0646\u0647 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0628\u062f\u0648\u0646 \u062f\u0627\u062f\u0647 \u062c\u0644\u0648 \u0645\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Refresh\u060c \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u0645\u0644 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0645\u06cc\u0634\u0647 \u062a\u0635\u0645\u06cc\u0645 \u062f\u0631\u0633\u062a\u06cc \u0646\u06cc\u0633\u062a. \u0627\u06af\u0631 \u062c\u062f\u0648\u0644 Product \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u0648 \u0648\u06cc\u0631\u0627\u06cc\u0634\u200c\u0647\u0627\u06cc \u0627\u0631\u0633\u0627\u0644\u200c\u0646\u0634\u062f\u0647 \u0647\u0645 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u062d\u0630\u0641 \u06a9\u0627\u0645\u0644 \u0645\u0645\u06a9\u0646\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0628\u0631\u0647. \u062f\u0631 \u0627\u0648\u0646 \u0634\u0631\u0627\u06cc\u0637 \u0628\u0627\u06cc\u062f Cache \u0633\u0631\u0648\u0631 \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u0627 \u0628\u0627\u0634\u0647 \u06cc\u0627 Sync \u0647\u0648\u0634\u0645\u0646\u062f\u062a\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0627\u06cc\u0646 \u06a9\u062f \u06cc\u06a9 \u0627\u0644\u06af\u0648\u06cc \u0645\u0641\u0647\u0648\u0645\u06cc \u0627\u0633\u062a\u060c \u0646\u0647 \u0645\u062c\u0648\u0632\u06cc \u0628\u0631\u0627\u06cc \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0628\u06cc\u200c\u0642\u06cc\u062f\u0648\u0634\u0631\u0637 \u06a9\u0644 \u062c\u062f\u0648\u0644.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0627\u06cc\u0627\u0646 Pagination<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">RemoteMediator \u0628\u0627\u06cc\u062f \u0628\u0647 Paging \u0628\u06af\u0647 \u0622\u06cc\u0627 \u0635\u0641\u062d\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0627\u0642\u06cc \u0645\u0648\u0646\u062f\u0647 \u06cc\u0627 \u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>return MediatorResult.Success(\n    endOfPaginationReached =\n        !response.hasNextPage\n)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 <code>endOfPaginationReached<\/code> \u0628\u0631\u0627\u0628\u0631 true \u0628\u0627\u0634\u0647\u060c Paging \u062f\u06cc\u06af\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a Append \u062c\u062f\u06cc\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0634\u062e\u06cc\u0635 \u062f\u0631\u0633\u062a \u067e\u0627\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647 \u0645\u0647\u0645\u0647. \u0627\u06af\u0631 \u0633\u0631\u0648\u0631 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u062e\u0627\u0644\u06cc \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647 \u0627\u0645\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645\u0686\u0646\u0627\u0646 \u062a\u0635\u0648\u0631 \u06a9\u0646\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0648 \u0628\u06cc\u200c\u067e\u0627\u06cc\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u0628\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pager \u0628\u0627 Room \u0648 RemoteMediator<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u0647\u0631 \u062f\u0648 \u0645\u0646\u0628\u0639 \u0631\u0648 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun pagedProducts(): Flow&lt;PagingData&lt;Product>> {\n    return Pager(\n        config = PagingConfig(\n            pageSize = 20,\n            prefetchDistance = 5\n        ),\n        remoteMediator = ProductsRemoteMediator(\n            api = api,\n            database = database\n        ),\n        pagingSourceFactory = {\n            productDao.pagingSource()\n        }\n    ).flow.map { pagingData ->\n        pagingData.map(ProductEntity::toDomain)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">pagedProducts<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Flow<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">PagingData<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">Product<\/span><span style=\"color: #24292E\">&gt;&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Pager<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        config <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">PagingConfig<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            pageSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">20<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            prefetchDistance <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        remoteMediator <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ProductsRemoteMediator<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            api <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> api,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            database <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> database<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        pagingSourceFactory <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            productDao.<\/span><span style=\"color: #6F42C1\">pagingSource<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ).flow.<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\"> { pagingData <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        pagingData.<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\">(ProductEntity::<\/span><span style=\"color: #6F42C1\">toDomain<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>pagingSourceFactory<\/code> \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0627\u0632 Room \u0645\u06cc\u200c\u062e\u0648\u0646\u0647 \u0648 <code>remoteMediator<\/code> \u0647\u0646\u06af\u0627\u0645 \u0646\u06cc\u0627\u0632 Room \u0631\u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 API \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0628\u062f\u06cc\u0644 Entity \u0628\u0647 Domain \u0647\u0645 \u0631\u0648\u06cc <code>PagingData<\/code> \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 UI \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0627 \u0645\u062f\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u06a9\u0627\u0631 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0633\u062a\u062c\u0648 \u0648 Pagination<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062f\u0631\u0633 \u062c\u0633\u062a\u062c\u0648 \u06af\u0641\u062a\u06cc\u0645 Query \u062f\u0627\u062e\u0644 ViewModel \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u06cc\u0634\u0647 \u0648 \u0628\u0627 <code>flatMapLatest<\/code> \u062c\u0631\u06cc\u0627\u0646 \u0646\u062a\u0627\u06cc\u062c \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062f\u0631 Pagination \u0647\u0645 \u0647\u0645\u06cc\u0646 \u0627\u0635\u0644 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647\u060c \u0627\u0645\u0627 Repository \u0628\u0647 \u062c\u0627\u06cc <code>Flow&lt;List&lt;Product&gt;&gt;<\/code>\u060c \u0645\u0642\u062f\u0627\u0631 <code>Flow&lt;PagingData&lt;Product&gt;&gt;<\/code> \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val products =\n    query\n        .debounce(300)\n        .distinctUntilChanged()\n        .flatMapLatest { queryValue ->\n            repository.pagedProducts(\n                query = queryValue.trim()\n            )\n        }\n        .cachedIn(viewModelScope)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    query<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">debounce<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">300<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">distinctUntilChanged<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">flatMapLatest<\/span><span style=\"color: #24292E\"> { queryValue <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            repository.<\/span><span style=\"color: #6F42C1\">pagedProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                query <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> queryValue.<\/span><span style=\"color: #6F42C1\">trim<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">cachedIn<\/span><span style=\"color: #24292E\">(viewModelScope)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc Query \u0639\u0648\u0636 \u0645\u06cc\u0634\u0647\u060c \u062c\u0631\u06cc\u0627\u0646 Pagination \u0642\u0628\u0644\u06cc \u06a9\u0646\u0627\u0631 \u06af\u0630\u0627\u0634\u062a\u0647 \u0648 \u06cc\u06a9 Pager \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u062c\u0633\u062a\u062c\u0648\u06cc \u062c\u062f\u06cc\u062f \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646\u062c\u0627 Backend \u0647\u0645 \u0628\u0627\u06cc\u062f \u062c\u0633\u062a\u062c\u0648\u06cc \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u0631\u0648 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u0646\u0647. \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0641\u0642\u0637 \u06f2\u06f0 \u0645\u062d\u0635\u0648\u0644 \u0641\u0639\u0644\u06cc \u0631\u0648 \u062f\u0627\u062e\u0644 \u06af\u0648\u0634\u06cc \u0641\u06cc\u0644\u062a\u0631 \u06a9\u0646\u06cc\u0645 \u0648 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u0645 \u06a9\u0644 \u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u062c\u0648 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u06cc\u0645. \u0627\u06af\u0631 \u062f\u0627\u062f\u0647 \u06a9\u0627\u0645\u0644 \u062f\u0627\u062e\u0644 Room \u0645\u0648\u062c\u0648\u062f \u0646\u0628\u0627\u0634\u0647\u060c Query \u0628\u0627\u06cc\u062f \u0628\u0647 API \u0647\u0645 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0648 Pagination<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647 \u0628\u0631\u0627\u06cc \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a\u060c \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0648 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0648\u0642\u062a\u06cc \u0641\u0642\u0637 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0627\u062e\u0644 Room Cache \u0634\u062f\u0647\u060c \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0645\u062d\u0644\u06cc \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0631\u0632\u0627\u0646\u200c\u062a\u0631\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644 \u06a9\u0644 \u0633\u0631\u0648\u0631 \u0631\u0648 \u062a\u0636\u0645\u06cc\u0646 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0635\u0641\u062d\u0647\u200c\u0627\u06cc\u060c Sort \u0628\u0627\u06cc\u062f \u0628\u062e\u0634\u06cc \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a API \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@GET(\"products\")\nsuspend fun getProducts(\n    @Query(\"page\") page: Int,\n    @Query(\"limit\") pageSize: Int,\n    @Query(\"search\") query: String?,\n    @Query(\"sort\") sort: String\n): ProductsPageDto\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@GET<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;products&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">getProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;page&quot;<\/span><span style=\"color: #24292E\">) page: <\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;limit&quot;<\/span><span style=\"color: #24292E\">) pageSize: <\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;search&quot;<\/span><span style=\"color: #24292E\">) query: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">?,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">@Query<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;sort&quot;<\/span><span style=\"color: #24292E\">) sort: <\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">): <\/span><span style=\"color: #6F42C1\">ProductsPageDto<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u0645\u0642\u062f\u0627\u0631 \u062f\u0627\u062e\u0644\u06cc <code>ProductSort<\/code> \u0631\u0648 \u0628\u0647 \u0645\u0642\u062f\u0627\u0631 \u0645\u0648\u0631\u062f\u0627\u0646\u062a\u0638\u0627\u0631 Backend \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b <code>LOWEST_PRICE<\/code> \u0645\u0645\u06a9\u0646\u0647 \u0628\u0647 <code>price_asc<\/code> \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0647. UI \u0647\u0645\u0686\u0646\u0627\u0646 \u0641\u0642\u0637 \u0646\u0648\u0639 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0646\u0628\u0627\u06cc\u062f \u0631\u0634\u062a\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u0635\u0648\u0635 API \u0631\u0648 \u0628\u0634\u0646\u0627\u0633\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0647\u0631 Query \u0648 Sort \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u0645\u0633\u062a\u0642\u0644 \u0627\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0628\u062a\u062f\u0627 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0647 \u0648 \u0633\u0647 \u0635\u0641\u062d\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647. \u0628\u0639\u062f \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0635\u0641\u062d\u0647 \u062f\u0648\u0645 \u062f\u06cc\u06af\u0647 \u0627\u062f\u0627\u0645\u0647 \u0647\u0645\u0627\u0646 \u0644\u06cc\u0633\u062a \u0642\u0628\u0644\u06cc \u0646\u06cc\u0633\u062a\u061b \u0686\u0648\u0646 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u0644 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0639\u0648\u0636 \u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0631\u06a9\u06cc\u0628 Query\u060c Sort \u0648 Category \u0628\u0627\u06cc\u062f \u0628\u062e\u0634\u06cc \u0627\u0632 \u0647\u0648\u06cc\u062a \u062c\u0631\u06cc\u0627\u0646 Pagination \u0628\u0627\u0634\u0647. Remote Keys \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u06cc\u0634\u0647 \u06cc\u06a9 Scope \u067e\u0627\u06cc\u062f\u0627\u0631 \u0633\u0627\u062e\u062a:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val scope =\n    \"$query|${sort.name}|${categoryId ?: \"all\"}\"\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> scope <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;<\/span><span style=\"color: #005CC5\">$query<\/span><span style=\"color: #032F62\">|${sort.name}|${categoryId ?: &quot;all&quot;}&quot;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0642\u062f\u0627\u0631 \u0645\u0641\u0647\u0648\u0645\u06cc \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 Remote Key \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06a9\u062f\u0648\u0645 \u0634\u0631\u0627\u06cc\u0637\u0647. \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0648\u0627\u0642\u0639\u06cc \u0628\u0647\u062a\u0631\u0647 \u0633\u0627\u062e\u062a Scope \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u06cc\u0627 \u062a\u0627\u0628\u0639 \u0645\u0634\u062e\u0635 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0631\u0634\u062a\u0647\u200c\u0647\u0627 \u062f\u0631 \u0642\u0633\u0645\u062a\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062f\u0633\u062a\u06cc \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u063a\u06cc\u06cc\u0631 \u0641\u06cc\u0644\u062a\u0631 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc Query\u060c Sort \u06cc\u0627 Category \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647\u060c <code>flatMapLatest<\/code> Pager \u0642\u0628\u0644\u06cc \u0631\u0648 \u06a9\u0646\u0627\u0631 \u0645\u06cc\u200c\u0630\u0627\u0631\u0647 \u0648 \u062c\u0631\u06cc\u0627\u0646 \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u0647. \u0635\u0641\u062d\u0647 \u062c\u062f\u06cc\u062f \u0627\u0632 \u0634\u0631\u0627\u06cc\u0637 \u062a\u0627\u0632\u0647 \u0634\u0631\u0648\u0639 \u0645\u06cc\u0634\u0647 \u0648 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u0646\u0628\u0627\u06cc\u062f \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0627\u062f\u0627\u0645\u0647 \u0627\u0648\u0646 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 \u0646\u0638\u0631 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u0645\u06cc\u0634\u0647 \u0644\u06cc\u0633\u062a \u0642\u0628\u0644\u06cc \u0631\u0648 \u062a\u0627 \u0631\u0633\u06cc\u062f\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u062d\u0641\u0638 \u06a9\u0631\u062f \u06cc\u0627 Loading \u0645\u0646\u0627\u0633\u0628\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f. \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0646\u062a\u0627\u06cc\u062c \u062f\u0648 \u0641\u06cc\u0644\u062a\u0631 \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0627 \u0647\u0645 \u0645\u062e\u0644\u0648\u0637 \u0628\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Empty State \u062f\u0631 Pagination<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0644\u06cc\u0633\u062a \u0645\u0639\u0645\u0648\u0644\u06cc\u060c Empty State \u0631\u0648 \u0628\u0627 <code>products.isEmpty<\/code>\u00a0\u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u200c\u062f\u0627\u062f\u06cc\u0645. \u062f\u0631 Paging \u0628\u0627\u06cc\u062f \u0647\u0645 \u062a\u0639\u062f\u0627\u062f \u0622\u06cc\u062a\u0645\u200c\u0647\u0627 \u0635\u0641\u0631 \u0628\u0627\u0634\u0647 \u0648 \u0647\u0645 Refresh \u062a\u0645\u0627\u0645 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val isEmpty =\n    products.itemCount == 0 &amp;&amp;\n    products.loadState.refresh is LoadState.NotLoading\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isEmpty <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    products.itemCount <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    products.loadState.refresh <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.NotLoading<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 <code>itemCount<\/code> \u0635\u0641\u0631 \u0628\u0627\u0634\u0647 \u0627\u0645\u0627 Refresh \u0647\u0646\u0648\u0632 Loading \u0628\u0627\u0634\u0647\u060c \u0647\u0646\u0648\u0632 \u0646\u0645\u06cc\u200c\u062f\u0648\u0646\u06cc\u0645 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647. \u0641\u0642\u0637 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0645\u0644 \u0646\u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 Refresh \u0628\u0627 Error \u062a\u0645\u0627\u0645 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0628\u0627\u06cc\u062f Error State \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647\u060c \u0646\u0647 \u067e\u06cc\u0627\u0645 \u0645\u062d\u0635\u0648\u0644\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Placeholder<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Paging \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062c\u0627\u06cc \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0647\u0646\u0648\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u0634\u062f\u0646 Placeholder \u0646\u06af\u0647 \u062f\u0627\u0631\u0647\u060c \u0628\u0647 \u0634\u0631\u0637 \u0627\u06cc\u0646\u06a9\u0647 \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647 \u062a\u0639\u062f\u0627\u062f \u06a9\u0644 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627 \u0631\u0648 \u0628\u062f\u0648\u0646\u0647. \u0627\u0645\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Placeholder \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627 \u0636\u0631\u0648\u0631\u06cc \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0641\u0639\u0644\u0627\u064b \u0627\u0648\u0646 \u0631\u0648 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>PagingConfig(\n    pageSize = 20,\n    enablePlaceholders = false\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">PagingConfig<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    pageSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">20<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    enablePlaceholders <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c <code>itemCount<\/code> \u0641\u0642\u0637 \u0634\u0627\u0645\u0644 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc\u200c\u0634\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0644\u06cc\u0633\u062a \u0628\u0647\u200c\u062a\u062f\u0631\u06cc\u062c \u0631\u0634\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647. Placeholder \u0632\u0645\u0627\u0646\u06cc \u0645\u0641\u06cc\u062f\u0647 \u06a9\u0647 \u0628\u062e\u0648\u0627\u06cc\u0645 \u0627\u0646\u062f\u0627\u0632\u0647 \u062a\u0642\u0631\u06cc\u0628\u06cc Scrollbar \u06cc\u0627 \u062c\u0627\u06cc \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u0645\u0634\u062e\u0635 \u0628\u0627\u0634\u0647. \u0627\u0645\u0627 \u0637\u0631\u0627\u062d\u06cc \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0648\u0646 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062d\u0630\u0641 \u06cc\u0627 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0645\u062d\u0635\u0648\u0644 \u062f\u0631 \u0644\u06cc\u0633\u062a \u0635\u0641\u062d\u0647\u200c\u0627\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0686\u0648\u0646 UI \u0627\u0632 Room \u0645\u06cc\u200c\u062e\u0648\u0646\u0647\u060c \u0628\u0639\u062f \u0627\u0632 \u062d\u0630\u0641 \u06cc\u0627 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u06cc\u062f \u0641\u0642\u0637 Room \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0634\u0647. Room\u060c PagingSource \u0641\u0639\u0644\u06cc \u0631\u0648 Invalid \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Pager Snapshot \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u0647. \u0646\u0628\u0627\u06cc\u062f \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0641\u0642\u0637 \u0627\u0632 <code>LazyPagingItems<\/code> \u062d\u0630\u0641 \u06a9\u0646\u06cc\u0645\u060c \u0686\u0648\u0646 \u0627\u0648\u0646 \u0641\u0642\u0637 \u0646\u0645\u0627\u06cc\u0634\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u0633\u062a \u0648 \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0645\u062d\u0633\u0648\u0628 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u0647\u0645\u0686\u0646\u0627\u0646 \u0647\u0645\u0648\u0646\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" dir=\"ltr\"><strong>API \u2192 Room \u2192 PagingSource \u2192 Compose<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0646 \u0645\u062d\u0635\u0648\u0644 \u062c\u062f\u06cc\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062d\u0635\u0648\u0644 \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u062b\u0628\u062a \u06a9\u0646\u0647 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648\u06cc \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0628\u0627\u0634\u0647\u060c \u0628\u0639\u062f \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u062f\u0631 Room \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u06cc\u062f \u062f\u0631 \u0627\u0628\u062a\u062f\u0627\u06cc \u0644\u06cc\u0633\u062a \u0638\u0627\u0647\u0631 \u0628\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 <code>refresh<\/code> \u0627\u062c\u0631\u0627 \u0628\u0634\u0647 \u062a\u0627 \u0645\u0648\u0642\u0639\u06cc\u062a \u0635\u062d\u06cc\u062d \u0645\u062d\u0635\u0648\u0644 \u062f\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0645\u062d\u0627\u0633\u0628\u0647 \u0628\u0634\u0647. \u0627\u0645\u0627 \u0627\u06af\u0631 Room \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648 \u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u0647\u060c PagingSource \u0647\u0645 Invalid \u0645\u06cc\u0634\u0647 \u0648 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062c\u0631\u06cc\u0627\u0646 \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0646\u0628\u0627\u06cc\u062f \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc \u0628\u0647 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 List \u0628\u0686\u0633\u0628\u0648\u0646\u06cc\u0645 \u0648 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0627\u0648\u0646 \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0647\u0645 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u0645\u061b \u0686\u0648\u0646 \u0627\u062d\u062a\u0645\u0627\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062a\u06a9\u0631\u0627\u0631\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cache \u0686\u0647 \u0645\u062f\u062a \u0645\u0639\u062a\u0628\u0631 \u0627\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pagination \u0628\u0647\u200c\u062a\u0646\u0647\u0627\u06cc\u06cc \u0645\u0634\u062e\u0635 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062a\u0627 \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u062a\u0627\u0632\u0647 \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0646. \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u06cc\u0631\u0648\u0632 \u0633\u0647 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0627\u0645\u0631\u0648\u0632 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0646\u0647. Room \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0647\u0645\u0648\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0641\u0648\u0631\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647\u060c \u0627\u0645\u0627 Repository \u06cc\u0627 RemoteMediator \u0628\u0627\u06cc\u062f \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647 \u0622\u06cc\u0627 Refresh \u0634\u0628\u06a9\u0647\u200c\u0627\u06cc \u0644\u0627\u0632\u0645\u0647 \u06cc\u0627 \u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Remote Key \u06cc\u0627 \u062c\u062f\u0648\u0644 Sync \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0632\u0645\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 \u062f\u0631\u06cc\u0627\u0641\u062a \u0631\u0648 \u0646\u06af\u0647 \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val cacheExpired =\n    currentTime - lastUpdatedAt > cacheDuration\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> cacheExpired <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    currentTime <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\"> lastUpdatedAt <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> cacheDuration<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 Cache \u0647\u0646\u0648\u0632 \u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0634\u0647\u060c \u0645\u06cc\u0634\u0647 \u0627\u0632 Refresh \u063a\u06cc\u0631\u0636\u0631\u0648\u0631\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0631\u062f. \u0627\u06af\u0631 \u0642\u062f\u06cc\u0645\u06cc \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062a\u0627\u0632\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0628\u0647 \u0645\u06cc\u0632\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0648 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647. \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06a9\u0647 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0645\u0645\u06a9\u0646\u0647 \u0632\u06cc\u0627\u062f \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0646\u060c \u0632\u0645\u0627\u0646 \u0627\u0639\u062a\u0628\u0627\u0631 Cache \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u06a9\u0648\u062a\u0627\u0647\u200c\u062a\u0631 \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 Pagination \u0647\u0645\u06cc\u0634\u0647 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647. Pagination \u062e\u0648\u062f\u0634 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u062f\u0627\u0631\u0647: Backend \u0628\u0627\u06cc\u062f \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc \u0631\u0648 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u0646\u0647\u060c Remote Keys \u0644\u0627\u0632\u0645 \u0645\u06cc\u0634\u0646\u060c \u062c\u0633\u062a\u062c\u0648 \u0648 Sort \u0628\u0627\u06cc\u062f \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0627\u0634\u0646 \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a Refresh \u0648 \u062e\u0637\u0627\u06cc \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0647\u0645 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0647\u0631 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0646\u0647\u0627\u06cc\u062a\u0627\u064b \u06f2\u06f0\u06f0 \u06cc\u0627 \u06f3\u06f0\u06f0 \u0645\u062d\u0635\u0648\u0644 \u062f\u0627\u0631\u0647 \u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0644 \u0627\u0648\u0646\u200c\u0647\u0627 \u0633\u0631\u06cc\u0639 \u0648 \u0633\u0628\u06a9 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647\u060c Pagination \u0645\u0645\u06a9\u0646\u0647 \u0632\u0648\u062f\u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0634\u0647. \u0627\u0645\u0627 \u0627\u06af\u0631 \u062a\u0639\u062f\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 \u0647\u0632\u0627\u0631\u0627\u0646 \u0645\u0648\u0631\u062f \u0628\u0631\u0633\u0647 \u06cc\u0627 \u0644\u06cc\u0633\u062a \u0627\u0635\u0644\u06cc \u062a\u0645\u0627\u0645 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0633\u06cc\u0633\u062a\u0645 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647\u060c Pagination \u0627\u0632 \u0647\u0645\u0648\u0646 \u0627\u0628\u062a\u062f\u0627 \u0627\u0631\u0632\u0634 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0639\u0645\u0627\u0631\u06cc \u062e\u0648\u0628 \u06cc\u0639\u0646\u06cc \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0631\u0648 \u0641\u0642\u0637 \u0648\u0642\u062a\u06cc \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u0633\u0626\u0644\u0647 \u0648\u0627\u0642\u0639\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0635\u0631\u0641\u0627\u064b \u0686\u0648\u0646 \u06cc\u06a9 \u062a\u06a9\u0646\u0648\u0644\u0648\u0698\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u0631\u0633\u0647 \u0627\u0632 \u0627\u0648\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0647\u0631 \u0628\u062e\u0634<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Backend \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0628\u0631 \u0627\u0633\u0627\u0633 Page \u06cc\u0627 Cursor \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647 \u0648 \u062c\u0633\u062a\u062c\u0648 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0633\u0631\u0627\u0633\u0631\u06cc \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647. <code>RemoteMediator<\/code> \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0635\u0641\u062d\u0647 \u062c\u062f\u06cc\u062f \u0627\u0632 API \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0647 \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0648 \u0647\u0645\u0631\u0627\u0647 \u06a9\u0644\u06cc\u062f \u0627\u062f\u0627\u0645\u0647 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Room \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u0633\u062a \u0648 <code>PagingSource<\/code> \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0648 \u0627\u0632 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u06cc\u200c\u062e\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repository\u060c <code>Pager<\/code> \u0648 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a Pagination \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647 \u0648 \u0645\u062f\u0644\u200c\u0647\u0627\u06cc \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0631\u0648 \u0628\u0647 Domain \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u062c\u0631\u06cc\u0627\u0646 <code>PagingData<\/code> \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u0648 \u0628\u0627 <code>cachedIn<\/code> \u0627\u0648\u0646 \u0631\u0648 \u062f\u0631 \u0637\u0648\u0644 \u0639\u0645\u0631 \u0635\u0641\u062d\u0647 \u062d\u0641\u0638 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compose \u0628\u0627 <code>collectAsLazyPagingItems<\/code> \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Loading \u0627\u0648\u0644\u06cc\u0647\u060c Loading \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a\u060c Error\u060c Retry \u0648 Empty State \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pagination \u0641\u0642\u0637 \u062a\u0642\u0633\u06cc\u0645 \u06cc\u06a9 List \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c Pagination \u06cc\u0639\u0646\u06cc \u0627\u0628\u062a\u062f\u0627 \u06f2\u06f0 \u0645\u062d\u0635\u0648\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647 \u0648 \u0628\u0627 \u0627\u0633\u06a9\u0631\u0648\u0644\u060c \u06f2\u06f0 \u0645\u062d\u0635\u0648\u0644 \u0628\u0639\u062f\u06cc \u0627\u0636\u0627\u0641\u0647 \u0628\u0634\u0647. \u0627\u0645\u0627 \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0648\u0627\u0642\u0639\u06cc\u060c \u0645\u0633\u0626\u0644\u0647 \u0628\u0632\u0631\u06af\u200c\u062a\u0631 \u0627\u0632 \u062a\u0642\u0633\u06cc\u0645 \u06cc\u06a9 List \u0627\u0633\u062a. \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u0647 \u06a9\u062f\u0648\u0645 \u0635\u0641\u062d\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647\u060c \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0686\u06cc\u0647\u060c \u0622\u06cc\u0627 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0631\u0633\u06cc\u062f\u0647\u060c \u062e\u0637\u0627 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0628\u0648\u062f\u0647 \u06cc\u0627 \u0627\u062f\u0627\u0645\u0647 \u0644\u06cc\u0633\u062a \u0648 \u0647\u0631 \u062a\u0631\u06a9\u06cc\u0628 \u062c\u0633\u062a\u062c\u0648 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0628\u0647 \u06a9\u062f\u0648\u0645 \u062c\u0631\u06cc\u0627\u0646 Pagination \u062a\u0639\u0644\u0642 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc Offline First \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c <code>RemoteMediator<\/code> \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0632 API \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u062f\u0627\u062e\u0644 Room \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647\u060c \u0627\u0645\u0627 UI \u0647\u0645\u0686\u0646\u0627\u0646 \u0641\u0642\u0637 \u0627\u0632 Room \u0645\u06cc\u200c\u062e\u0648\u0646\u0647. \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a\u200c\u0634\u062f\u0647 \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646 \u0647\u0645 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0628\u0627\u0634\u0646 \u0648 \u062a\u0645\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u0632 \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u0645\u0634\u062a\u0631\u06a9 \u0639\u0628\u0648\u0631 \u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 Pagination \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f: \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u062c\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u060c \u0641\u0642\u0637 \u0628\u062e\u0634 \u0645\u0648\u0631\u062f\u0646\u06cc\u0627\u0632 \u0631\u0648 \u0627\u0632 Room \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. \u0648\u0642\u062a\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u0644\u06cc\u0633\u062a \u06a9\u0627\u0641\u06cc \u0646\u0628\u0627\u0634\u0646\u060c RemoteMediator \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0631\u0648 \u0627\u0632 API \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. PagingSource \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062a\u0627\u0632\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 ViewModel \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647 \u0648 Compose \u0628\u062f\u0648\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0633\u062a\u06cc \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647\u060c \u0644\u06cc\u0633\u062a \u0631\u0648 \u0628\u0647\u200c\u062a\u062f\u0631\u06cc\u062c \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u062f\u0648\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Infinite Scroll \u0686\u0637\u0648\u0631 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u062f\u0648\u0646 \u0632\u062f\u0646 \u062f\u06a9\u0645\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u060c \u067e\u06cc\u0648\u0633\u062a\u0647 \u0628\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062d\u0631\u06a9\u062a \u06a9\u0646\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Infinite Scroll<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062f\u0631\u0633 \u0642\u0628\u0644 \u0628\u0627 Pagination \u0622\u0634\u0646\u0627 \u0634\u062f\u06cc\u0645. \u06af\u0641\u062a\u06cc\u0645 \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u0647\u0632\u0627\u0631\u0627\u0646 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u06cc\u06a9\u200c\u062c\u0627 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645\u061b \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0647 \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9 \u062a\u0642\u0633\u06cc\u0645 \u0645\u06cc\u0634\u0646 \u0648 \u0647\u0631 \u0628\u0627\u0631 \u0641\u0642\u0637 \u0628\u062e\u0634 \u0645\u0648\u0631\u062f\u0646\u06cc\u0627\u0632 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 Pagination \u0641\u0642\u0637 \u0631\u0648\u0634 \u062a\u0642\u0633\u06cc\u0645 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u0633\u062a. \u0647\u0646\u0648\u0632 \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u0645 \u06a9\u0627\u0631\u0628\u0631 \u0686\u0637\u0648\u0631 \u0628\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0628\u0631\u0633\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9 \u0631\u0648\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u067e\u0627\u06cc\u06cc\u0646 \u0644\u06cc\u0633\u062a \u062f\u06a9\u0645\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc\u0645. \u06a9\u0627\u0631\u0628\u0631 \u062f\u06a9\u0645\u0647 \u0631\u0648 \u0645\u06cc\u200c\u0632\u0646\u0647 \u0648 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0647. \u0631\u0648\u0634 \u062f\u0648\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0632\u062f\u06cc\u06a9 \u0634\u062f\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u0647 \u0648 \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u062f\u06a9\u0645\u0647\u060c \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0627\u06cc\u0646 \u062a\u062c\u0631\u0628\u0647 <strong>Infinite Scroll<\/strong> \u0645\u06cc\u06af\u0646. \u062f\u0631 Infinite Scroll\u060c \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0633\u0627\u0633 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0628\u0627 \u06cc\u06a9 \u0644\u06cc\u0633\u062a \u067e\u06cc\u0648\u0633\u062a\u0647 \u0648 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0628\u06cc\u200c\u0627\u0646\u062a\u0647\u0627 \u0631\u0648\u0628\u0647\u200c\u0631\u0648\u0626\u0647\u061b \u0627\u0645\u0627 \u067e\u0634\u062a \u0635\u062d\u0646\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646. \u067e\u0633 Infinite Scroll \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 Pagination \u0646\u06cc\u0633\u062a\u060c \u0628\u0644\u06a9\u0647 \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Pagination \u062f\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u06a9\u0644\u06cc \u0627\u06cc\u0646 \u0641\u0631\u0627\u06cc\u0646\u062f \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0644\u06cc\u0633\u062a \u067e\u0627\u06cc\u06cc\u0646 \u0645\u06cc\u0631\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0641\u0639\u0644\u06cc \u0646\u0632\u062f\u06cc\u06a9 \u0634\u062f\u0647\u060c \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0634\u0631\u0648\u0639 \u0645\u06cc\u0634\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062a\u0627\u0632\u0647 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc Room \u06cc\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u0634\u0646 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0628\u062f\u0648\u0646 \u062a\u0631\u06a9 \u0635\u0641\u062d\u0647 \u0628\u0647 \u0627\u0633\u06a9\u0631\u0648\u0644 \u0627\u062f\u0627\u0645\u0647 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a Pagination \u0648 Infinite Scroll<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062f\u0648 \u0645\u0641\u0647\u0648\u0645 \u0628\u0647 \u0647\u0645 \u0645\u0631\u062a\u0628\u0637 \u0647\u0633\u062a\u0646\u060c \u0627\u0645\u0627 \u06cc\u06a9\u06cc \u0646\u06cc\u0633\u062a\u0646. Pagination \u062f\u0631\u0628\u0627\u0631\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0627\u062f\u0647 \u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u0631\u062d\u0644\u0647\u200c\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u0647. \u0645\u062b\u0644\u0627\u064b \u0633\u0631\u0648\u0631 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u062f\u0631 \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc \u06f2\u06f0\u062a\u0627\u06cc\u06cc \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Infinite Scroll \u062f\u0631\u0628\u0627\u0631\u0647 \u0631\u0641\u062a\u0627\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc\u0647. \u06cc\u0639\u0646\u06cc \u0628\u0647 \u0645\u062d\u0636 \u0646\u0632\u062f\u06cc\u06a9 \u0634\u062f\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0648\u062c\u0648\u062f\u060c \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0628\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 Pagination \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 Infinite Scroll \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u067e\u0627\u06cc\u06cc\u0646 \u0635\u0641\u062d\u0647 \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u0648 \u0628\u0639\u062f\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646. \u0647\u0645\u0686\u0646\u06cc\u0646 Infinite Scroll \u0628\u062f\u0648\u0646 \u0646\u0648\u0639\u06cc Pagination \u0645\u0646\u0637\u0642\u06cc \u0646\u06cc\u0633\u062a\u060c \u0686\u0648\u0646 \u0627\u06af\u0631 \u0647\u0645\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u0646\u060c \u0686\u06cc\u0632\u06cc \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062a\u062f\u0631\u06cc\u062c\u06cc \u0628\u0627\u0642\u06cc \u0646\u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u0631\u0648 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u0628\u0628\u06cc\u0646\u06cc\u0645: <strong>Pagination \u0645\u06cc\u06af\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0686\u0637\u0648\u0631 \u062a\u0642\u0633\u06cc\u0645 \u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0646\u061b Infinite Scroll \u0645\u06cc\u06af\u0647 \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0634\u0647.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0628\u0627\u06cc\u062f \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0647 \u0622\u062e\u0631\u06cc\u0646 \u0622\u06cc\u062a\u0645 \u0628\u0631\u0633\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0635\u0628\u0631 \u06a9\u0646\u0647 \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0622\u062e\u0631\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644 \u0645\u0648\u062c\u0648\u062f \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647 \u0648 \u0641\u0642\u0637 \u0628\u0639\u062f \u0627\u0632 \u0627\u0648\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0631\u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647. \u0627\u0632 \u0644\u062d\u0638\u0647 \u0634\u0631\u0648\u0639 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u0627\u0633\u062e\u060c \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0631\u0633\u06cc\u062f\u0647 \u0648 \u0628\u0627\u06cc\u062f \u0645\u0646\u062a\u0638\u0631 \u0628\u0645\u0648\u0646\u0647. \u0627\u06cc\u0646 \u062a\u0648\u0642\u0641 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u067e\u06cc\u0648\u0633\u062a\u06af\u06cc \u0627\u0633\u06a9\u0631\u0648\u0644 \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u062c\u0631\u0628\u0647 \u0628\u0647\u062a\u0631 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0645\u06cc \u0632\u0648\u062f\u062a\u0631 \u0634\u0631\u0648\u0639 \u0628\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0648\u0642\u062a\u06cc \u067e\u0646\u062c \u0645\u062d\u0635\u0648\u0644 \u062a\u0627 \u0627\u0646\u062a\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0641\u0639\u0644\u06cc \u0628\u0627\u0642\u06cc \u0645\u0648\u0646\u062f\u0647\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0639\u062f\u06cc \u0622\u063a\u0627\u0632 \u0628\u0634\u0647. \u062f\u0631 \u0645\u062f\u062a\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u06cc\u0646 \u067e\u0646\u062c \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0622\u0645\u0627\u062f\u0647 \u0634\u062f\u0647 \u0648 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 <strong>Prefetch<\/strong> \u0645\u06cc\u06af\u0646. \u062f\u0631 Paging 3\u060c \u0645\u0642\u062f\u0627\u0631 <code>prefetchDistance<\/code> \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646 \u0647\u062f\u0641\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>PagingConfig(\n    pageSize = 20,\n    prefetchDistance = 5\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">PagingConfig<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    pageSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">20<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    prefetchDistance <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u062f\u0627\u062e\u0644 Repository \u0648 \u0647\u0646\u06af\u0627\u0645 \u0633\u0627\u062e\u062a <code>Pager<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. <code>pageSize = 20<\/code> \u0645\u06cc\u06af\u0647 \u0627\u0646\u062f\u0627\u0632\u0647 \u0645\u0639\u0645\u0648\u0644 \u0647\u0631 \u0635\u0641\u062d\u0647 \u06f2\u06f0 \u0645\u062d\u0635\u0648\u0644\u0647 \u0648 <code>prefetchDistance = 5<\/code> \u06cc\u0639\u0646\u06cc \u0648\u0642\u062a\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc UI \u0628\u0647 \u0622\u06cc\u062a\u0645\u06cc \u0646\u0632\u062f\u06cc\u06a9 \u0628\u0647 \u067e\u0646\u062c \u0645\u0648\u0631\u062f \u067e\u0627\u06cc\u0627\u0646\u06cc \u0631\u0633\u06cc\u062f\u060c Paging \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u062f\u0627\u0645\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0639\u062f\u062f \u0646\u0628\u0627\u06cc\u062f \u0635\u0631\u0641\u0627\u064b \u0627\u0632 \u0631\u0648\u06cc \u0639\u0627\u062f\u062a \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0634\u0647. \u0627\u06af\u0631 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062a\u0635\u0627\u0648\u06cc\u0631 \u0633\u0646\u06af\u06cc\u0646 \u062f\u0627\u0631\u0646 \u06cc\u0627 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06a9\u0646\u062f\u0647\u060c \u0641\u0627\u0635\u0644\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0646\u0627\u0633\u0628 \u0628\u0627\u0634\u0647. \u0627\u06af\u0631 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0633\u0628\u06a9 \u0648 \u0633\u0631\u06cc\u0639 \u0647\u0633\u062a\u0646\u060c \u0641\u0627\u0635\u0644\u0647 \u06a9\u0645\u062a\u0631 \u062c\u0644\u0648\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0632\u0648\u062f\u0647\u0646\u06af\u0627\u0645 \u0635\u0641\u062d\u0627\u062a \u063a\u06cc\u0631\u0636\u0631\u0648\u0631\u06cc \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0627 Paging 3 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a Scroll \u0631\u0648 \u062f\u0633\u062a\u06cc \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u06cc\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 Paging 3 \u0631\u0648 \u0628\u0647 <code>LazyColumn<\/code> \u0645\u062a\u0635\u0644 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u06cc\u0645\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u062e\u0648\u062f\u0645\u0648\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0622\u06cc\u062a\u0645 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u06cc\u0627 \u0628\u0627 \u0631\u0633\u06cc\u062f\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a\u060c \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">UI \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 <code>LazyPagingItems<\/code> \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val products =\n    viewModel.products.collectAsLazyPagingItems()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    viewModel.products.<\/span><span style=\"color: #6F42C1\">collectAsLazyPagingItems<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0647\u0631 \u0622\u06cc\u062a\u0645 \u0628\u0631 \u0627\u0633\u0627\u0633 Index \u0627\u0632 \u0645\u062c\u0645\u0648\u0639\u0647 Paging \u062e\u0648\u0627\u0646\u062f\u0647 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LazyColumn {\n    items(\n        count = products.itemCount,\n        key = products.itemKey { it.id }\n    ) { index ->\n        products&#91;index&#93;?.let { product ->\n            ProductItem(product)\n        }\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">LazyColumn<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">items<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        count <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> products.itemCount,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        key <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> products.<\/span><span style=\"color: #6F42C1\">itemKey<\/span><span style=\"color: #24292E\"> { it.id }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) { index <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        products&#91;index&#93;?.<\/span><span style=\"color: #6F42C1\">let<\/span><span style=\"color: #24292E\"> { product <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #6F42C1\">ProductItem<\/span><span style=\"color: #24292E\">(product)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc Compose \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc \u0646\u0632\u062f\u06cc\u06a9 \u0627\u0646\u062a\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0641\u0639\u0644\u06cc \u0628\u0647 <code>products[index]<\/code> \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Paging \u0628\u0627 \u062a\u0648\u062c\u0647 \u0628\u0647 <code>prefetchDistance<\/code> \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0622\u0645\u0627\u062f\u0647 \u0628\u0634\u0647. \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647\u060c \u062e\u0648\u062f Paging 3 \u0628\u06cc\u0646 \u062d\u0631\u06a9\u062a \u06a9\u0627\u0631\u0628\u0631 \u0648 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc Append \u0627\u0631\u062a\u0628\u0627\u0637 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 ViewModel \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0686\u06cc\u0632\u06cc \u0645\u062b\u0644 <code>currentPage++<\/code> \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. <code>collectAsLazyPagingItems<\/code> \u0648 \u0627\u062a\u0635\u0627\u0644 \u0627\u0648\u0646 \u0628\u0647 Lazy layout\u0647\u0627\u060c \u0631\u0648\u0634 \u0631\u0633\u0645\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647 \u062f\u0631 Compose \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0633\u062a\u06cc Infinite Scroll \u062f\u0631\u062f\u0633\u0631\u0633\u0627\u0632 \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062f\u0648\u0646 Paging 3 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0627 <code>LazyListState<\/code> \u0622\u062e\u0631\u06cc\u0646 \u0622\u06cc\u062a\u0645 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u0645 \u0648 \u0647\u0631 \u0632\u0645\u0627\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0646\u0632\u062f\u06cc\u06a9 \u0634\u062f\u060c \u062a\u0627\u0628\u0639\u06cc \u0645\u062b\u0644 <code>loadNextPage<\/code> \u0631\u0648 \u0635\u062f\u0627 \u0628\u0632\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0648\u0634 \u062f\u0631 \u0638\u0627\u0647\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f \u0628\u0627 \u0645\u0634\u06a9\u0644\u0627\u062a\u06cc \u0631\u0648\u0628\u0647\u200c\u0631\u0648 \u0645\u06cc\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0647\u0646\u06af\u0627\u0645 \u0686\u0646\u062f Recomposition\u060c \u062a\u0627\u0628\u0639 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0686\u0646\u062f \u0628\u0627\u0631 \u0627\u062c\u0631\u0627 \u0628\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0633\u0631\u06cc\u0639 \u0628\u0627\u0644\u0627 \u0648 \u067e\u0627\u06cc\u06cc\u0646 \u0628\u0631\u0647 \u0648 \u0686\u0646\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647. \u0628\u0627\u06cc\u062f \u062c\u0644\u0648\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0628\u0639\u062f \u0627\u0632 \u0622\u062e\u0631\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0628\u06af\u06cc\u0631\u06cc\u0645\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0646\u0627\u0645\u0648\u0641\u0642 \u0631\u0648 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645\u060c \u0635\u0641\u062d\u0647 \u0641\u0639\u0644\u06cc \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u0645 \u0648 \u0628\u0639\u062f \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631 Search \u06cc\u0627 Sort \u0647\u0645\u0647 \u0634\u0645\u0627\u0631\u0647\u200c\u0647\u0627 \u0631\u0648 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc ViewModel \u06a9\u0645\u200c\u06a9\u0645 \u067e\u0631 \u0627\u0632 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0641\u0639\u0644\u06cc\u060c \u0648\u0636\u0639\u06cc\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u067e\u0627\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647\u060c Retry \u0648 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u06a9\u0631\u0627\u0631\u06cc \u0645\u06cc\u0634\u0647. Paging 3 \u0647\u0645\u06cc\u0646 \u0645\u0634\u06a9\u0644\u0627\u062a \u0631\u0648 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u062d\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u0686\u0647 \u0646\u0648\u0639 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u0633\u062a\u060c \u0622\u06cc\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a Append \u0642\u0628\u0644\u06cc \u0647\u0646\u0648\u0632 \u0627\u062f\u0627\u0645\u0647 \u062f\u0627\u0631\u0647\u060c \u0622\u06cc\u0627 \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 Pagination \u0631\u0633\u06cc\u062f\u06cc\u0645 \u0648 Retry \u0628\u0627\u06cc\u062f \u06a9\u062f\u0648\u0645 \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06a9\u0647 Pagination \u0631\u0648 \u0628\u0627 Paging 3 \u067e\u06cc\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c Infinite Scroll \u0628\u0647\u062a\u0631\u0647 \u0646\u062a\u06cc\u062c\u0647 \u0637\u0628\u06cc\u0639\u06cc \u0647\u0645\u0648\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0627\u0634\u0647\u060c \u0646\u0647 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u062f\u0633\u062a\u06cc \u0648 \u062c\u062f\u0627\u06af\u0627\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Append \u0686\u06cc\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u067e\u0627\u06cc\u06cc\u0646 \u0645\u06cc\u0631\u0647 \u0648 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u0634\u0647\u060c Paging \u0627\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0648 <code>Append<\/code> \u0645\u06cc\u200c\u0646\u0627\u0645\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u0627\u0644\u0627\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06f1 \u062a\u0627 \u06f4\u06f0 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0646. \u06a9\u0627\u0631\u0628\u0631 \u0646\u0632\u062f\u06cc\u06a9 \u0627\u0646\u062a\u0647\u0627\u06cc \u0641\u0647\u0631\u0633\u062a \u0645\u06cc\u0634\u0647 \u0648 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06f4\u06f1 \u062a\u0627 \u06f6\u06f0 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646. \u0627\u06cc\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062c\u0627\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0628\u0644\u06cc \u0631\u0648 \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u0646\u061b \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0627\u0648\u0646\u200c\u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u0627 <code>Refresh<\/code> \u0641\u0631\u0642 \u062f\u0627\u0631\u0647. Refresh \u06a9\u0644 \u062c\u0631\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0627\u0632 \u0646\u0642\u0637\u0647 \u0634\u0631\u0648\u0639 \u062a\u0627\u0632\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 Append \u0641\u0642\u0637 \u0627\u062f\u0627\u0645\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0641\u0639\u0644\u06cc \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Paging \u0633\u0647 \u0648\u0636\u0639\u06cc\u062a \u0627\u0635\u0644\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062f\u0627\u0631\u0647: <code>refresh<\/code> \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0635\u0644\u06cc \u06cc\u0627 \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc\u060c <code>append<\/code> \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0641\u0647\u0631\u0633\u062a \u0648 <code>prepend<\/code> \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0642\u0628\u0644 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627\u06cc \u0641\u0639\u0644\u06cc. \u062f\u0631 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c Infinite Scroll \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627 \u0648\u0636\u0639\u06cc\u062a <code>append<\/code> \u0633\u0631\u0648\u06a9\u0627\u0631 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Loading \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u062f\u0631 \u062d\u0627\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0646\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0628\u0644\u06cc \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0646. \u0641\u0642\u0637 \u06cc\u06a9 Loading \u06a9\u0648\u0686\u06a9 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (products.loadState.append is LoadState.Loading) {\n    item {\n        AppendLoading()\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (products.loadState.append <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.Loading) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">item<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">AppendLoading<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u062e\u0634 \u062f\u0627\u062e\u0644 <code>LazyColumn<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u062f\u0644\u06cc\u0644\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Loading \u0628\u0627\u06cc\u062f \u0628\u062e\u0634\u06cc \u0627\u0632 \u0627\u062f\u0627\u0645\u0647 \u0637\u0628\u06cc\u0639\u06cc \u0644\u06cc\u0633\u062a \u0628\u0627\u0634\u0647\u060c \u0646\u0647 \u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u0631\u0648\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a. \u0627\u06af\u0631 \u0647\u0646\u06af\u0627\u0645 Append \u06a9\u0644 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0628\u0627 Spinner \u0628\u067e\u0648\u0634\u0648\u0646\u06cc\u0645\u060c \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0628\u0644\u06cc \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647 \u0648 Infinite Scroll \u0639\u0645\u0644\u0627\u064b \u062a\u0628\u062f\u06cc\u0644 \u0628\u0647 \u0645\u062c\u0645\u0648\u0639\u0647\u200c\u0627\u06cc \u0627\u0632 \u062a\u0648\u0642\u0641\u200c\u0647\u0627\u06cc \u0622\u0632\u0627\u0631\u062f\u0647\u0646\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0631\u0633\u0645\u06cc Paging \u0647\u0645 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0648\u0636\u0639\u06cc\u062a Append\u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u0622\u06cc\u062a\u0645 Loading \u06cc\u0627 Error \u062f\u0631 Footer \u0644\u06cc\u0633\u062a \u0631\u0648 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0637\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0635\u0641\u062d\u0647 \u0628\u0639\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06f6\u06f0 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u060c \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0634\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0628\u0644\u06cc \u0647\u0646\u0648\u0632 \u0645\u0639\u062a\u0628\u0631\u0646 \u0648 \u0646\u0628\u0627\u06cc\u062f \u0646\u0627\u067e\u062f\u06cc\u062f \u0628\u0634\u0646. \u0641\u0642\u0637 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0648 \u062f\u06a9\u0645\u0647 \u062a\u0644\u0627\u0634 \u0645\u062c\u062f\u062f \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u200c\u062f\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (products.loadState.append is LoadState.Error) {\n    item {\n        AppendError(\n            onRetry = products::retry\n        )\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (products.loadState.append <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.Error) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">item<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">AppendError<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            onRetry <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> products::<\/span><span style=\"color: #6F42C1\">retry<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>retry<\/code> \u0639\u0645\u0644\u06cc\u0627\u062a \u0634\u06a9\u0633\u062a\u200c\u062e\u0648\u0631\u062f\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0686\u0648\u0646 \u062e\u0637\u0627 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Append \u0628\u0648\u062f\u0647\u060c Paging \u062f\u0648\u0628\u0627\u0631\u0647 \u0647\u0645\u0648\u0646 \u0627\u062f\u0627\u0645\u0647 \u0641\u0647\u0631\u0633\u062a \u0631\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0648\u062c\u0648\u062f \u0631\u0648 \u067e\u0627\u06a9 \u06a9\u0646\u0647 \u0648 \u0647\u0645\u0647\u200c\u0686\u06cc\u0632 \u0627\u0632 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0634\u0631\u0648\u0639 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 \u0646\u0638\u0631 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u062e\u06cc\u0644\u06cc \u0645\u0647\u0645\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0646\u0628\u0627\u06cc\u062f \u0628\u0647 \u062f\u0644\u06cc\u0644 \u062e\u0637\u0627\u06cc \u0635\u0641\u062d\u0647 \u0647\u0641\u062a\u0645\u060c \u0634\u0634 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u0631\u0648 \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u062f\u06cc\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a \u0628\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Retry \u0628\u0627 Refresh \u0641\u0631\u0642 \u062f\u0627\u0631\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Infinite Scroll\u060c \u0627\u06cc\u0646 \u062f\u0648 \u0639\u0645\u0644\u06cc\u0627\u062a \u0646\u0628\u0627\u06cc\u062f \u0627\u0634\u062a\u0628\u0627\u0647 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0646. <code>retry<\/code> \u0622\u062e\u0631\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0646\u0627\u0645\u0648\u0641\u0642 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06af\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647\u060c \u0647\u0645\u0648\u0646 \u0635\u0641\u062d\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 <code>refresh<\/code> \u06a9\u0644 \u062c\u0631\u06cc\u0627\u0646 \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc \u0631\u0648 \u062a\u0627\u0632\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>products.refresh()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">products.<\/span><span style=\"color: #6F42C1\">refresh<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Refresh \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0647\u0646\u06af\u0627\u0645 Pull to Refresh \u06cc\u0627 \u0632\u0645\u0627\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0645\u0637\u0645\u0626\u0646 \u0628\u0634\u0647 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647. \u062f\u0631 \u0645\u0642\u0627\u0628\u0644\u060c Retry \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0634\u06a9\u0633\u062a\u200c\u062e\u0648\u0631\u062f\u0647 \u0627\u0633\u062a. \u0627\u06af\u0631 \u0628\u0631\u0627\u06cc \u062e\u0637\u0627\u06cc \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0627\u0632 Refresh \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0645\u0645\u06a9\u0646\u0647 \u0627\u0633\u06a9\u0631\u0648\u0644 \u0648 \u062c\u0631\u06cc\u0627\u0646 \u0641\u0639\u0644\u06cc \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0647\u0645\u200c\u0632\u0645\u0627\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0633\u062a\u06cc\u060c \u0628\u0627\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u0622\u06cc\u0627 \u0635\u0641\u062d\u0647 \u062f\u06cc\u06af\u0631\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc\u0647 \u06cc\u0627 \u0646\u0647. \u0648\u06af\u0631\u0646\u0647 \u0646\u0632\u062f\u06cc\u06a9 \u0634\u062f\u0646 \u0686\u0646\u062f\u0628\u0627\u0631\u0647 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0645\u0645\u06a9\u0646\u0647 \u0686\u0646\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06cc\u06a9\u0633\u0627\u0646 \u0628\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 Paging \u0648\u0636\u0639\u06cc\u062a Append \u0631\u0648 \u062e\u0648\u062f\u0634 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0641\u0639\u0644\u06cc \u0627\u062f\u0627\u0645\u0647 \u062f\u0627\u0631\u0647\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0647\u0645\u0648\u0646 Append \u0631\u0648 \u0634\u0631\u0648\u0639 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0648\u0642\u062a\u06cc <code>endOfPaginationReached<\/code> \u0627\u0639\u0644\u0627\u0645 \u0628\u0634\u0647\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062c\u062f\u06cc\u062f\u06cc \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u0641\u0647\u0631\u0633\u062a \u0633\u0627\u062e\u062a\u0647 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0646\u0628\u0627\u06cc\u062f \u062f\u0631 Compose\u060c \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0633\u06cc\u0633\u062a\u0645 Paging\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u06cc\u06a9 <code>isLoadingMore<\/code> \u0645\u0633\u062a\u0642\u0644 \u0628\u0633\u0627\u0632\u06cc\u0645 \u0648 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0631\u0648 \u062f\u0633\u062a\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u0645. \u062f\u0627\u0634\u062a\u0646 \u062f\u0648 \u0645\u0646\u0628\u0639 \u062c\u062f\u0627 \u0628\u0631\u0627\u06cc \u0648\u0636\u0639\u06cc\u062a \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc\u060c \u0627\u062d\u062a\u0645\u0627\u0644 \u0646\u0627\u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0631\u0648 \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0628\u0631\u0647. \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0648\u0636\u0639\u06cc\u062a Infinite Scroll \u0628\u0627\u06cc\u062f <code>products.loadState.append<\/code> \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u067e\u0627\u06cc\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u0644\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0633\u0645 Infinite Scroll \u0645\u0645\u06a9\u0646\u0647 \u0627\u06cc\u0646 \u062a\u0635\u0648\u0631 \u0631\u0648 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0647 \u06a9\u0647 \u0644\u06cc\u0633\u062a \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u06cc\u200c\u0646\u0647\u0627\u06cc\u062a\u0647. \u0627\u0645\u0627 \u0628\u06cc\u0634\u062a\u0631 \u0641\u0647\u0631\u0633\u062a\u200c\u0647\u0627 \u067e\u0627\u06cc\u0627\u0646 \u062f\u0627\u0631\u0646. \u0645\u062b\u0644\u0627\u064b \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0645\u0645\u06a9\u0646\u0647 \u06f2\u06f3\u06f7\u06f0 \u0645\u062d\u0635\u0648\u0644 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0622\u062e\u0631\u06cc\u0646 \u0635\u0641\u062d\u0647\u060c \u062f\u0627\u062f\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0627\u0642\u06cc \u0646\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc API \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647\u060c <code>RemoteMediator<\/code> \u06cc\u0627 <code>PagingSource<\/code> \u067e\u0627\u06cc\u0627\u0646 Pagination \u0631\u0648 \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0632 \u0627\u0648\u0646 \u0644\u062d\u0638\u0647\u060c Paging \u062f\u06cc\u06af\u0647 Append \u062c\u062f\u06cc\u062f\u06cc \u0627\u062c\u0631\u0627 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0641\u0647\u0631\u0633\u062a \u067e\u06cc\u0627\u0645 \u06a9\u0648\u0686\u06a9\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645\u060c \u0645\u062b\u0644\u0627\u064b \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u062f\u0646. \u0627\u0645\u0627 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0644\u06cc\u0633\u062a\u06cc \u0636\u0631\u0648\u0631\u06cc \u0646\u06cc\u0633\u062a. \u0627\u06af\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0641\u0647\u0631\u0633\u062a \u0627\u0632 \u0638\u0627\u0647\u0631 \u0635\u0641\u062d\u0647 \u0645\u0634\u062e\u0635 \u0628\u0627\u0634\u0647\u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0645\u062a\u0646 \u0627\u0636\u0627\u0641\u06cc \u0641\u0642\u0637 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0634\u0644\u0648\u063a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 UI \u062e\u0648\u062f\u0634 \u062a\u0639\u062f\u0627\u062f \u0635\u0641\u062d\u0627\u062a \u0631\u0648 \u062d\u062f\u0633 \u0646\u0632\u0646\u0647. \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647 \u0628\u0627\u06cc\u062f \u067e\u0627\u06cc\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc Pagination \u0631\u0648 \u0645\u0634\u062e\u0635 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Infinite Scroll \u0648 Room<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc Offline First \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 API \u0648\u0627\u0631\u062f Compose \u0646\u0645\u06cc\u0634\u0647. \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u0646\u0632\u062f\u06cc\u06a9 \u0645\u06cc\u0634\u0647\u060c Paging \u0627\u0632 <code>RemoteMediator<\/code> \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0627\u062f\u0627\u0645\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647. RemoteMediator \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Room \u0646\u062a\u06cc\u062c\u0647 \u0628\u0632\u0631\u06af\u200c\u062a\u0631 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 <code>PagingSource<\/code> \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u0648\u0627\u0642\u0639\u06cc \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a:<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\"><strong>\u0627\u0633\u06a9\u0631\u0648\u0644 \u06a9\u0627\u0631\u0628\u0631 \u2192 \u0646\u06cc\u0627\u0632 \u0628\u0647 Append \u2192 RemoteMediator \u2192 API \u2192 Room \u2192 PagingSource \u2192 Compose<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0635\u0641\u062d\u0627\u062a\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0646\u060c \u0628\u0639\u062f\u0627\u064b \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646 \u0647\u0645 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0628\u0627\u0634\u0646. \u0647\u0645\u0686\u0646\u06cc\u0646 \u062d\u0630\u0641\u060c \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06cc\u0627 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u062d\u0635\u0648\u0644 \u0627\u0632 \u0647\u0645\u0648\u0646 \u0645\u0646\u0628\u0639 \u0645\u0634\u062a\u0631\u06a9 Room \u0639\u0628\u0648\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u06a9\u0627\u0631\u0628\u0631 \u0633\u0631\u06cc\u0639 \u0627\u0633\u06a9\u0631\u0648\u0644 \u06a9\u0646\u0647 \u0686\u0647 \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u06cc\u06a9 \u062d\u0631\u06a9\u062a \u0633\u0631\u06cc\u0639 \u0686\u0646\u062f\u06cc\u0646 \u0635\u0641\u062d\u0647 \u067e\u0627\u06cc\u06cc\u0646 \u0628\u0631\u0647. Paging \u0633\u0639\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0628\u0631\u0627\u0633\u0627\u0633 \u0646\u06cc\u0627\u0632 UI \u0648 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a <code>PagingConfig<\/code> \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0648 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0633\u0631\u0639\u062a \u0648\u0627\u0642\u0639\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u060c \u0633\u0631\u0648\u0631 \u0648 \u062d\u062c\u0645 \u067e\u0627\u0633\u062e \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0634\u0631\u0627\u06cc\u0637 \u0628\u0627\u06cc\u062f Loading \u06cc\u0627 Placeholder \u0645\u0646\u0627\u0633\u0628\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645. \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u067e\u0646\u0647\u0627\u0646 \u06a9\u0631\u062f\u0646 \u062a\u0623\u062e\u06cc\u0631\u060c \u062a\u0639\u062f\u0627\u062f \u0632\u06cc\u0627\u062f\u06cc \u0635\u0641\u062d\u0647 \u0631\u0648 \u0627\u0632 \u0642\u0628\u0644 \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0646\u06cc\u0645. Prefetch \u0628\u0627\u06cc\u062f \u062a\u0639\u0627\u062f\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0645\u0627\u0645 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u06cc\u06a9\u200c\u062c\u0627 \u0628\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u0646\u062f\u0627\u0632\u0647 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc Placeholder \u0628\u0627\u06cc\u062f \u0628\u0647 \u0627\u0628\u0639\u0627\u062f \u0648\u0627\u0642\u0639\u06cc ProductItem \u0646\u0632\u062f\u06cc\u06a9 \u0628\u0627\u0634\u0647. \u0627\u06af\u0631 Placeholder\u0647\u0627 \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u06a9\u0648\u062a\u0627\u0647 \u0628\u0627\u0634\u0646\u060c \u0635\u0641\u062d\u0647 \u0633\u0631\u06cc\u0639 \u067e\u0631 \u0646\u0645\u06cc\u0634\u0647 \u0648 <code>RemoteMediator<\/code> \u0645\u0645\u06a9\u0646\u0647 \u0686\u0646\u062f\u06cc\u0646 \u0628\u0627\u0631 \u067e\u0634\u062a\u200c\u0633\u0631\u0647\u0645 \u062f\u0627\u062f\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647 \u062a\u0627 \u0641\u0636\u0627\u06cc \u0635\u0641\u062d\u0647 \u06a9\u0627\u0645\u0644 \u0628\u0634\u0647. \u0645\u0633\u062a\u0646\u062f\u0627\u062a Compose \u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0647\u0634\u062f\u0627\u0631 \u062f\u0627\u062f\u0647\u200c\u0627\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Infinite Scroll \u0648 \u062c\u0633\u062a\u062c\u0648<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u062d\u0627\u0644 \u062f\u06cc\u062f\u0646 \u062a\u0645\u0627\u0645 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0648\u062f\u0647 \u0648 \u0686\u0646\u062f \u0635\u0641\u062d\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647. \u0628\u0639\u062f \u062f\u0627\u062e\u0644 Search \u0645\u06cc\u200c\u0646\u0648\u06cc\u0633\u0647 \u0634\u06cc\u0631. \u0627\u06cc\u0646 \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 Infinite Scroll \u062a\u0627\u0632\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u06cc\u0631 \u0628\u0647 \u0627\u062f\u0627\u0645\u0647 \u0641\u0647\u0631\u0633\u062a \u0642\u0628\u0644\u06cc \u0648\u0635\u0644 \u0628\u0634\u0646. \u0628\u0627 \u062a\u063a\u06cc\u06cc\u0631 Query\u060c <code>flatMapLatest<\/code> \u062c\u0631\u06cc\u0627\u0646 Paging \u0642\u0628\u0644\u06cc \u0631\u0648 \u06a9\u0646\u0627\u0631 \u0645\u06cc\u200c\u0630\u0627\u0631\u0647 \u0648 Pager \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0628\u0631\u0627\u06cc \u0634\u0631\u0627\u06cc\u0637 \u062c\u062f\u06cc\u062f \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val products =\n    query\n        .debounce(300)\n        .distinctUntilChanged()\n        .flatMapLatest { queryValue ->\n            repository.pagedProducts(\n                query = queryValue.trim()\n            )\n        }\n        .cachedIn(viewModelScope)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    query<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">debounce<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">300<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">distinctUntilChanged<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">flatMapLatest<\/span><span style=\"color: #24292E\"> { queryValue <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            repository.<\/span><span style=\"color: #6F42C1\">pagedProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                query <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> queryValue.<\/span><span style=\"color: #6F42C1\">trim<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">cachedIn<\/span><span style=\"color: #24292E\">(viewModelScope)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 Infinite Scroll \u0641\u0642\u0637 \u0628\u06cc\u0646 \u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u06cc\u0631 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0635\u0641\u062d\u0647 \u062f\u0648\u0645 \u0627\u06cc\u0646 \u062c\u0631\u06cc\u0627\u0646 \u06cc\u0639\u0646\u06cc \u0635\u0641\u062d\u0647 \u062f\u0648\u0645 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0646\u0637\u0628\u0642 \u0628\u0627 \u0634\u06cc\u0631\u060c \u0646\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u06a9\u0644 \u0645\u062d\u0635\u0648\u0644\u0627\u062a. \u0627\u06af\u0631 Query \u062f\u0648\u0628\u0627\u0631\u0647 \u067e\u0627\u06a9 \u0628\u0634\u0647\u060c \u062c\u0631\u06cc\u0627\u0646 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Infinite Scroll \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u063a\u06cc\u06cc\u0631 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0628\u0647 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0647\u0645 \u062c\u0631\u06cc\u0627\u0646 \u0642\u0628\u0644\u06cc \u0631\u0648 \u0628\u06cc\u200c\u0627\u0639\u062a\u0628\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0686\u0648\u0646 \u0635\u0641\u062d\u0647 \u062f\u0648\u0645 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u062c\u062f\u06cc\u062f\u060c \u0627\u062f\u0627\u0645\u0647 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u062a\u0631\u062a\u06cc\u0628 \u062a\u0627\u0632\u0647 \u0627\u0633\u062a \u0648 \u0647\u06cc\u0686 \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u0628\u0627 \u0635\u0641\u062d\u0627\u062a \u0642\u0628\u0644\u06cc \u0646\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 Query \u0648 Sort \u0628\u0627\u06cc\u062f \u0628\u0627 \u0647\u0645 \u0647\u0648\u06cc\u062a \u062c\u0631\u06cc\u0627\u0646 Pagination \u0631\u0648 \u0628\u0633\u0627\u0632\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val products =\n    combine(\n        query.debounce(300),\n        sort\n    ) { queryValue, sortValue ->\n        queryValue.trim() to sortValue\n    }.flatMapLatest { (queryValue, sortValue) ->\n        repository.pagedProducts(\n            query = queryValue,\n            sort = sortValue\n        )\n    }.cachedIn(viewModelScope)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> products <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">combine<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        query.<\/span><span style=\"color: #6F42C1\">debounce<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">300<\/span><span style=\"color: #24292E\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        sort<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) { queryValue, sortValue <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        queryValue.<\/span><span style=\"color: #6F42C1\">trim<\/span><span style=\"color: #24292E\">() to sortValue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }.<\/span><span style=\"color: #6F42C1\">flatMapLatest<\/span><span style=\"color: #24292E\"> { (queryValue, sortValue) <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        repository.<\/span><span style=\"color: #6F42C1\">pagedProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            query <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> queryValue,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            sort <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> sortValue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }.<\/span><span style=\"color: #6F42C1\">cachedIn<\/span><span style=\"color: #24292E\">(viewModelScope)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0628\u0627\u0631 \u062c\u0633\u062a\u062c\u0648 \u06cc\u0627 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647\u060c Infinite Scroll \u0627\u0632 \u0634\u0631\u0627\u06cc\u0637 \u062c\u062f\u06cc\u062f \u0622\u063a\u0627\u0632 \u0645\u06cc\u0634\u0647. Remote Keys \u0648 Cache \u0634\u0628\u06a9\u0647 \u0647\u0645 \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u0631\u0648 \u0628\u0634\u0646\u0627\u0633\u0646 \u062a\u0627 \u0635\u0641\u062d\u0627\u062a \u062f\u0648 \u062c\u0631\u06cc\u0627\u0646 \u0645\u062e\u062a\u0644\u0641 \u0628\u0627 \u0647\u0645 \u0645\u062e\u0644\u0648\u0637 \u0646\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0627\u0632\u06af\u0634\u062a \u0627\u0632 \u0635\u0641\u062d\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u062d\u0635\u0648\u0644<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062a\u0627 \u0645\u062d\u0635\u0648\u0644 \u0634\u0645\u0627\u0631\u0647 \u06f1\u06f8\u06f0 \u067e\u0627\u06cc\u06cc\u0646 \u0631\u0641\u062a\u0647\u060c \u0648\u0627\u0631\u062f \u062c\u0632\u0626\u06cc\u0627\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0634\u062f\u0647 \u0648 \u0628\u0639\u062f \u0628\u0631\u06af\u0634\u062a\u0647. \u0627\u0646\u062a\u0638\u0627\u0631 \u0637\u0628\u06cc\u0639\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0647\u0645\u0648\u0646 \u062d\u0648\u0627\u0644\u06cc \u0644\u06cc\u0633\u062a \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u0632 \u0645\u062d\u0635\u0648\u0644 \u0627\u0648\u0644 \u0634\u0631\u0648\u0639 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>cachedIn(viewModelScope)<\/code> \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647 Snapshot \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647 \u062f\u0631 \u0637\u0648\u0644 \u0639\u0645\u0631 ViewModel \u062d\u0641\u0638 \u0628\u0634\u0647. \u0647\u0645\u0686\u0646\u06cc\u0646 <code>LazyListState<\/code> \u0628\u0627\u06cc\u062f \u062f\u0631 \u0633\u0637\u062d \u0645\u0646\u0627\u0633\u0628 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0634\u0647 \u062a\u0627 \u0645\u0648\u0642\u0639\u06cc\u062a \u0627\u0633\u06a9\u0631\u0648\u0644 \u0627\u0632 \u0628\u06cc\u0646 \u0646\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0627\u0635\u0644\u06cc \u0633\u0627\u062e\u062a State \u0644\u06cc\u0633\u062a \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val listState = rememberLazyListState()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> listState <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">rememberLazyListState<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 State \u0628\u0647 <code>LazyColumn<\/code> \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u062f\u0631 \u0633\u0627\u062e\u062a\u0627\u0631 Navigation \u0645\u0646\u0627\u0633\u0628\u060c \u0628\u0627 \u0628\u0627\u0642\u06cc \u0645\u0648\u0646\u062f\u0646 Back Stack \u0648 ViewModel\u060c \u0645\u0648\u0642\u0639\u06cc\u062a \u0627\u0633\u06a9\u0631\u0648\u0644 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0642\u0627\u0628\u0644 \u062d\u0641\u0638\u0647. \u0627\u06af\u0631 \u0635\u0641\u062d\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u0627\u0632 Navigation \u062e\u0627\u0631\u062c \u06cc\u0627 Process \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0627\u0628\u0648\u062f \u0628\u0634\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u062f\u0642\u06cc\u0642\u200c\u062a\u0631 \u0628\u0647 <code>rememberSaveable<\/code> \u06cc\u0627 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0634\u0646\u0627\u0633\u0647 \u0622\u06cc\u062a\u0645 \u0641\u0639\u0644\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0641\u0639\u0644\u06cc \u0645\u0639\u06cc\u0627\u0631 \u0645\u0646\u0627\u0633\u0628\u06cc \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0647 \u062c\u0627\u06cc \u0642\u0628\u0644\u06cc \u0646\u06cc\u0633\u062a. \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0648\u0633\u0637 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0627\u0646\u062f\u0627\u0632\u0647 \u0635\u0641\u062d\u0627\u062a \u06cc\u0627 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0647\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0646. \u0645\u0648\u0642\u0639\u06cc\u062a \u0627\u0633\u06a9\u0631\u0648\u0644 \u06cc\u0627 \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644 \u0642\u0627\u0628\u0644 \u0627\u062a\u06a9\u0627\u062a\u0631 \u0627\u0632 \u0635\u0641\u062d\u0647 \u067e\u0646\u062c\u0645 \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0628\u0627 \u067e\u0627\u06cc\u06cc\u0646 \u0631\u0641\u062a\u0646 \u0628\u0627\u06cc\u062f \u0635\u0641\u062d\u0627\u062a \u0642\u0628\u0644\u06cc \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u062d\u0630\u0641 \u0628\u0634\u0646\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0635\u062f\u0647\u0627 \u0635\u0641\u062d\u0647 \u067e\u0627\u06cc\u06cc\u0646 \u0628\u0631\u0647\u060c \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u062a\u0645\u0627\u0645 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc UI \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0633\u0646\u06af\u06cc\u0646 \u0628\u0634\u0647. Paging \u0628\u0627 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a\u06cc \u0645\u062b\u0644 <code>maxSize<\/code> \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u0639\u062f\u0627\u062f \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc\u06cc \u0631\u0648 \u06a9\u0647 \u062f\u0631 Snapshot \u062d\u0627\u0641\u0638\u0647 \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0647 \u0645\u06cc\u0634\u0646 \u0645\u062d\u062f\u0648\u062f \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>PagingConfig(\n    pageSize = 20,\n    prefetchDistance = 5,\n    maxSize = 200\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">PagingConfig<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    pageSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">20<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    prefetchDistance <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">5<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    maxSize <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">200<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0639\u062f\u062f \u0628\u0647 \u0645\u0639\u0646\u06cc \u062d\u0630\u0641 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0632 Room \u0646\u06cc\u0633\u062a. \u0641\u0642\u0637 \u0635\u0641\u062d\u0627\u062a \u062f\u0648\u0631 \u0627\u0632 \u0645\u062d\u062f\u0648\u062f\u0647 \u0641\u0639\u0644\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0627\u0632 Cache \u062d\u0627\u0641\u0638\u0647 Paging \u06a9\u0646\u0627\u0631 \u06af\u0630\u0627\u0634\u062a\u0647 \u0628\u0634\u0646. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647 \u0628\u0627\u0644\u0627 \u0628\u0631\u06af\u0631\u062f\u0647\u060c \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0627\u0632 Room \u062f\u0648\u0628\u0627\u0631\u0647 \u062e\u0648\u0627\u0646\u062f\u0647 \u0628\u0634\u0646. <code>maxSize<\/code> \u0628\u0627\u06cc\u062f \u0628\u0627 \u0627\u062d\u062a\u06cc\u0627\u0637 \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0634\u0647. \u0645\u0642\u062f\u0627\u0631 \u062e\u06cc\u0644\u06cc \u06a9\u0648\u0686\u06a9 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0627\u0639\u062b \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc\u200c\u0647\u0627\u06cc \u0645\u062c\u062f\u062f \u0632\u06cc\u0627\u062f \u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0644\u0627 \u0648 \u067e\u0627\u06cc\u06cc\u0646 \u0631\u0641\u062a\u0646 \u0628\u0634\u0647 \u0648 \u0645\u0642\u062f\u0627\u0631 \u062e\u06cc\u0644\u06cc \u0628\u0632\u0631\u06af \u0645\u0635\u0631\u0641 \u062d\u0627\u0641\u0638\u0647 \u0631\u0648 \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0628\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u0627\u0628\u062a\u062f\u0627\u06cc\u06cc\u060c \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0628\u062f\u0648\u0646 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u0634\u06a9\u0644 \u0648\u0627\u0642\u0639\u06cc \u062d\u062a\u0645\u0627\u064b <code>maxSize<\/code> \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645. \u0627\u0628\u062a\u062f\u0627 \u0631\u0641\u062a\u0627\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0631\u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0648 \u0628\u0639\u062f \u0628\u0631\u0627\u0633\u0627\u0633 \u062a\u0639\u062f\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0648 \u0645\u0635\u0631\u0641 \u062d\u0627\u0641\u0638\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u0647\u0646\u06af\u0627\u0645 \u062d\u0636\u0648\u0631 \u062f\u0631 \u0645\u06cc\u0627\u0646\u0647 \u0644\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0645\u06cc\u0627\u0646\u0647 Infinite Scroll \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0647 \u0648 Refresh \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647\u060c \u062a\u0631\u062a\u06cc\u0628 \u0648 \u0645\u062d\u062a\u0648\u0627\u06cc \u062f\u0627\u062f\u0647 \u0645\u0645\u06a9\u0646\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647. \u0645\u062d\u0635\u0648\u0644 \u062c\u062f\u06cc\u062f\u06cc \u0634\u0627\u06cc\u062f \u0628\u0627\u0644\u0627\u06cc \u0644\u06cc\u0633\u062a \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0628\u0639\u0636\u06cc \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0639\u0648\u0636 \u0634\u062f\u0647 \u0628\u0627\u0634\u0646. Paging \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>getRefreshKey<\/code> \u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a <code>PagingState<\/code> \u062a\u0644\u0627\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0646\u0642\u0637\u0647 \u0645\u0646\u0627\u0633\u0628\u06cc \u0628\u0631\u0627\u06cc Refresh \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647 \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u0628\u0647 \u0627\u0628\u062a\u062f\u0627\u06cc \u0644\u06cc\u0633\u062a \u067e\u0631\u062a\u0627\u0628 \u0646\u0634\u0647. \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc Room \u0648 RemoteMediator \u0646\u06cc\u0632 Refresh \u0628\u0627\u06cc\u062f \u0628\u0647 \u0634\u06a9\u0644\u06cc \u0637\u0631\u0627\u062d\u06cc \u0628\u0634\u0647 \u06a9\u0647 Cache \u062a\u0627\u0632\u0647 \u0628\u0634\u0647\u060c \u0627\u0645\u0627 \u062a\u062c\u0631\u0628\u0647 \u0627\u0633\u06a9\u0631\u0648\u0644 \u062a\u0627 \u062c\u0627\u06cc \u0645\u0645\u06a9\u0646 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0628\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f \u0647\u0646\u06af\u0627\u0645 \u0647\u0631 Refresh \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc <code>scrollToItem(0)<\/code> \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645\u060c \u0645\u06af\u0631 \u0627\u06cc\u0646\u06a9\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0645\u062d\u0635\u0648\u0644 \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062d\u062a\u0645\u0627\u064b \u0628\u0627\u06cc\u062f \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627 \u0631\u0648 \u0627\u0632 \u0628\u0627\u0644\u0627 \u0628\u0628\u06cc\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0647 \u0632\u0645\u0627\u0646\u06cc Infinite Scroll \u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Infinite Scroll \u0628\u0631\u0627\u06cc \u0645\u0631\u0648\u0631 \u067e\u06cc\u0648\u0633\u062a\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0639\u0627\u0644\u06cc\u0647\u060c \u0627\u0645\u0627 \u062f\u0631 \u0647\u0645\u0647 \u0645\u0648\u0642\u0639\u06cc\u062a\u200c\u0647\u0627 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u06cc\u0633\u062a. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0628\u062f\u0648\u0646\u0647 \u062f\u0631 \u0635\u0641\u062d\u0647 \u0686\u0646\u062f\u0645\u0647\u060c \u0628\u0647 \u0628\u062e\u0634 \u0645\u0634\u062e\u0635\u06cc \u0628\u0631\u06af\u0631\u062f\u0647 \u06cc\u0627 \u062a\u0639\u062f\u0627\u062f \u0646\u062a\u0627\u06cc\u062c \u0648 \u0645\u062d\u062f\u0648\u062f\u0647 \u0635\u0641\u062d\u0627\u062a \u0631\u0648 \u0645\u0642\u0627\u06cc\u0633\u0647 \u06a9\u0646\u0647\u060c Pagination \u0628\u0627 \u062f\u06a9\u0645\u0647\u200c\u0647\u0627\u06cc \u0635\u0641\u062d\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0642\u0627\u0628\u0644\u200c\u06a9\u0646\u062a\u0631\u0644\u200c\u062a\u0631 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0686\u0646\u06cc\u0646 \u062f\u0631 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u06a9\u0647 Footer \u0645\u0647\u0645\u06cc \u062f\u0627\u0631\u0647\u060c Infinite Scroll \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 Footer \u0631\u0648 \u0633\u062e\u062a \u06a9\u0646\u0647\u060c \u0686\u0648\u0646 \u0628\u0627 \u0631\u0633\u06cc\u062f\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u067e\u0627\u06cc\u06cc\u0646\u060c \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u06a9\u0627\u0631\u0628\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0646\u0628\u0627\u0644 \u0645\u0631\u0648\u0631\u060c \u062c\u0633\u062a\u062c\u0648 \u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0633\u0631\u06cc\u0639 \u0645\u062d\u0635\u0648\u0644\u0647. \u0627\u0648 \u0627\u0647\u0645\u06cc\u062a\u06cc \u0646\u0645\u06cc\u062f\u0647 \u062f\u0631 \u0635\u0641\u062d\u0647 \u06f7 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0647\u061b \u0641\u0642\u0637 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0644\u06cc\u0633\u062a \u0628\u062f\u0648\u0646 \u062a\u0648\u0642\u0641 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Infinite Scroll \u0628\u0631\u0627\u06cc \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0646\u0627\u0633\u0628\u06cc\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Infinite Scroll \u0628\u0627\u06cc\u062f \u067e\u0627\u06cc\u0627\u0646 \u0648 \u062e\u0637\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 Infinite Scroll \u0631\u0648 \u0641\u0642\u0637 \u0628\u0647 \u0645\u0639\u0646\u06cc \u0647\u0631 \u0648\u0642\u062a \u067e\u0627\u06cc\u06cc\u0646 \u0631\u0641\u062a\u06cc\u0645\u060c \u062f\u0627\u062f\u0647 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0628\u06af\u06cc\u0631 \u0628\u062f\u0648\u0646\u06cc\u0645. \u06cc\u06a9 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u0644 \u0628\u0627\u06cc\u062f \u062d\u062f\u0627\u0642\u0644 \u0686\u0647\u0627\u0631 \u0648\u0636\u0639\u06cc\u062a \u0631\u0648 \u0628\u0634\u0646\u0627\u0633\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0635\u0641\u062d\u0647 \u0627\u0648\u0644\u060c \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u060c \u062e\u0637\u0627\u06cc \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0648 \u062e\u0637\u0627\u06cc \u0635\u0641\u062d\u0647 \u0628\u0639\u062f. \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u0648\u0646\u060c \u0628\u0627\u06cc\u062f \u067e\u0627\u06cc\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0647\u0645 \u0645\u0634\u062e\u0635 \u0628\u0627\u0634\u0647. \u0627\u06af\u0631 \u0627\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a\u200c\u0647\u0627 \u0631\u0648\u0634\u0646 \u0646\u0628\u0627\u0634\u0646\u060c \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0628\u06cc\u200c\u0648\u0642\u0641\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0641\u0631\u0633\u062a\u0647\u060c \u062e\u0637\u0627 \u0631\u0648 \u067e\u0646\u0647\u0627\u0646 \u06a9\u0646\u0647 \u06cc\u0627 Loading \u062f\u0627\u0626\u0645\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Paging 3 \u0627\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a\u200c\u0647\u0627 \u0631\u0648 \u062f\u0631 <code>loadState<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647 \u0648 UI \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0647\u0631 \u06a9\u062f\u0648\u0645 \u0631\u0648 \u062f\u0631 \u062c\u0627\u06cc \u062f\u0631\u0633\u062a \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0647\u0631 \u0628\u062e\u0634<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Compose \u062d\u0631\u06a9\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc Lazy list \u0645\u0646\u0639\u06a9\u0633 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0641\u0639\u0644\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647 \u0648 \u0628\u0631\u0627\u0633\u0627\u0633 <code>append<\/code>\u060c Loading \u06cc\u0627 Retry \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647. Paging 3 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0644\u0627\u0632\u0645 \u0647\u0633\u062a\u0646\u060c \u062c\u0644\u0648\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u0648\u0636\u0639\u06cc\u062a Refresh\u060c Append \u0648 \u067e\u0627\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u062c\u0631\u06cc\u0627\u0646 <code>PagingData<\/code> \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u062f\u0631 \u0645\u062d\u062f\u0648\u062f\u0647 \u062e\u0648\u062f\u0634 Cache \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u06cc\u0627 \u0645\u0648\u0642\u0639\u06cc\u062a \u0622\u062e\u0631\u06cc\u0646 \u0622\u06cc\u062a\u0645 \u0631\u0648 \u062f\u0633\u062a\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647. Repository\u060c <code>Pager<\/code> \u0648 <code>PagingConfig<\/code> \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647 \u0648 Query\u060c Sort \u0648 Category \u0631\u0648 \u0648\u0627\u0631\u062f \u0647\u0648\u06cc\u062a \u062c\u0631\u06cc\u0627\u0646 Pagination \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RemoteMediator \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0631\u0648 \u0627\u0632 API \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. Room \u0647\u0645\u0686\u0646\u0627\u0646 \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Infinite Scroll \u0641\u0642\u0637 \u062d\u0630\u0641 \u062f\u06a9\u0645\u0647 \u0628\u0639\u062f\u06cc \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c Infinite Scroll \u06cc\u0639\u0646\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u062f\u0648\u0646 \u0632\u062f\u0646 \u062f\u06a9\u0645\u0647\u060c \u067e\u0627\u06cc\u06cc\u0646 \u0645\u06cc\u0631\u0647 \u0648 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0638\u0627\u0647\u0631 \u0645\u06cc\u0634\u0646. \u0627\u0645\u0627 \u062a\u062c\u0631\u0628\u0647 \u0631\u0648\u0627\u0646 \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0645\u06cc \u0642\u0628\u0644 \u0627\u0632 \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647\u060c Append \u0631\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0646\u0647\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0646\u0633\u0627\u0632\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0628\u0644\u06cc \u0631\u0648 \u0647\u0646\u06af\u0627\u0645 Loading \u06cc\u0627 Error \u062d\u0641\u0638 \u06a9\u0646\u0647 \u0648 \u0628\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062c\u0633\u062a\u062c\u0648 \u06cc\u0627 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc\u060c \u062c\u0631\u06cc\u0627\u0646 \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0628\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>Infinite Scroll \u06cc\u06a9 \u0631\u0641\u062a\u0627\u0631 UI \u0631\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc Pagination \u0627\u0633\u062a<\/strong>. \u0635\u0641\u062d\u0647 \u0646\u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0634 \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0627\u062a \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u0647. Compose \u0641\u0642\u0637 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc Paging \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647 \u0648 Paging 3 \u0628\u0631\u0627\u0633\u0627\u0633 \u062f\u0633\u062a\u0631\u0633\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc \u0646\u0632\u062f\u06cc\u06a9 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a\u060c \u0627\u062f\u0627\u0645\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 Infinite Scroll \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 <code>LazyColumn<\/code> \u067e\u0627\u06cc\u06cc\u0646 \u0645\u06cc\u0631\u0647\u060c Paging 3 \u06a9\u0645\u06cc \u0642\u0628\u0644 \u0627\u0632 \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0641\u0639\u0644\u06cc \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647\u060c RemoteMediator \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0632 API \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Compose \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0641\u0647\u0631\u0633\u062a \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061b \u0628\u062f\u0648\u0646 \u062f\u06a9\u0645\u0647 \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u060c \u0628\u062f\u0648\u0646 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062f\u0633\u062a\u06cc \u0634\u0645\u0627\u0631\u0647 \u0635\u0641\u062d\u0647 \u0648 \u0628\u062f\u0648\u0646 \u0627\u0632 \u0628\u06cc\u0646 \u0631\u0641\u062a\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0628\u0644\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u0633\u0648\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0635\u0641\u062d\u0647 \u0631\u0648 \u062a\u0627\u0632\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0647 \u0648 \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Refresh<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u060c \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0645\u062f\u062a \u0632\u06cc\u0627\u062f\u06cc \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0645\u0648\u0646\u0647. \u062f\u0631 \u0647\u0645\u06cc\u0646 \u0641\u0627\u0635\u0644\u0647 \u0634\u0627\u06cc\u062f \u0645\u062d\u0635\u0648\u0644 \u062c\u062f\u06cc\u062f\u06cc \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u062b\u0628\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0642\u06cc\u0645\u062a \u0628\u0639\u0636\u06cc \u06a9\u0627\u0644\u0627\u0647\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0645\u062d\u0635\u0648\u0644\u06cc \u062d\u0630\u0641 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u06a9\u0647 \u062f\u0627\u062e\u0644 Room \u062f\u0627\u0631\u06cc\u0645 \u0647\u0646\u0648\u0632 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u0646\u060c \u0627\u0645\u0627 \u0645\u0645\u06a9\u0646\u0647 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0646\u0628\u0627\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Refresh \u0628\u0631\u0627\u06cc \u062d\u0644 \u0647\u0645\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647 \u0627\u0633\u062a. \u06a9\u0627\u0631\u0628\u0631 \u06cc\u0627 \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0641\u0639\u0644\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0634\u0646. \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Refresh \u0646\u0628\u0627\u06cc\u062f \u0628\u0647 \u0645\u0639\u0646\u06cc \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0641\u0648\u0631\u06cc \u0635\u0641\u062d\u0647 \u0648 \u0634\u0631\u0648\u0639 \u0647\u0645\u0647\u200c\u0686\u06cc\u0632 \u0627\u0632 \u0635\u0641\u0631 \u0628\u0627\u0634\u0647. \u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0642\u0639\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0628\u0644\u06cc \u0647\u0645\u0686\u0646\u0627\u0646 \u0627\u0631\u0632\u0634 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u0631\u0646 \u0648 \u0628\u0647\u062a\u0631\u0647 \u062a\u0627 \u0631\u0633\u06cc\u062f\u0646 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0645\u0633\u06cc\u0631 Refresh \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc Offline First \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647: <strong>\u06a9\u0627\u0631\u0628\u0631 Refresh \u0631\u0648 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Paging \u06cc\u0627 ViewModel \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u0645\u06cc\u062f\u0647\u060c Repository \u06cc\u0627 RemoteMediator \u0622\u062e\u0631\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0627\u0632 API \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647\u060c Room \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u0634\u0647 \u0648 UI \u0646\u062a\u06cc\u062c\u0647 \u062a\u0627\u0632\u0647 \u0631\u0648 \u0627\u0632 \u0647\u0645\u0648\u0646 Room \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u062d\u062a\u06cc \u0647\u0646\u06af\u0627\u0645 Refresh \u0647\u0645 API \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0644\u06cc\u0633\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0648\u0627\u0631\u062f Compose \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0647\u0645\u0686\u0646\u0627\u0646 Room \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Refresh \u06cc\u0639\u0646\u06cc \u0648\u0636\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0631\u0631\u0633\u06cc \u0628\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0646\u062a\u06cc\u062c\u0647 \u0627\u06cc\u0646 \u0628\u0631\u0631\u0633\u06cc \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f \u0628\u0627\u0634\u0647: \u0645\u062d\u0635\u0648\u0644 \u062c\u062f\u06cc\u062f\u06cc \u0627\u0636\u0627\u0641\u0647 \u0628\u0634\u0647\u060c \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u06cc \u062d\u0630\u0641 \u0628\u0634\u0647 \u06cc\u0627 \u0645\u0634\u062e\u0635 \u0628\u0634\u0647 \u0647\u06cc\u0686 \u062a\u063a\u06cc\u06cc\u0631\u06cc \u0627\u062a\u0641\u0627\u0642 \u0646\u06cc\u0641\u062a\u0627\u062f\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Refresh \u0641\u0642\u0637 \u062f\u0627\u0646\u0644\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0647\u0645\u0627\u0646 List \u0646\u06cc\u0633\u062a. \u0647\u062f\u0641 \u0627\u0635\u0644\u06cc \u0627\u0648\u0646 \u0647\u0645\u0627\u0647\u0646\u06af \u06a9\u0631\u062f\u0646 \u0646\u0633\u062e\u0647 \u0645\u062d\u0644\u06cc \u0628\u0627 \u0646\u0633\u062e\u0647 \u0633\u0631\u0648\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u06a9\u0627\u0631\u0628\u0631 \u0633\u0627\u0639\u062a \u06f1\u06f0 \u0635\u0628\u062d \u0641\u0647\u0631\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0647. \u0633\u0627\u0639\u062a \u06f1\u06f0:\u06f3\u06f0 \u0642\u06cc\u0645\u062a \u0686\u0646\u062f \u0645\u062d\u0635\u0648\u0644 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0648 \u0633\u0627\u0639\u062a \u06f1\u06f1 \u06a9\u0627\u0631\u0628\u0631 \u0635\u0641\u062d\u0647 \u0631\u0648 \u067e\u0627\u06cc\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0634\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0646\u0633\u062e\u0647 \u062a\u0627\u0632\u0647 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 Room \u0631\u0648 \u0627\u0635\u0644\u0627\u062d \u06a9\u0646\u0647. \u0628\u0639\u062f UI \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0648\u0627\u06a9\u0646\u0634\u06cc \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a Refresh \u0628\u0627 \u0627\u0648\u0644\u06cc\u0646 Loading<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644\u06cc\u0646 Loading \u0632\u0645\u0627\u0646\u06cc \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc\u200c\u0627\u0641\u062a\u0647 \u06a9\u0647 \u0635\u0641\u062d\u0647 \u0628\u0627\u0632 \u0634\u062f\u0647 \u0648 \u0647\u0646\u0648\u0632 \u0647\u06cc\u0686 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0646\u062f\u0627\u0631\u06cc\u0645. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0645\u0645\u06a9\u0646\u0647 \u0646\u0645\u0627\u06cc\u0634 \u06cc\u06a9 Loading \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u0645\u0646\u0637\u0642\u06cc \u0628\u0627\u0634\u0647. \u0627\u0645\u0627 \u0647\u0646\u06af\u0627\u0645 Refresh \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0627\u062f\u0647 \u0642\u0628\u0644\u06cc \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u067e\u0633 \u0646\u0628\u0627\u06cc\u062f \u0644\u06cc\u0633\u062a \u0646\u0627\u067e\u062f\u06cc\u062f \u0628\u0634\u0647 \u0648 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u062e\u0627\u0644\u06cc \u062c\u0627\u06cc \u0627\u0648\u0646 \u0631\u0648 \u0628\u06af\u06cc\u0631\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0647\u0645\u0686\u0646\u0627\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0628\u0644\u06cc \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647 \u0648 \u0641\u0642\u0637 \u06cc\u06a9 \u0646\u0634\u0627\u0646\u06af\u0631 \u06a9\u0648\u0686\u06a9 \u0645\u062a\u0648\u062c\u0647\u0634 \u06a9\u0646\u0647 \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062a\u0627\u0632\u0647 \u062f\u0631 \u062d\u0627\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0628\u06cc\u0627\u0646 \u0633\u0627\u062f\u0647\u060c Loading \u0627\u0648\u0644\u06cc\u0647 \u0645\u06cc\u06af\u0647 \u0647\u0646\u0648\u0632 \u0686\u06cc\u0632\u06cc \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0646\u062f\u0627\u0631\u06cc\u0645\u060c \u0627\u0645\u0627 Refresh \u0645\u06cc\u06af\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0639\u0644\u06cc \u0631\u0648 \u062f\u0627\u0631\u06cc\u0645 \u0648 \u062f\u0631 \u062d\u0627\u0644 \u0628\u0631\u0631\u0633\u06cc \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f\u062a\u0631 \u0647\u0633\u062a\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a Refresh \u0628\u0627 Append<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Infinite Scroll\u060c \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc \u0641\u0647\u0631\u0633\u062a \u0646\u0632\u062f\u06cc\u06a9 \u0645\u06cc\u0634\u0647\u060c \u0635\u0641\u062d\u0647 \u0628\u0639\u062f\u06cc \u0628\u0627 \u0639\u0645\u0644\u06cc\u0627\u062a <code>Append<\/code> \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0647. Append \u0641\u0642\u0637 \u0627\u062f\u0627\u0645\u0647 \u0644\u06cc\u0633\u062a \u0641\u0639\u0644\u06cc \u0631\u0648 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0645\u0627 Refresh \u06a9\u0644 \u062c\u0631\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u06cc \u062d\u0630\u0641 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u062a\u0631\u062a\u06cc\u0628 \u0646\u062a\u0627\u06cc\u062c \u0639\u0648\u0636 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 Append \u0645\u06cc\u06af\u0647 \u0627\u062f\u0627\u0645\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 \u0628\u062f\u0647\u060c \u0627\u0645\u0627 Refresh \u0645\u06cc\u06af\u0647 \u0646\u0633\u062e\u0647 \u0641\u0639\u0644\u06cc \u0627\u06cc\u0646 \u0645\u062c\u0645\u0648\u0639\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646. \u0647\u0645\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0648\u0636\u0639\u06cc\u062a Loading \u0648 Error \u0627\u0648\u0646\u200c\u0647\u0627 \u0647\u0645 \u062c\u062f\u0627 \u0628\u0627\u0634\u0647. \u062e\u0637\u0627\u06cc Append \u0628\u0627\u06cc\u062f \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0644\u06cc\u0633\u062a \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647\u060c \u0627\u0645\u0627 \u062e\u0637\u0627\u06cc Refresh \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0644 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a Refresh \u0628\u0627 Retry<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>retry<\/code> \u0641\u0642\u0637 \u0622\u062e\u0631\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0634\u06a9\u0633\u062a\u200c\u062e\u0648\u0631\u062f\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06af\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0635\u0641\u062d\u0647 \u067e\u0646\u062c\u0645 \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c Retry \u062f\u0648\u0628\u0627\u0631\u0647 \u0647\u0645\u0648\u0646 \u0635\u0641\u062d\u0647 \u0631\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0645\u0627 Refresh \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0627\u0632\u0647 \u0628\u0631\u0627\u06cc \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u0633\u062a\u060c \u062d\u062a\u06cc \u0627\u06af\u0631 \u0639\u0645\u0644\u06cc\u0627\u062a \u0642\u0628\u0644\u06cc \u062e\u0637\u0627\u06cc\u06cc \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Paging\u060c \u0627\u06cc\u0646 \u062f\u0648 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0627\u0632 \u0647\u0645 \u062c\u062f\u0627 \u0647\u0633\u062a\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>products.retry()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">products.<\/span><span style=\"color: #6F42C1\">retry<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637 \u0632\u0645\u0627\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u06cc\u06a9 Load \u0642\u0628\u0644\u06cc \u0628\u0627 \u062e\u0637\u0627 \u0631\u0648\u0628\u0647\u200c\u0631\u0648 \u0634\u062f\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0647\u0645\u0627\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>products.refresh()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637 \u06cc\u06a9 Refresh \u062a\u0627\u0632\u0647 \u0631\u0648\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647 \u0634\u0631\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0646\u0647. Paging \u0648\u0636\u0639\u06cc\u062a <code>refresh<\/code>\u060c <code>append<\/code> \u0648 <code>prepend<\/code> \u0631\u0648 \u062c\u062f\u0627 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u0648 Retry \u0647\u0645 \u0622\u062e\u0631\u06cc\u0646 Load \u0646\u0627\u0645\u0648\u0641\u0642 \u0631\u0648 \u0647\u062f\u0641 \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pull to Refresh<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0631\u0627\u06cc\u062c\u200c\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 \u0627\u062c\u0631\u0627\u06cc Refresh \u062f\u0631 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0642\u062a\u06cc \u062f\u0631 \u0627\u0628\u062a\u062f\u0627\u06cc \u0644\u06cc\u0633\u062a \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0647\u060c \u0635\u0641\u062d\u0647 \u0631\u0648 \u0628\u0647 \u0633\u0645\u062a \u067e\u0627\u06cc\u06cc\u0646 \u0628\u06a9\u0634\u0647. \u0628\u0647 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 Pull to Refresh \u0645\u06cc\u06af\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Compose\u060c <code>PullToRefreshBox<\/code> \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 Container \u062f\u0648\u0631 \u0645\u062d\u062a\u0648\u0627\u06cc \u0642\u0627\u0628\u0644 \u0627\u0633\u06a9\u0631\u0648\u0644 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u062f\u0648 \u0648\u0631\u0648\u062f\u06cc \u0627\u0635\u0644\u06cc \u0627\u0648\u0646 <code>isRefreshing<\/code> \u0648 <code>onRefresh<\/code> \u0647\u0633\u062a\u0646\u061b \u0627\u0648\u0644\u06cc \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u0633\u062a \u06cc\u0627 \u0646\u0647 \u0648 \u062f\u0648\u0645\u06cc \u0632\u0645\u0627\u0646\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 Refresh \u0631\u0648 \u0622\u063a\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0627\u0635\u0644\u06cc \u0627\u062a\u0635\u0627\u0644 \u0627\u0648\u0646 \u0628\u0647 \u0644\u06cc\u0633\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>PullToRefreshBox(\n    isRefreshing = isRefreshing,\n    onRefresh = onRefresh\n) {\n    LazyColumn {\n        \/\/ \u0645\u062d\u0635\u0648\u0644\u0627\u062a\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">PullToRefreshBox<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    isRefreshing <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> isRefreshing,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    onRefresh <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> onRefresh<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">LazyColumn<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6A737D\">\/\/ \u0645\u062d\u0635\u0648\u0644\u0627\u062a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u062f\u0627\u062e\u0644 \u0644\u0627\u06cc\u0647 Compose \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. <code>PullToRefreshBox<\/code> \u0641\u0642\u0637 \u062d\u0631\u06a9\u062a \u06a9\u0627\u0631\u0628\u0631 \u0648 Indicator \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062e\u0648\u062f\u0634 \u0646\u0628\u0627\u06cc\u062f API \u0631\u0648 \u0635\u062f\u0627 \u0628\u0632\u0646\u0647 \u06cc\u0627 Room \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647. <code>onRefresh<\/code> \u0647\u0645 \u0628\u0647\u062a\u0631\u0647 \u06cc\u06a9 Callback \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0627\u0632 \u0628\u06cc\u0631\u0648\u0646 \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 Composable \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b Repository \u0631\u0648 \u0628\u0634\u0646\u0627\u0633\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">isRefreshing \u0627\u0632 \u06a9\u062c\u0627 \u0645\u06cc\u0627\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">UI \u0646\u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0634 \u062d\u062f\u0633 \u0628\u0632\u0646\u0647 Refresh \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u062a\u0645\u0648\u0645 \u0634\u062f\u0647. \u0627\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a \u0628\u0627\u06cc\u062f \u0627\u0632 \u0639\u0645\u0644\u06cc\u0627\u062a \u0648\u0627\u0642\u0639\u06cc \u062f\u0627\u062f\u0647 \u0628\u06cc\u0627\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0627\u0632 Paging 3 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u0648\u0636\u0639\u06cc\u062a Refresh \u062f\u0627\u062e\u0644 <code>loadState.refresh<\/code> \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val isRefreshing =\n    products.loadState.refresh is LoadState.Loading\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> isRefreshing <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    products.loadState.refresh <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.Loading<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062e\u0637 \u062f\u0627\u062e\u0644 \u0628\u062e\u0634 UI \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647\u060c \u0686\u0648\u0646 \u0641\u0642\u0637 \u0648\u0636\u0639\u06cc\u062a Paging \u0631\u0648 \u0628\u0647 \u06cc\u06a9 Boolean \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc <code>PullToRefreshBox<\/code> \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0648\u0642\u062a\u06cc Refresh \u0634\u0631\u0648\u0639 \u0645\u06cc\u0634\u0647\u060c \u0645\u0642\u062f\u0627\u0631 true \u0645\u06cc\u0634\u0647 \u0648 Indicator \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0648\u0642\u062a\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u0645\u0648\u0641\u0642 \u06cc\u0627 \u0646\u0627\u0645\u0648\u0641\u0642 \u062a\u0645\u0648\u0645 \u0645\u06cc\u0634\u0647\u060c \u0627\u0632 \u062d\u0627\u0644\u062a Loading \u062e\u0627\u0631\u062c \u0645\u06cc\u0634\u0647 \u0648 Indicator \u0647\u0645 \u0628\u0633\u062a\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 Compose \u06cc\u06a9 \u0645\u062a\u063a\u06cc\u0631 \u0645\u0633\u062a\u0642\u0644 \u0628\u0633\u0627\u0632\u06cc\u0645\u060c \u0627\u0648\u0646 \u0631\u0648 \u0647\u0646\u06af\u0627\u0645 \u06a9\u0634\u06cc\u062f\u0646 \u0635\u0641\u062d\u0647 true \u06a9\u0646\u06cc\u0645 \u0648 \u0628\u0639\u062f \u0628\u0627 Delay \u0631\u0648\u06cc false \u0628\u0630\u0627\u0631\u06cc\u0645. Indicator \u0628\u0627\u06cc\u062f \u0628\u0647 \u0648\u0636\u0639\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0646\u0647 \u06cc\u06a9 \u0627\u0646\u06cc\u0645\u06cc\u0634\u0646 \u0633\u0627\u062e\u062a\u06af\u06cc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u062a\u0635\u0627\u0644 Pull to Refresh \u0628\u0647 Paging<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u062a\u0635\u0627\u0644 \u0627\u0635\u0644\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>PullToRefreshBox(\n    isRefreshing =\n        products.loadState.refresh is LoadState.Loading,\n    onRefresh = products::refresh\n) {\n    ProductsList(products)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">PullToRefreshBox<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    isRefreshing <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        products.loadState.refresh <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.Loading,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    onRefresh <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> products::<\/span><span style=\"color: #6F42C1\">refresh<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">ProductsList<\/span><span style=\"color: #24292E\">(products)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>onRefresh = products::refresh<\/code> \u06cc\u0639\u0646\u06cc \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0635\u0641\u062d\u0647 \u0631\u0648 \u067e\u0627\u06cc\u06cc\u0646 \u06a9\u0634\u06cc\u062f\u060c \u062e\u0648\u062f Paging \u062c\u0631\u06cc\u0627\u0646 \u0641\u0639\u0644\u06cc \u0631\u0648 \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u062e\u0634 \u062f\u0627\u062e\u0644 Composable \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc\u060c ViewModel \u0647\u0645\u0686\u0646\u0627\u0646 \u062c\u0631\u06cc\u0627\u0646 <code>PagingData<\/code> \u0631\u0648 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u062c\u062f\u0627 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0635\u062f\u0627 \u0632\u062f\u0646 <code>refresh<\/code> \u0628\u0633\u0627\u0632\u0647\u061b \u0686\u0648\u0646 <code>LazyPagingItems<\/code> \u0627\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0648 \u062f\u0631 \u0633\u0637\u062d UI \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u062f\u0627\u0631\u0647. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u06af\u0631 Refresh \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0627\u06cc\u062f \u0686\u0646\u062f \u062f\u0627\u062f\u0647 \u062f\u06cc\u06af\u0631 \u0631\u0648 \u0647\u0645 \u062a\u0627\u0632\u0647 \u06a9\u0646\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u0645\u0646\u0637\u0642\u06cc\u200c\u062a\u0631 \u0628\u0627\u0634\u0647 Callback \u0628\u0647 ViewModel \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0628\u0634\u0647 \u062a\u0627 \u0639\u0645\u0644\u06cc\u0627\u062a\u200c\u0647\u0627 \u0631\u0648 \u0647\u0645\u0627\u0647\u0646\u06af \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 products.refresh \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b API \u0631\u0648 \u0635\u062f\u0627 \u0645\u06cc\u200c\u0632\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647 \u0644\u0632\u0648\u0645\u0627\u064b. <code>refresh<\/code> \u0641\u0642\u0637 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 Paging \u0645\u06cc\u06af\u0647 \u0646\u0633\u0644 \u0641\u0639\u0644\u06cc \u062f\u0627\u062f\u0647 \u0628\u0627\u06cc\u062f \u062a\u0627\u0632\u0647 \u0628\u0634\u0647. \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0639\u062f \u0627\u0632 \u0627\u0648\u0646 \u0686\u0647 \u0645\u0646\u0628\u0639\u06cc \u0648\u0627\u0631\u062f \u0639\u0645\u0644 \u0628\u0634\u0647\u060c \u0628\u0647 \u0645\u0639\u0645\u0627\u0631\u06cc <code>Pager<\/code> \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647. \u0627\u06af\u0631 PagingSource \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 API \u0648\u0635\u0644 \u0628\u0627\u0634\u0647\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u0628\u06a9\u0647 \u0627\u0632 \u0647\u0645\u0648\u0646 \u0645\u0633\u06cc\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc Offline First \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c <code>RemoteMediator<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u0628\u06a9\u0647 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u0645\u06cc\u200c\u0646\u0648\u06cc\u0633\u0647. UI \u0647\u0645\u0686\u0646\u0627\u0646 \u062f\u0627\u062f\u0647 \u0631\u0648 \u0627\u0632 <code>PagingSource<\/code> \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Room \u0645\u06cc\u200c\u062e\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0645\u0633\u06cc\u0631 Refresh \u0645\u0627 \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a:<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\"><strong>Pull to Refresh \u2192 Paging Refresh \u2192 RemoteMediator \u2192 API \u2192 Room \u2192 PagingSource \u2192 Compose<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u062f\u0631 RemoteMediator<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a <code>LoadType.REFRESH<\/code> \u0648\u0627\u0631\u062f <code>RemoteMediator<\/code> \u0645\u06cc\u0634\u0647\u060c \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u0645 \u0627\u0632 \u06a9\u062c\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647 \u0634\u0631\u0648\u0639 \u0628\u0634\u0647. \u062f\u0631 \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u06cc\u0646 \u0645\u062f\u0644 Page Number\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0646\u0642\u0637\u0647 \u0634\u0631\u0648\u0639\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val page = when (loadType) {\n    LoadType.REFRESH -> 1\n    LoadType.APPEND -> nextPage()\n    LoadType.PREPEND -> return endOfPagination()\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> page <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">when<\/span><span style=\"color: #24292E\"> (loadType) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    LoadType.REFRESH <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    LoadType.APPEND <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">nextPage<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    LoadType.PREPEND <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">endOfPagination<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u062e\u0634 \u062f\u0627\u062e\u0644 <code>RemoteMediator<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0648\u0638\u06cc\u0641\u0647 \u0627\u0648\u0646 \u062a\u0634\u062e\u06cc\u0635 \u0635\u0641\u062d\u0647 \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0627\u06cc \u0646\u0648\u0639 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 Refresh \u0647\u0645\u06cc\u0634\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0646\u06cc\u0633\u062a \u06a9\u0647 \u06a9\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u067e\u0627\u06a9 \u0628\u0634\u0647. \u0627\u06cc\u0646\u06a9\u0647 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0647 \u06cc\u06a9 \u062a\u0635\u0645\u06cc\u0645\u0647 \u0648 \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u062d\u0630\u0641 \u0628\u0634\u0646 \u062a\u0635\u0645\u06cc\u0645\u06cc \u062c\u062f\u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u062f\u0631 Refresh \u0628\u0627\u06cc\u062f Room \u0631\u0648 \u067e\u0627\u06a9 \u06a9\u0646\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645\u200c\u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc\u0647. \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u06cc\u0646 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 Refresh\u060c \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a Cache\u200c\u0634\u062f\u0647 \u067e\u0627\u06a9 \u0628\u0634\u0646 \u0648 \u0628\u0639\u062f \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u062f\u0648\u0628\u0627\u0631\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647. \u0627\u0645\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0686\u0646\u062f \u0645\u0634\u06a9\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644 \u0627\u06cc\u0646\u06a9\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0627\u06cc \u0644\u062d\u0638\u0647\u200c\u0627\u06cc \u0644\u06cc\u0633\u062a \u062e\u0627\u0644\u06cc \u0628\u0634\u0647 \u0648 UI \u0686\u0634\u0645\u06a9 \u0628\u0632\u0646\u0647. \u062f\u0648\u0645 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0635\u0641\u062d\u0627\u062a \u0632\u06cc\u0627\u062f\u06cc \u0631\u0648 \u0642\u0628\u0644\u0627\u064b \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0627 \u067e\u0627\u06a9 \u0634\u062f\u0646 \u062c\u062f\u0648\u0644 \u0647\u0645\u0647 \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0627\u0632 \u062f\u0633\u062a \u0645\u06cc\u062f\u0647. \u0633\u0648\u0645 \u0627\u06cc\u0646\u06a9\u0647 \u0634\u0627\u06cc\u062f \u062f\u0631 \u0647\u0645\u0627\u0646 \u062c\u062f\u0648\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0644\u06cc \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u0631\u0633\u0627\u0644\u200c\u0646\u0634\u062f\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646 \u0641\u06a9\u0631 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (loadType == LoadType.REFRESH) {\n    productDao.clearAll()\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (loadType <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> LoadType.REFRESH) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    productDao.<\/span><span style=\"color: #6F42C1\">clearAll<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0648\u0627\u0642\u0639\u06cc \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u0627\u0645\u0646\u0647 \u06a9\u0647 \u062c\u062f\u0648\u0644 \u0648\u0627\u0642\u0639\u0627\u064b \u06cc\u06a9 Cache \u0642\u0627\u0628\u0644 \u062d\u0630\u0641 \u0628\u0627\u0634\u0647 \u0648 \u0647\u06cc\u0686 \u062f\u0627\u062f\u0647 \u0645\u062d\u0644\u06cc \u0645\u0647\u0645\u06cc \u062f\u0627\u062e\u0644 \u0627\u0648\u0646 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0646\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0628\u0647\u062a\u0631\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0631\u06cc\u0627\u0641\u062a\u06cc \u0627\u0632 \u0633\u0631\u0648\u0631 \u0628\u0627 <code>upsert<\/code> \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0634\u0646 \u0648 \u062d\u0630\u0641\u200c\u0647\u0627 \u0647\u0645 \u0628\u0631\u0627\u0633\u0627\u0633 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0645\u0634\u062e\u0635 \u0633\u0631\u0648\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0646. \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u0645\u0644 \u062c\u062f\u0648\u0644 \u0641\u0642\u0637 \u0648\u0642\u062a\u06cc \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0637\u0645\u0626\u0646 \u0628\u0627\u0634\u06cc\u0645 \u062a\u0645\u0627\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0648\u0631\u062f\u0646\u06cc\u0627\u0632 \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646 \u0648 \u0647\u06cc\u0686 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062d\u0644\u06cc \u0627\u0632 \u0628\u06cc\u0646 \u0646\u0645\u06cc\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Upsert \u0647\u0646\u06af\u0627\u0645 Refresh<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0633\u0631\u0648\u0631 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647\u060c Repository \u06cc\u0627 RemoteMediator \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0622\u06cc\u062a\u0645\u200c\u0647\u0627\u06cc \u062a\u0627\u0632\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u062f\u0631\u062c \u06cc\u0627 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>productDao.upsertAll(\n    response.items.map(ProductDto::toEntity)\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">productDao.<\/span><span style=\"color: #6F42C1\">upsertAll<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    response.items.<\/span><span style=\"color: #6F42C1\">map<\/span><span style=\"color: #24292E\">(ProductDto::<\/span><span style=\"color: #6F42C1\">toEntity<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>upsertAll<\/code> \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0645\u062d\u0635\u0648\u0644 \u062c\u062f\u06cc\u062f \u062f\u0631\u062c \u0648 \u0645\u062d\u0635\u0648\u0644 \u0645\u0648\u062c\u0648\u062f \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0634\u0647. \u0627\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0631 \u0644\u0627\u06cc\u0647 Data \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 Upsert \u0628\u0647\u200c\u062a\u0646\u0647\u0627\u06cc\u06cc \u062d\u0630\u0641\u200c\u0647\u0627\u06cc \u0633\u0631\u0648\u0631 \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0646\u0645\u06cc\u062f\u0647. \u0627\u06af\u0631 \u0645\u062d\u0635\u0648\u0644\u06cc \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u062d\u0630\u0641 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0686\u0648\u0646 \u062f\u06cc\u06af\u0647 \u062f\u0631 \u067e\u0627\u0633\u062e \u0646\u06cc\u0633\u062a\u060c \u0646\u0633\u062e\u0647 \u0642\u062f\u06cc\u0645\u06cc \u0627\u0648\u0646 \u0645\u0645\u06a9\u0646\u0647 \u0647\u0645\u0686\u0646\u0627\u0646 \u062f\u0627\u062e\u0644 Room \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647. \u0628\u0631\u0627\u06cc \u062d\u0644 \u0627\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647\u060c Backend \u0628\u0627\u06cc\u062f \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0645\u0646\u0627\u0633\u0628\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u061b \u0645\u062b\u0644\u0627\u064b \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062d\u0630\u0641\u200c\u0634\u062f\u0647 \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647\u060c \u0632\u0645\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u0646\u0647 \u06cc\u0627 Refresh \u06a9\u0627\u0645\u0644 \u06cc\u06a9 Scope \u0645\u0634\u062e\u0635 \u0631\u0648 \u0641\u0631\u0627\u0647\u0645 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u06a9\u0627\u0645\u0644 \u06cc\u0627 Incremental Sync\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Refresh \u06a9\u0627\u0645\u0644\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u06cc\u06a9 \u0645\u062d\u062f\u0648\u062f\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u0646\u0633\u062e\u0647 \u0645\u062d\u0644\u06cc \u0631\u0648 \u0628\u0627 \u0627\u0648\u0646 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u0647\u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f \u0647\u0632\u06cc\u0646\u0647 \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 Incremental Sync\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u06cc\u06af\u0647 \u0641\u0642\u0637 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0639\u062f \u0627\u0632 \u06cc\u06a9 \u0632\u0645\u0627\u0646 \u06cc\u0627 \u0646\u0633\u062e\u0647 \u0645\u0634\u062e\u0635 \u0631\u0648 \u0628\u0631\u06af\u0631\u062f\u0648\u0646. \u0645\u062b\u0644\u0627\u064b \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u06cc \u06a9\u0647 \u0628\u0639\u062f \u0627\u0632 \u0622\u062e\u0631\u06cc\u0646 Sync \u0627\u0636\u0627\u0641\u0647\u060c \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06cc\u0627 \u062d\u0630\u0641 \u0634\u062f\u0646. \u0627\u0632 \u0646\u0638\u0631 \u0645\u0641\u0647\u0648\u0645\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 \u0632\u0645\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0647\u0645\u0627\u0647\u0646\u06af\u06cc \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>api.getProductChanges(\n    updatedAfter = lastSyncedAt\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">api.<\/span><span style=\"color: #6F42C1\">getProductChanges<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    updatedAfter <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> lastSyncedAt<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u062f\u0631 API \u06cc\u0627 Repository \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u0641\u0642\u0637 \u062a\u0641\u0627\u0648\u062a\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u0627\u0648\u0644\u06cc\u0647 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c Refresh \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u06cc\u0627 Refresh \u0645\u0639\u0645\u0648\u0644 Paging \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u0647. \u0627\u0645\u0627 \u0648\u0642\u062a\u06cc \u062a\u0639\u062f\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0632\u06cc\u0627\u062f \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u062d\u062f\u0648\u062f \u0628\u0627\u0634\u0646\u060c Incremental Sync \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0635\u0631\u0641 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648 \u0641\u0634\u0627\u0631 \u0633\u0631\u0648\u0631 \u0631\u0648 \u0628\u0633\u06cc\u0627\u0631 \u06a9\u0645\u062a\u0631 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u062f\u0631 \u0644\u06cc\u0633\u062a \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647 \u0686\u0647 \u0628\u0644\u0627\u06cc\u06cc \u0633\u0631 \u0635\u0641\u062d\u0627\u062a \u0642\u0628\u0644\u06cc \u0645\u06cc\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062a\u0627 \u0645\u062d\u0635\u0648\u0644 \u0634\u0645\u0627\u0631\u0647 \u06f2\u06f0\u06f0 \u067e\u0627\u06cc\u06cc\u0646 \u0631\u0641\u062a\u0647 \u0648 \u0628\u0639\u062f Refresh \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062d\u0627\u0644\u0627 \u0645\u0645\u06a9\u0646\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062c\u062f\u06cc\u062f\u06cc \u0628\u0647 \u0627\u0628\u062a\u062f\u0627\u06cc \u0644\u06cc\u0633\u062a \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u0628\u0627\u0634\u0646 \u06cc\u0627 \u062a\u0639\u062f\u0627\u062f\u06cc \u0627\u0632 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062d\u0630\u0641 \u0634\u062f\u0647 \u0628\u0627\u0634\u0646. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0648\u0642\u0639\u06cc\u062a \u0639\u062f\u062f\u06cc \u0622\u06cc\u062a\u0645\u200c\u0647\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Paging \u062a\u0644\u0627\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Refresh Key \u0646\u0642\u0637\u0647 \u0645\u0646\u0627\u0633\u0628\u06cc \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u062c\u062f\u062f \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647 \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u0628\u0647 \u0627\u0628\u062a\u062f\u0627\u06cc \u0644\u06cc\u0633\u062a \u067e\u0631\u062a\u0627\u0628 \u0646\u0634\u0647. Refresh \u062f\u0631 Paging \u0628\u0647 \u0645\u0639\u0646\u06cc \u062a\u0644\u0627\u0634 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062d\u0648\u0644 \u0646\u0642\u0637\u0647 \u0645\u0646\u0627\u0633\u0628 \u0641\u0639\u0644\u06cc\u0647\u060c \u0646\u0647 \u0627\u0644\u0632\u0627\u0645\u0627\u064b \u0628\u0627\u0632\u06af\u0634\u062a \u0642\u0637\u0639\u06cc \u0628\u0647 \u0627\u0648\u0644\u06cc\u0646 \u0622\u06cc\u062a\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u062d\u0641\u0638 \u062f\u0642\u06cc\u0642 \u0645\u0648\u0642\u0639\u06cc\u062a \u0647\u0645\u06cc\u0634\u0647 \u062a\u0636\u0645\u06cc\u0646\u200c\u0634\u062f\u0647 \u0646\u06cc\u0633\u062a\u061b \u0686\u0648\u0646 \u0627\u06af\u0631 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u06cc\u0627 \u062a\u0631\u062a\u06cc\u0628 \u0627\u0648\u0646\u200c\u0647\u0627 \u0648\u0627\u0642\u0639\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0646\u060c \u0622\u06cc\u062a\u0645 \u0642\u0628\u0644\u06cc \u0645\u0645\u06a9\u0646\u0647 \u062c\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0647 \u06cc\u0627 \u062d\u0630\u0641 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0639\u062f \u0627\u0632 Refresh \u0628\u0647 \u0628\u0627\u0644\u0627\u06cc \u0635\u0641\u062d\u0647 \u0628\u0631\u06cc\u0645 \u06cc\u0627 \u0647\u0645\u0648\u0646\u200c\u062c\u0627 \u0628\u0645\u0648\u0646\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9 \u062a\u0635\u0645\u06cc\u0645 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc\u0647. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0633\u062a\u06cc Pull to Refresh \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u0647\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0646\u062a\u0638\u0627\u0631 \u0646\u062f\u0627\u0631\u0647 \u0628\u0647\u200c\u0632\u0648\u0631 \u0628\u0647 \u0627\u0628\u062a\u062f\u0627\u06cc \u0644\u06cc\u0633\u062a \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0628\u0634\u0647\u061b \u0645\u062e\u0635\u0648\u0635\u0627\u064b \u0627\u06af\u0631 \u062f\u0631 \u0645\u06cc\u0627\u0646\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0631\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 \u062c\u0627\u06cc \u0641\u0639\u0644\u06cc \u062a\u0627 \u062d\u062f \u0627\u0645\u06a9\u0627\u0646 \u062d\u0641\u0638 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u062e\u0648\u0627\u062f \u0628\u0639\u062f \u0627\u0632 Refresh \u0645\u062d\u0635\u0648\u0644 \u062c\u062f\u06cc\u062f \u0628\u0627\u0644\u0627\u06cc \u0644\u06cc\u0633\u062a \u0631\u0648 \u0628\u0631\u062c\u0633\u062a\u0647 \u06a9\u0646\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u067e\u06cc\u0627\u0645 \u06a9\u0648\u0686\u06a9\u06cc \u0645\u062b\u0644 \u06f3 \u0645\u062d\u0635\u0648\u0644 \u062c\u062f\u06cc\u062f \u0627\u0636\u0627\u0641\u0647 \u0634\u062f \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647 \u0648 \u062f\u06a9\u0645\u0647\u200c\u0627\u06cc \u0628\u0631\u0627\u06cc \u0631\u0641\u062a\u0646 \u0628\u0647 \u0628\u0627\u0644\u0627 \u0627\u0631\u0627\u0626\u0647 \u06a9\u0646\u0647. \u0627\u062c\u0631\u0627\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 <code>scrollToItem(0)<\/code> \u0628\u0639\u062f \u0627\u0632 \u0647\u0631 Refresh \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062a\u062c\u0631\u0628\u0647 \u062e\u0648\u0628\u06cc \u0646\u06cc\u0633\u062a\u060c \u0645\u06af\u0631 \u0627\u06cc\u0646\u06a9\u0647 \u0645\u0627\u0647\u06cc\u062a \u0635\u0641\u062d\u0647 \u0645\u062b\u0644 Feed \u062e\u0628\u0631\u06cc \u0628\u0627\u0634\u0647 \u0648 \u062a\u0635\u0645\u06cc\u0645 \u0645\u062d\u0635\u0648\u0644 \u0647\u0645 \u062f\u0642\u06cc\u0642\u0627\u064b \u0647\u0645\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0631\u0648 \u0628\u062e\u0648\u0627\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 Refresh \u0628\u0627\u06cc\u062f \u062c\u0633\u062a\u062c\u0648 \u0648 Sort \u0631\u0648 \u067e\u0627\u06a9 \u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u06cc\u0631. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0639\u0628\u0627\u0631\u062a \u0634\u06cc\u0631 \u0631\u0648 \u062c\u0633\u062a\u062c\u0648 \u06a9\u0631\u062f\u0647 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0631\u0648\u06cc \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0647\u060c Refresh \u0628\u0627\u06cc\u062f \u0647\u0645\u0627\u0646 \u062c\u0631\u06cc\u0627\u0646 \u0631\u0648 \u062a\u0627\u0632\u0647 \u06a9\u0646\u0647. \u06cc\u0639\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062c\u062f\u06cc\u062f \u0628\u0627\u06cc\u062f \u0647\u0645\u0686\u0646\u0627\u0646 Query \u0648 Sort \u0641\u0639\u0644\u06cc \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0646\u0628\u0627\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f \u0627\u0632 \u067e\u0627\u06cc\u06cc\u0646 \u06a9\u0634\u06cc\u062f\u0646 \u0635\u0641\u062d\u0647 \u0646\u0627\u06af\u0647\u0627\u0646 \u0628\u0647 \u0641\u0647\u0631\u0633\u062a \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0627 \u062a\u0631\u062a\u06cc\u0628 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0628\u0631\u06af\u0631\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0648\u06cc\u062a \u062c\u0631\u06cc\u0627\u0646 Paging \u0647\u0645\u0686\u0646\u0627\u0646 \u0627\u0632 \u0634\u0631\u0627\u06cc\u0637 \u0641\u0639\u0644\u06cc \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>repository.pagedProducts(\n    query = currentQuery,\n    sort = currentSort,\n    categoryId = selectedCategoryId\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">repository.<\/span><span style=\"color: #6F42C1\">pagedProducts<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    query <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> currentQuery,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    sort <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> currentSort,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    categoryId <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> selectedCategoryId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u062f\u0627\u062e\u0644 ViewModel \u06cc\u0627 \u0645\u0633\u06cc\u0631 \u0633\u0627\u062e\u062a Pager \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. Refresh \u0641\u0642\u0637 \u0647\u0645\u06cc\u0646 \u062c\u0631\u06cc\u0627\u0646 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647\u061b \u0634\u0631\u0627\u06cc\u0637 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u0648 Cache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Room \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0647\u0646\u06af\u0627\u0645 Refresh \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u0647\u0645\u0686\u0646\u0627\u0646 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0628\u0627\u0634\u0646. \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062d\u062a\u06cc \u0628\u0627 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0636\u0639\u06cc\u0641 \u0647\u0645 \u0635\u0641\u062d\u0647 \u0631\u0648 \u062e\u0627\u0644\u06cc \u0646\u06a9\u0646\u0647. \u0627\u0645\u0627 Refresh \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0648\u062c\u0648\u062f Cache \u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647. Cache \u0645\u0645\u06a9\u0646\u0647 \u0642\u062f\u06cc\u0645\u06cc \u0628\u0627\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0628\u06cc\u0646 \u0646\u0645\u0627\u06cc\u0634 \u0633\u0631\u06cc\u0639 \u062f\u0627\u062f\u0647 \u0642\u062f\u06cc\u0645\u06cc \u0648 \u062a\u0644\u0627\u0634 \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647 \u062a\u0627\u0632\u0647 \u062a\u0641\u0627\u0648\u062a \u0642\u0627\u0626\u0644 \u0628\u0634\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u06af\u0648\u06cc \u0645\u0646\u0627\u0633\u0628 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u0628\u062a\u062f\u0627 \u062f\u0627\u062f\u0647 Room \u0641\u0648\u0631\u0627\u064b \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647 \u0648 \u0628\u0639\u062f Refresh \u0634\u0628\u06a9\u0647\u200c\u0627\u06cc \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647. \u0627\u06af\u0631 \u0634\u0628\u06a9\u0647 \u0645\u0648\u0641\u0642 \u0628\u0648\u062f Room \u062a\u0627\u0632\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u060c \u062f\u0627\u062f\u0647 \u0642\u0628\u0644\u06cc \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u0627\u0632 \u062e\u0637\u0627 \u0645\u0637\u0644\u0639 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0637\u0627\u06cc Refresh \u0648\u0642\u062a\u06cc \u062f\u0627\u062f\u0647 \u0642\u0628\u0644\u06cc \u062f\u0627\u0631\u06cc\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0646\u060c \u06a9\u0627\u0631\u0628\u0631 Refresh \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0634\u062f\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0646\u0628\u0627\u06cc\u062f \u06a9\u0644 \u0644\u06cc\u0633\u062a \u0628\u0627 \u0635\u0641\u062d\u0647 \u062e\u0637\u0627 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0628\u0634\u0647\u060c \u0686\u0648\u0646 \u062f\u0627\u062f\u0647 \u0642\u0628\u0644\u06cc \u0647\u0646\u0648\u0632 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0633\u062a. \u0628\u0647\u062a\u0631\u0647 \u06cc\u06a9 Snackbar \u06cc\u0627 \u067e\u06cc\u0627\u0645 \u06a9\u0648\u0686\u06a9 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645: \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062a\u0627\u0632\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u0634\u062f. \u0646\u0633\u062e\u0647 \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0647\u0645\u0686\u0646\u0627\u0646 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0644\u06cc\u0633\u062a \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0628\u062a\u0648\u0646\u0647 \u0647\u0645\u0686\u0646\u0627\u0646 \u062c\u0633\u062a\u062c\u0648\u060c \u0645\u0634\u0627\u0647\u062f\u0647 \u06cc\u0627 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0648 \u0627\u062f\u0627\u0645\u0647 \u0628\u062f\u0647. \u0627\u06cc\u0646 \u0628\u0627 \u062d\u0627\u0644\u062a\u06cc \u0641\u0631\u0642 \u062f\u0627\u0631\u0647 \u06a9\u0647 \u0627\u0648\u0644\u06cc\u0646 \u0628\u0627\u0631 \u0635\u0641\u062d\u0647 \u0628\u0627\u0632 \u0634\u062f\u0647\u060c Room \u062e\u0627\u0644\u06cc\u0647 \u0648 API \u0647\u0645 \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647. \u062f\u0631 \u0627\u0648\u0646 \u062d\u0627\u0644\u062a \u0648\u0627\u0642\u0639\u0627\u064b \u0647\u06cc\u0686 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0646\u062f\u0627\u0631\u06cc\u0645 \u0648 \u0646\u0645\u0627\u06cc\u0634 Error \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u0645\u0646\u0637\u0642\u06cc\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0634\u062e\u06cc\u0635 \u062e\u0637\u0627\u06cc Refresh \u062f\u0631 Paging<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0636\u0639\u06cc\u062a Refresh \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 <code>Loading<\/code>\u060c <code>Error<\/code> \u06cc\u0627 <code>NotLoading<\/code> \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0627\u0635\u0644\u06cc \u062a\u0635\u0645\u06cc\u0645\u200c\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val refreshState = products.loadState.refresh\n\nif (\n    refreshState is LoadState.Error &amp;&amp;\n    products.itemCount > 0\n) {\n    ShowRefreshError(refreshState.error)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> refreshState <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> products.loadState.refresh<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    refreshState <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.Error <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    products.itemCount <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">ShowRefreshError<\/span><span style=\"color: #24292E\">(refreshState.error)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u062f\u0631 \u0644\u0627\u06cc\u0647 UI \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0634\u0631\u0637 <code>itemCount > 0<\/code> \u0645\u06cc\u06af\u0647 \u0647\u0646\u0648\u0632 \u062f\u0627\u062f\u0647 \u0642\u0628\u0644\u06cc \u062f\u0627\u0631\u06cc\u0645\u060c \u067e\u0633 \u062e\u0637\u0627 \u0628\u0627\u06cc\u062f \u063a\u06cc\u0631\u0645\u0633\u062f\u0648\u062f\u06a9\u0646\u0646\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u0627\u06af\u0631 \u062a\u0639\u062f\u0627\u062f \u0622\u06cc\u062a\u0645\u200c\u0647\u0627 \u0635\u0641\u0631 \u0628\u0627\u0634\u0647\u060c \u0647\u0645\u0648\u0646 \u062e\u0637\u0627 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0647 Error \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u0628\u0627\u06cc\u062f \u062e\u0637\u0627\u06cc Refresh \u062f\u0627\u0626\u0645\u0627\u064b \u062a\u06a9\u0631\u0627\u0631 \u0628\u0634\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Compose \u0645\u0645\u06a9\u0646\u0647 \u0686\u0646\u062f \u0628\u0627\u0631 Recompose \u0628\u0634\u0647. \u0627\u06af\u0631 \u062f\u0631 \u0628\u062f\u0646\u0647 Composable \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0627 \u062f\u06cc\u062f\u0646 <code>LoadState.Error<\/code> \u0647\u0631 \u0628\u0627\u0631 Snackbar \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645\u060c \u0645\u0645\u06a9\u0646\u0647 \u06cc\u06a9 \u062e\u0637\u0627 \u0686\u0646\u062f \u0628\u0627\u0631 \u0638\u0627\u0647\u0631 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0648\u0627\u06a9\u0646\u0634\u200c\u0647\u0627\u06cc \u06cc\u06a9\u200c\u0628\u0627\u0631\u0647 \u0628\u0647\u062a\u0631\u0647 \u0627\u0632 <code>LaunchedEffect<\/code> \u06cc\u0627 \u06cc\u06a9 Event \u06a9\u0646\u062a\u0631\u0644\u200c\u0634\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>LaunchedEffect(refreshState) {\n    if (\n        refreshState is LoadState.Error &amp;&amp;\n        products.itemCount > 0\n    ) {\n        onRefreshError(refreshState.error)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">LaunchedEffect<\/span><span style=\"color: #24292E\">(refreshState) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        refreshState <\/span><span style=\"color: #D73A49\">is<\/span><span style=\"color: #24292E\"> LoadState.Error <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        products.itemCount <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">onRefreshError<\/span><span style=\"color: #24292E\">(refreshState.error)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0628\u062e\u0634 \u062f\u0631 Compose \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u062a\u063a\u06cc\u06cc\u0631 State \u0631\u0648 \u0628\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f \u0646\u0645\u0627\u06cc\u0634\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. <code>onRefreshError<\/code> \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Snackbar \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647 \u06cc\u0627 \u067e\u06cc\u0627\u0645 \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0628\u0647 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0635\u0641\u062d\u0647 \u062a\u062d\u0648\u06cc\u0644 \u0628\u062f\u0647. \u0647\u062f\u0641 \u0627\u06cc\u0646\u0647 \u06a9\u0647 State \u067e\u0627\u06cc\u062f\u0627\u0631 \u0628\u0627 Event \u06cc\u06a9\u200c\u0628\u0627\u0631\u0647 \u0627\u0634\u062a\u0628\u0627\u0647 \u06af\u0631\u0641\u062a\u0647 \u0646\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u062e\u0648\u062f\u06a9\u0627\u0631 \u0647\u0646\u06af\u0627\u0645 \u0648\u0631\u0648\u062f \u0628\u0647 \u0635\u0641\u062d\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u06a9\u0627\u0631\u0628\u0631 \u062f\u0633\u062a\u06cc \u0635\u0641\u062d\u0647 \u0631\u0648 \u067e\u0627\u06cc\u06cc\u0646 \u0628\u06a9\u0634\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0647\u0646\u06af\u0627\u0645 \u0648\u0631\u0648\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647 \u06a9\u0647 Cache \u0686\u0642\u062f\u0631 \u0642\u062f\u06cc\u0645\u06cc\u0647 \u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 Refresh \u0631\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0634\u0631\u0648\u0639 \u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u0622\u062e\u0631\u06cc\u0646 Sync \u0686\u0646\u062f \u062f\u0642\u06cc\u0642\u0647 \u0642\u0628\u0644 \u0628\u0648\u062f\u0647\u060c \u062f\u0627\u062f\u0647 Room \u0645\u0633\u062a\u0642\u06cc\u0645 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0647\u06cc\u0686 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a. \u0627\u06af\u0631 \u0686\u0646\u062f \u0633\u0627\u0639\u062a \u06af\u0630\u0634\u062a\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 Refresh \u0631\u0648 \u0634\u0631\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0646\u0637\u0642 \u062a\u0634\u062e\u06cc\u0635 \u0642\u062f\u06cc\u0645\u06cc \u0634\u062f\u0646 Cache \u062f\u0627\u062e\u0644 Repository \u06cc\u0627 RemoteMediator \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647\u060c \u0646\u0647 Compose:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val shouldRefresh =\n    currentTime - lastSyncedAt > cacheDuration\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> shouldRefresh <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    currentTime <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\"> lastSyncedAt <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> cacheDuration<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0641\u0642\u0637 \u0645\u0641\u0647\u0648\u0645 \u062a\u0635\u0645\u06cc\u0645\u200c\u06af\u06cc\u0631\u06cc \u0631\u0648 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647. <code>cacheDuration<\/code> \u0646\u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0639\u062f\u062f \u062a\u0635\u0627\u062f\u0641\u06cc \u0628\u0627\u0634\u0647\u061b \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u0633\u0627\u0633 \u0645\u06cc\u0632\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0648 \u0647\u0632\u06cc\u0646\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0639\u06cc\u06cc\u0646 \u0628\u0634\u0647. \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0648 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0633\u0631\u06cc\u0639\u200c\u062a\u0631 \u0627\u0632 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646\u060c \u067e\u0633 \u0632\u0645\u0627\u0646 \u0627\u0639\u062a\u0628\u0627\u0631 Cache \u0627\u0648\u0646\u200c\u0647\u0627 \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06a9\u0648\u062a\u0627\u0647\u200c\u062a\u0631 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 Refresh\u0647\u0627\u06cc \u067e\u06cc\u0627\u067e\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0686\u0646\u062f \u0628\u0627\u0631 \u067e\u0634\u062a\u200c\u0633\u0631\u0647\u0645 \u0635\u0641\u062d\u0647 \u0631\u0648 \u067e\u0627\u06cc\u06cc\u0646 \u0628\u06a9\u0634\u0647. \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0647\u0631 \u062d\u0631\u06a9\u062a \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0627\u0632\u0647 \u0648 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u0628\u0634\u0647. \u0648\u0642\u062a\u06cc <code>isRefreshing<\/code> \u0627\u0632 <code>loadState.refresh<\/code> \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0647\u060c \u062e\u0648\u062f UI \u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u0633\u062a. Paging \u0647\u0645 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc\u200c\u0647\u0627\u06cc \u062e\u0648\u062f\u0634 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0648\u0627\u0632\u06cc \u0628\u0631\u0627\u06cc \u0642\u0641\u0644 \u06a9\u0631\u062f\u0646 Refresh \u0628\u0633\u0627\u0632\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u06af\u0647 ViewModel \u0686\u0646\u062f \u0645\u0646\u0628\u0639 \u0645\u062e\u062a\u0644\u0641 \u0631\u0648 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 Refresh \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u0647\u062a\u0631\u0647 \u0645\u062d\u0627\u0641\u0638 \u062f\u0627\u062e\u0644\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if (_uiState.value.isRefreshing) return\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (_uiState.<\/span><span style=\"color: #D73A49\">value<\/span><span style=\"color: #24292E\">.isRefreshing) <\/span><span style=\"color: #D73A49\">return<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0634\u0631\u0637 \u062f\u0627\u062e\u0644 ViewModel \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u062c\u0644\u0648\u06cc \u0634\u0631\u0648\u0639 \u062f\u0648\u0628\u0627\u0631\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0647\u0645\u0627\u0647\u0646\u06af\u200c\u0634\u062f\u0647 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0648\u0642\u062a\u06cc \u0641\u0642\u0637 <code>products.refresh<\/code> \u0631\u0648 \u0635\u062f\u0627 \u0645\u06cc\u200c\u0632\u0646\u06cc\u0645\u060c \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0648\u0636\u0639\u06cc\u062a \u0647\u0645\u0648\u0646 LoadState \u062e\u0648\u062f Paging \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u0686\u0646\u062f \u0628\u062e\u0634 \u0635\u0641\u062d\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0641\u0642\u0637 \u062e\u0648\u062f \u0644\u06cc\u0633\u062a \u0631\u0648 \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0634\u0627\u06cc\u062f \u0628\u0627\u0644\u0627\u06cc \u0635\u0641\u062d\u0647 \u062a\u0639\u062f\u0627\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u060c \u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0644\u0627\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0642\u06cc\u0645\u062a \u06cc\u0627 \u0622\u062e\u0631\u06cc\u0646 \u0632\u0645\u0627\u0646 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0645 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a Refresh \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u0647 \u0622\u06cc\u0627 \u0647\u0645\u0647 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0627 \u0647\u0645 \u062a\u0627\u0632\u0647 \u0645\u06cc\u0634\u0646 \u06cc\u0627 \u0641\u0642\u0637 \u0644\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 ViewModel \u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a \u0647\u0645\u0627\u0647\u0646\u06af\u200c\u06a9\u0646\u0646\u062f\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun refresh() {\n    refreshProducts()\n    refreshSummary()\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">refresh<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">refreshProducts<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">refreshSummary<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u062f\u0627\u062e\u0644 ViewModel \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0647\u0631 \u062a\u0627\u0628\u0639 \u0645\u0633\u0626\u0648\u0644 \u0628\u062e\u0634 \u062e\u0648\u062f\u0634 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647\u060c \u0627\u0645\u0627 ViewModel \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0647 \u0686\u0646\u062f \u0639\u0645\u0644\u06cc\u0627\u062a \u0645\u0631\u062a\u0628\u0637 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u0647. \u062f\u0631 \u0686\u0646\u06cc\u0646 \u0634\u0631\u0627\u06cc\u0637\u06cc <code>isRefreshing<\/code> \u0647\u0645 \u0645\u0645\u06a9\u0646\u0647 \u062a\u0631\u06a9\u06cc\u0628\u06cc \u0627\u0632 \u0648\u0636\u0639\u06cc\u062a Paging \u0648 \u0648\u0636\u0639\u06cc\u062a Summary \u0628\u0627\u0634\u0647. Indicator \u0628\u0647\u062a\u0631\u0647 \u0632\u0645\u0627\u0646\u06cc \u0628\u0633\u062a\u0647 \u0628\u0634\u0647 \u06a9\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0627\u0635\u0644\u06cc \u0645\u0648\u0631\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u062a\u0645\u0627\u0645 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0646\u0647 \u0641\u0642\u0637 \u0627\u0648\u0644\u06cc\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u0645\u0648\u0641\u0642 \u0686\u0647 \u067e\u06cc\u0627\u0645\u06cc \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0642\u0639\u060c \u0628\u0639\u062f \u0627\u0632 Refresh \u0645\u0648\u0641\u0642 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0646\u0645\u0627\u06cc\u0634 \u067e\u06cc\u0627\u0645 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f \u0646\u06cc\u0633\u062a. \u0628\u0633\u062a\u0647 \u0634\u062f\u0646 Indicator \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062e\u0648\u062f\u0634 \u0628\u0627\u0632\u062e\u0648\u0631\u062f \u06a9\u0627\u0641\u06cc \u0645\u06cc\u062f\u0647. \u0627\u0645\u0627 \u0627\u06af\u0631 \u0647\u06cc\u0686 \u062a\u063a\u06cc\u06cc\u0631 \u0638\u0627\u0647\u0631\u06cc \u0627\u062a\u0641\u0627\u0642 \u0646\u06cc\u0641\u062a\u0647\u060c \u0645\u06cc\u0634\u0647 \u0632\u0645\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f \u06cc\u0627 \u062f\u0631 \u0634\u0631\u0627\u06cc\u0637 \u062e\u0627\u0635 \u067e\u06cc\u0627\u0645 \u06a9\u0648\u062a\u0627\u0647\u06cc \u0646\u0634\u0648\u0646 \u062f\u0627\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u0631\u0647\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647\u060c \u0647\u0631 \u0628\u0627\u0631 Snackbar \u0645\u0648\u0641\u0642\u06cc\u062a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645. \u067e\u06cc\u0627\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u0632\u0645\u0627\u0646\u06cc \u0627\u0631\u0632\u0634 \u062f\u0627\u0631\u0647 \u06a9\u0647 \u0646\u062a\u06cc\u062c\u0647 \u0628\u062f\u0648\u0646 \u0627\u0648\u0646 \u0645\u0628\u0647\u0645 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u062e\u0631\u06cc\u0646 \u0632\u0645\u0627\u0646 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0632\u0645\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 Sync \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0647\u0645 \u0628\u0631\u0627\u06cc \u062a\u0635\u0645\u06cc\u0645\u200c\u06af\u06cc\u0631\u06cc Cache \u0648 \u0647\u0645 \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0641\u06cc\u062f \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class SyncMetadata(\n    val lastSuccessfulSyncAt: Long?\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">SyncMetadata<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> lastSuccessfulSyncAt: <\/span><span style=\"color: #6F42C1\">Long<\/span><span style=\"color: #24292E\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u062f\u0644 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u0631 \u06cc\u06a9 \u062c\u062f\u0648\u0644 \u06a9\u0648\u0686\u06a9 Room \u06cc\u0627 DataStore \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647. \u0645\u0647\u0645\u0647 \u06a9\u0647 \u0632\u0645\u0627\u0646 \u0641\u0642\u0637 \u0628\u0639\u062f \u0627\u0632 Sync \u0645\u0648\u0641\u0642 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647. \u0627\u06af\u0631 Refresh \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u060c \u0646\u0628\u0627\u06cc\u062f <code>lastSuccessfulSyncAt<\/code> \u0631\u0648 \u0631\u0648\u06cc \u0632\u0645\u0627\u0646 \u0641\u0639\u0644\u06cc \u0628\u0630\u0627\u0631\u06cc\u0645\u060c \u0686\u0648\u0646 \u062f\u0631 \u0627\u0648\u0646 \u0635\u0648\u0631\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0627\u0634\u062a\u0628\u0627\u0647 \u062a\u0635\u0648\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062a\u0627\u0632\u0647 \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u0647\u0646\u06af\u0627\u0645 \u0622\u0641\u0644\u0627\u06cc\u0646 \u0628\u0648\u062f\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u0628\u0627\u0634\u0647\u060c Pull to Refresh \u0647\u0645\u0686\u0646\u0627\u0646 \u0645\u0645\u06a9\u0646\u0647 \u0627\u062c\u0631\u0627 \u0628\u0634\u0647\u060c \u0627\u0645\u0627 \u062f\u0627\u062f\u0647 \u062c\u062f\u06cc\u062f\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u0645\u06cc\u0634\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0633\u0631\u06cc\u0639 \u0648 \u0631\u0648\u0634\u0646 \u067e\u0627\u0633\u062e \u0628\u062f\u0647 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0639\u0644\u06cc \u0631\u0648 \u062d\u0641\u0638 \u06a9\u0646\u0647. \u0646\u0628\u0627\u06cc\u062f Room \u067e\u0627\u06a9 \u0628\u0634\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u0644\u06cc\u0633\u062a \u0646\u0627\u067e\u062f\u06cc\u062f \u0628\u0634\u0647 \u0648 \u0646\u0628\u0627\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0645\u062c\u0628\u0648\u0631 \u0628\u0634\u0647 \u0635\u0641\u062d\u0647 \u0631\u0648 \u062a\u0631\u06a9 \u06a9\u0646\u0647. \u0641\u0642\u0637 \u067e\u06cc\u0627\u0645 \u0645\u0646\u0627\u0633\u0628\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0628\u0639\u062f\u0627\u064b \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0686\u0646\u06cc\u0646 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 \u06cc\u06a9 \u0631\u0648\u0634 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0645\u0637\u0645\u0626\u0646 \u0628\u0634\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0627\u0642\u0639\u0627\u064b \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u062d\u062a\u06cc \u0627\u06af\u0631 \u0634\u0628\u06a9\u0647 \u0638\u0627\u0647\u0631\u0627\u064b \u0645\u062a\u0635\u0644 \u0628\u0627\u0634\u0647\u060c \u0633\u0631\u0648\u0631 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u0628\u0627\u0634\u0647. \u0645\u0646\u0628\u0639 \u0646\u0647\u0627\u06cc\u06cc \u062d\u0642\u06cc\u0642\u062a \u0647\u0645\u0686\u0646\u0627\u0646 \u0646\u062a\u06cc\u062c\u0647 \u0648\u0627\u0642\u0639\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u062d\u0644\u06cc \u0627\u0631\u0633\u0627\u0644\u200c\u0646\u0634\u062f\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644\u06cc \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0648 \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0647\u0646\u0648\u0632 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0646\u0634\u062f\u0647. \u062d\u0627\u0644\u0627 Refresh \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0646\u0633\u062e\u0647 \u0633\u0631\u0648\u0631 \u0628\u062f\u0648\u0646 \u062a\u0648\u062c\u0647 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062d\u0644\u06cc \u0631\u0648\u06cc Room \u0646\u0648\u0634\u062a\u0647 \u0628\u0634\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u0647. \u0627\u06cc\u0646\u062c\u0627 Refresh \u0648\u0627\u0631\u062f \u0645\u0633\u0626\u0644\u0647 Sync Conflict \u0645\u06cc\u0634\u0647. \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u0627\u0631\u0633\u0627\u0644\u200c\u0646\u0634\u062f\u0647 \u0628\u0627\u06cc\u062f \u0642\u0627\u0628\u0644 \u062a\u0634\u062e\u06cc\u0635 \u0628\u0627\u0634\u0646\u061b \u0645\u062b\u0644\u0627\u064b \u0628\u0627 \u0648\u0636\u0639\u06cc\u062a\u06cc \u0645\u062b\u0644 <code>PENDING_SYNC<\/code>. \u0647\u0646\u06af\u0627\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u0633\u062e\u0647 \u0633\u0631\u0648\u0631 \u0646\u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u0631\u06a9\u0648\u0631\u062f\u0647\u0627 \u06a9\u0648\u0631\u06a9\u0648\u0631\u0627\u0646\u0647 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0622\u0641\u0644\u0627\u06cc\u0646 \u062f\u0627\u0631\u0647\u060c Refresh \u0641\u0642\u0637 \u0633\u0631\u0648\u0631 \u0628\u0631\u0646\u062f\u0647 \u0627\u0633\u062a \u0646\u06cc\u0633\u062a. Repository \u0628\u0627\u06cc\u062f \u0633\u06cc\u0627\u0633\u062a \u062a\u0639\u0627\u0631\u0636 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647: \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062d\u0644\u06cc\u060c \u0627\u062f\u063a\u0627\u0645 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u060c \u0628\u0631\u0631\u0633\u06cc \u0646\u0633\u062e\u0647 \u06cc\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0635\u0645\u06cc\u0645 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0633\u062e\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634\u200c\u0647\u0627 \u0641\u0642\u0637 \u0622\u0646\u0644\u0627\u06cc\u0646 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0646\u060c \u0627\u06cc\u0646 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u06a9\u0645\u062a\u0631\u0647\u061b \u0627\u0645\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0627\u06cc\u062f \u0627\u0632 \u0647\u0645\u06cc\u0646 \u062d\u0627\u0644\u0627 \u0641\u0631\u0642 \u0628\u06cc\u0646 Cache \u0633\u0631\u0648\u0631 \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062d\u0644\u06cc \u0631\u0648 \u0628\u0634\u0646\u0627\u0633\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u0648 \u062d\u0630\u0641\u200c\u0647\u0627\u06cc \u0633\u0631\u0648\u0631<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Upsert \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062c\u062f\u06cc\u062f \u0648 \u0648\u06cc\u0631\u0627\u06cc\u0634\u200c\u0634\u062f\u0647 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u062d\u0630\u0641\u200c\u0647\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u062f\u0627\u0631\u0646. \u0627\u06af\u0631 \u0645\u062d\u0635\u0648\u0644 \u0634\u0645\u0627\u0631\u0647 \u06f5 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u062d\u0630\u0641 \u0634\u062f\u0647\u060c \u0646\u0628\u0648\u062f\u0646\u0634 \u062f\u0631 \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0644\u0632\u0648\u0645\u0627\u064b \u062b\u0627\u0628\u062a \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647 \u0628\u0627\u06cc\u062f \u0627\u0632 Room \u062d\u0630\u0641 \u0628\u0634\u0647\u061b \u0634\u0627\u06cc\u062f \u0641\u0642\u0637 \u062f\u0631 \u0635\u0641\u062d\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0647 \u0628\u0627\u0634\u0647. \u0628\u0631\u0627\u06cc \u062d\u0630\u0641 \u0645\u0637\u0645\u0626\u0646\u060c \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0634\u0646\u0627\u0633\u0647\u200c\u0647\u0627\u06cc \u062d\u0630\u0641\u200c\u0634\u062f\u0647 \u0631\u0648 \u062f\u0631 Sync Incremental \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647\u060c \u0641\u06cc\u0644\u062f <code>deletedAt<\/code> \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0646\u0633\u062e\u0647 \u06a9\u0627\u0645\u0644 \u06cc\u06a9 Scope \u0631\u0648 \u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u067e\u0627\u06cc\u0627\u0646 \u0627\u0631\u0627\u0626\u0647 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u062f\u0631 Pagination \u0645\u0647\u0645\u200c\u062a\u0631 \u0645\u06cc\u0634\u0647\u060c \u0686\u0648\u0646 \u06cc\u06a9 \u067e\u0627\u0633\u062e \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u0641\u0642\u0637 \u0628\u062e\u0634\u06cc \u0627\u0632 \u06a9\u0644 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u0633\u062a. \u0646\u0628\u0627\u06cc\u062f \u062a\u0645\u0627\u0645 \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u06cc \u0631\u0648 \u06a9\u0647 \u062f\u0631 \u067e\u0627\u0633\u062e \u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u0646\u06cc\u0633\u062a\u0646 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0647\u0631 \u0628\u062e\u0634<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Compose \u062d\u0631\u06a9\u062a Pull to Refresh\u060c Indicator \u0648 \u067e\u06cc\u0627\u0645 \u062e\u0637\u0627 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. \u0647\u0645\u0686\u0646\u06cc\u0646 <code>refresh<\/code>\u00a0\u06cc\u0627 Callback \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 ViewModel \u0631\u0648 \u0635\u062f\u0627 \u0645\u06cc\u200c\u0632\u0646\u0647\u060c \u0627\u0645\u0627 \u062e\u0648\u062f\u0634 \u0648\u0627\u0631\u062f API \u0648 Room \u0646\u0645\u06cc\u0634\u0647. Paging \u0648\u0636\u0639\u06cc\u062a Refresh \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u0648 \u062c\u0631\u06cc\u0627\u0646 \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc \u0641\u0639\u0644\u06cc \u0631\u0648 \u062a\u0627\u0632\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. ViewModel \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 Refresh \u0686\u0646\u062f \u0628\u062e\u0634 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0647\u0645\u0627\u0647\u0646\u06af \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Event\u0647\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634\u06cc \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RemoteMediator \u06cc\u0627 Repository \u062f\u0627\u062f\u0647 \u062a\u0627\u0632\u0647 \u0631\u0648 \u0627\u0632 API \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0633\u06cc\u0627\u0633\u062a Cache \u0648 \u062a\u0639\u0627\u0631\u0636 \u0631\u0648 \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Room \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. Room \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0628\u0644\u06cc \u0631\u0648 \u062a\u0627 \u0631\u0633\u06cc\u062f\u0646 \u0646\u0633\u062e\u0647 \u062a\u0627\u0632\u0647 \u062d\u0641\u0638 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631\u060c PagingSource \u0648 UI \u0631\u0648 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0648\u0627\u06a9\u0646\u0634\u06cc \u0628\u0647\u200c\u0631\u0648\u0632 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refresh \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0648 \u062f\u0627\u0646\u0644\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c \u06a9\u0627\u0631\u0628\u0631 \u0635\u0641\u062d\u0647 \u0631\u0648 \u067e\u0627\u06cc\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0634\u0647 \u0648 \u0686\u0646\u062f \u0644\u062d\u0638\u0647 \u0628\u0639\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062a\u0627\u0632\u0647 \u0638\u0627\u0647\u0631 \u0645\u06cc\u0634\u0646. \u0627\u0645\u0627 Refresh \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0628\u0627\u06cc\u062f \u0686\u0646\u062f \u0645\u0648\u0636\u0648\u0639 \u0631\u0648 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u0647: \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u0628\u0644\u06cc \u0646\u0628\u0627\u06cc\u062f \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u0646\u0627\u067e\u062f\u06cc\u062f \u0628\u0634\u0646\u060c \u062e\u0637\u0627\u06cc \u0634\u0628\u06a9\u0647 \u0646\u0628\u0627\u06cc\u062f \u06a9\u0644 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0627\u0632 \u06a9\u0627\u0631 \u0628\u0646\u062f\u0627\u0632\u0647\u060c \u062c\u0633\u062a\u062c\u0648 \u0648 \u0645\u0631\u062a\u0628\u200c\u0633\u0627\u0632\u06cc \u0641\u0639\u0644\u06cc \u0628\u0627\u06cc\u062f \u062d\u0641\u0638 \u0628\u0634\u0646 \u0648 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062a\u0627\u0632\u0647 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0645\u0633\u06cc\u0631 Room \u0648\u0627\u0631\u062f UI \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>Refresh \u06cc\u0639\u0646\u06cc \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647\u060c \u0646\u0647 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u062f\u0633\u062a\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc<\/strong>. Compose \u0641\u0642\u0637 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0648\u0636\u0639\u06cc\u062a \u0627\u0648\u0646 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. Repository \u0648 RemoteMediator \u0633\u0631\u0648\u0631 \u0648 Room \u0631\u0648 \u0647\u0645\u0627\u0647\u0646\u06af \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0648 UI \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u062f\u0627\u062f\u0647 \u0648\u0627\u06a9\u0646\u0634 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 Refresh \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0627\u0628\u062a\u062f\u0627\u06cc \u0644\u06cc\u0633\u062a \u0635\u0641\u062d\u0647 \u0631\u0648 \u067e\u0627\u06cc\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0634\u0647\u060c Paging \u062c\u0631\u06cc\u0627\u0646 \u0641\u0639\u0644\u06cc \u0631\u0648 Refresh \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c RemoteMediator \u0646\u0633\u062e\u0647 \u062a\u0627\u0632\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u062f\u0627\u062e\u0644 Room \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0642\u0628\u0644\u06cc \u062a\u0627 \u0632\u0645\u0627\u0646 \u0631\u0633\u06cc\u062f\u0646 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0646 \u0648 Compose \u0628\u0639\u062f \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631 Room\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062a\u0627\u0632\u0647 \u0631\u0648 \u0628\u062f\u0648\u0646 \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u062f\u0633\u062a\u06cc \u0644\u06cc\u0633\u062a \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u0628\u062e\u0634 \u067e\u0646\u062c\u0645 \u2014 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u0686\u0647\u0627\u0631\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0686\u0637\u0648\u0631 \u062d\u062a\u06cc \u0648\u0642\u062a\u06cc \u0628\u0627\u0632 \u0646\u06cc\u0633\u062a\u060c \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a\u060c \u062b\u0628\u062a \u0645\u062d\u0635\u0648\u0644 \u062c\u062f\u06cc\u062f \u06cc\u0627 \u0627\u062a\u0641\u0627\u0642\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u0628\u0627\u062e\u0628\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Notification<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0633\u0627\u062e\u062a\u06cc\u0645 \u0648\u0642\u062a\u06cc \u0645\u0639\u0646\u0627 \u062f\u0627\u0634\u062a\u0646 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u062d\u0636\u0648\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0631\u062f\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 Refresh \u0645\u06cc\u200c\u06a9\u0631\u062f\u060c \u062c\u0633\u062a\u062c\u0648 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u062f\u0627\u062f \u06cc\u0627 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u062f\u0627\u062f. \u0627\u0645\u0627 \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u0628\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0631\u062a\u0628\u0627\u0637 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u062e\u0648\u062f \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f\u0634 \u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0642\u06cc\u0645\u062a \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0647\u0645 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647\u060c \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0631\u062f\u0647\u060c \u06cc\u06a9 \u0642\u06cc\u0645\u062a \u062b\u0628\u062a\u200c\u0634\u062f\u0647 \u0631\u062f \u0634\u062f\u0647 \u06cc\u0627 \u0644\u0627\u0632\u0645 \u0634\u062f\u0647 \u0635\u0627\u062d\u0628 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u0627\u0642\u0635 \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u062a\u06a9\u0645\u06cc\u0644 \u06a9\u0646\u0647. \u0645\u0646\u0637\u0642\u06cc \u0646\u06cc\u0633\u062a \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u0626\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0646\u0647 \u0648 \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notification \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06cc\u06a9 \u0627\u062a\u0641\u0627\u0642 \u0645\u0647\u0645 \u0648 \u0645\u0631\u062a\u0628\u0637 \u0631\u0648 \u062e\u0627\u0631\u062c \u0627\u0632 \u0645\u062d\u06cc\u0637 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0637\u0644\u0627\u0639 \u0628\u062f\u0647. \u0627\u0639\u0644\u0627\u0646 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0646\u0648\u0627\u0631 \u0648\u0636\u0639\u06cc\u062a\u060c \u067e\u0646\u0644 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u06cc\u0627 \u0635\u0641\u062d\u0647 \u0642\u0641\u0644 \u062f\u06cc\u062f\u0647 \u0628\u0634\u0647 \u0648 \u0628\u0627 \u0644\u0645\u0633 \u0627\u0648\u0646\u060c \u06a9\u0627\u0631\u0628\u0631 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0648\u0627\u0631\u062f \u0628\u062e\u0634 \u0645\u0631\u062a\u0628\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 Notification \u0641\u0642\u0637 \u0646\u0645\u0627\u06cc\u0634 \u06cc\u06a9 \u0645\u062a\u0646 \u0628\u0627\u0644\u0627\u06cc \u06af\u0648\u0634\u06cc \u0646\u06cc\u0633\u062a. \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u06a9\u0627\u0645\u0644 \u0627\u0639\u0644\u0627\u0646 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 \u0686\u0646\u062f \u0628\u062e\u0634 \u062a\u0634\u06a9\u06cc\u0644 \u0645\u06cc\u0634\u0647: \u0633\u0631\u0648\u0631 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0627\u0641\u062a\u0627\u062f\u0647\u060c \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06af\u0627\u0647 \u0645\u0646\u0627\u0633\u0628 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0686\u0647 \u0627\u0639\u0644\u0627\u0646\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647 \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0644\u0645\u0633 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0647 \u0635\u0641\u062d\u0647 \u062f\u0631\u0633\u062a \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0639\u0644\u0627\u0646 \u0645\u062d\u0644\u06cc \u0648 \u0627\u0639\u0644\u0627\u0646 Push<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0647 Notification\u0647\u0627 \u0627\u0632 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0646\u0645\u06cc\u0627\u0646. \u062f\u0648 \u0646\u0648\u0639 \u06a9\u0644\u06cc \u0627\u0639\u0644\u0627\u0646 \u062f\u0627\u0631\u06cc\u0645. <strong>Local Notification<\/strong> \u062f\u0627\u062e\u0644 \u062e\u0648\u062f \u06af\u0648\u0634\u06cc \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a \u06f9 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647 \u0648 \u062f\u0631 \u0647\u0645\u0648\u0646 \u0632\u0645\u0627\u0646 \u06cc\u06a9 \u0627\u0639\u0644\u0627\u0646 \u0645\u062d\u0644\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. \u0627\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646 \u0644\u0632\u0648\u0645\u0627\u064b \u0628\u0647 \u0633\u0631\u0648\u0631 \u06cc\u0627 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0627\u0628\u0633\u062a\u0647 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Push Notification<\/strong> \u0627\u0632 \u0628\u06cc\u0631\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u0627\u062f. \u0645\u062b\u0644\u0627\u064b \u0633\u0631\u0648\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062b\u0628\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647 \u0648 \u0628\u0627\u06cc\u062f \u0635\u0627\u062d\u0628 \u0627\u0648\u0646 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0645\u0637\u0644\u0639 \u0628\u0634\u0647. \u0633\u0631\u0648\u0631 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0648\u0646 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u062a\u0645\u0631\u06a9\u0632 \u0627\u0635\u0644\u06cc \u0645\u0627 \u0631\u0648\u06cc Push Notification \u0627\u0633\u062a\u060c \u0686\u0648\u0646 \u0628\u06cc\u0634\u062a\u0631 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0647 \u0627\u062a\u0641\u0627\u0642\u200c\u0647\u0627\u06cc\u06cc \u0648\u0627\u0628\u0633\u062a\u0647\u200c\u0627\u0646 \u06a9\u0647 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0631\u062e \u0645\u06cc\u062f\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification \u0686\u0647 \u0645\u0633\u0626\u0644\u0647\u200c\u0627\u06cc \u0631\u0648 \u062d\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0639\u0644\u0627\u0646 \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0627\u062a\u0641\u0627\u0642\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647 \u06a9\u0647 \u0627\u0631\u0632\u0634 \u0642\u0637\u0639 \u06a9\u0631\u062f\u0646 \u062a\u0648\u062c\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631\u06cc \u0646\u0628\u0627\u06cc\u062f Notification \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642\u200c\u0647\u0627 \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0627\u0639\u0644\u0627\u0646 \u0645\u0646\u0627\u0633\u0628\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u062b\u0628\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647.<\/li>\n\n\n\n<li>\u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u0635\u0644\u0627\u062d \u062f\u0627\u0631\u0647.<\/li>\n\n\n\n<li>\u0642\u06cc\u0645\u062a \u062b\u0628\u062a\u200c\u0634\u062f\u0647 \u0631\u062f \u06cc\u0627 \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647.<\/li>\n\n\n\n<li>\u0645\u0648\u062c\u0648\u062f\u06cc \u06cc\u0627 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0645\u0647\u0645\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647.<\/li>\n\n\n\n<li>\u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a \u0637\u0648\u0644\u0627\u0646\u06cc \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u062a\u06a9\u0645\u06cc\u0644 \u0634\u062f\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 Room \u062e\u0648\u0646\u062f\u0647 \u0634\u062f\u0647 \u06cc\u0627 Sync \u0645\u0639\u0645\u0648\u0644\u06cc \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0631\u0632\u0634 \u0627\u0639\u0644\u0627\u0646 \u0646\u062f\u0627\u0631\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0627\u062a\u0641\u0627\u0642 \u06a9\u0648\u0686\u06a9 \u0627\u0639\u0644\u0627\u0646 \u0628\u0641\u0631\u0633\u062a\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u062e\u0627\u0645\u0648\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u06a9\u06cc\u0641\u06cc\u062a \u0648 \u0627\u0631\u062a\u0628\u0627\u0637 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0627\u0632 \u062a\u0639\u062f\u0627\u062f\u0634\u0648\u0646 \u0645\u0647\u0645\u200c\u062a\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification \u0628\u0627 \u067e\u06cc\u0627\u0645 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0631\u0642 \u062f\u0627\u0631\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u06cc\u0646 \u062d\u0627\u0644\u0627 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062d\u0636\u0648\u0631 \u062f\u0627\u0631\u0647 \u0648 \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0634\u0627\u06cc\u062f \u0646\u0645\u0627\u06cc\u0634 Snackbar \u06cc\u0627 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 UI \u06a9\u0627\u0641\u06cc \u0628\u0627\u0634\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u0634\u0631\u0627\u06cc\u0637\u060c \u0646\u0645\u0627\u06cc\u0634 Notification \u0633\u06cc\u0633\u062a\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0636\u0627\u0641\u0647 \u0648 \u0622\u0632\u0627\u0631\u062f\u0647\u0646\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notification \u0628\u06cc\u0634\u062a\u0631 \u0632\u0645\u0627\u0646\u06cc \u0627\u0631\u0632\u0634 \u062f\u0627\u0631\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u06cc\u0633\u062a \u06cc\u0627 \u062f\u0631 \u0635\u0641\u062d\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0647 \u0648 \u0628\u0627\u06cc\u062f \u0627\u0632 \u06cc\u06a9 \u0627\u062a\u0641\u0627\u0642 \u0645\u0647\u0645 \u0628\u0627\u062e\u0628\u0631 \u0628\u0634\u0647. \u067e\u0633 \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648\u0627\u062d\u062f \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0627\u0633\u0627\u0633 \u0648\u0636\u0639\u06cc\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u062f\u0648 \u0634\u06a9\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u067e\u06cc\u0634\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u0633\u062a\u060c UI \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u0634\u0647 \u06cc\u0627 \u067e\u06cc\u0627\u0645 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0648\u0642\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u06cc\u0627 \u0628\u0633\u062a\u0647 \u0627\u0633\u062a\u060c Notification \u0633\u06cc\u0633\u062a\u0645 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Firebase Cloud Messaging<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 Push Notification \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 <strong>Firebase Cloud Messaging<\/strong> \u06cc\u0627 FCM \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. FCM \u0628\u06cc\u0646 Backend \u0648 \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0633\u0631\u0648\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0647 FCM \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 FCM \u0645\u0633\u0626\u0648\u0644 \u062a\u062d\u0648\u06cc\u0644 \u0627\u0648\u0646 \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0631\u0648\u06cc \u062f\u0633\u062a\u06af\u0627\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u06a9\u0644\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0631\u0648\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06cc\u06a9 \u0627\u062a\u0641\u0627\u0642 \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647\u060c \u0634\u0646\u0627\u0633\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u06cc\u0627 \u06af\u0631\u0648\u0647 \u0645\u0642\u0635\u062f \u0631\u0648 \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0647 FCM \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647\u060c FCM \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0647 \u06af\u0648\u0634\u06cc \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0645\u062d\u062a\u0648\u0627\u06cc \u067e\u06cc\u0627\u0645 Notification \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FCM \u062e\u0648\u062f\u0634 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u0627 \u0646\u06cc\u0633\u062a \u0648 \u0646\u0628\u0627\u06cc\u062f \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u062a\u0639\u06cc\u06cc\u0646 \u06a9\u0646\u0647. \u0627\u0648\u0646 \u0641\u0642\u0637 \u0648\u0627\u0633\u0637\u0647 \u0627\u0646\u062a\u0642\u0627\u0644 \u067e\u06cc\u0627\u0645\u0647. \u062a\u0635\u0645\u06cc\u0645 \u0627\u06cc\u0646\u06a9\u0647 \u0686\u0647 \u06a9\u0633\u06cc\u060c \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0648 \u0686\u0647 \u0646\u0648\u0639 \u0627\u0639\u0644\u0627\u0646\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647\u060c \u0628\u0627\u06cc\u062f \u062f\u0631 Backend \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Token \u062f\u0633\u062a\u06af\u0627\u0647 \u0686\u06cc\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 FCM \u0628\u062f\u0648\u0646\u0647 \u067e\u06cc\u0627\u0645 \u0628\u0627\u06cc\u062f \u0628\u0647 \u06a9\u062f\u0648\u0645 \u0646\u0635\u0628 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0633\u0647\u060c \u0628\u0631\u0627\u06cc \u0647\u0631 App Instance \u06cc\u06a9 Registration Token \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 Token \u0645\u062b\u0644 \u0622\u062f\u0631\u0633 \u0645\u0648\u0642\u062a \u0627\u0648\u0646 \u0646\u0635\u0628 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Token \u0645\u0639\u0631\u0641 \u062e\u0648\u062f \u0627\u0646\u0633\u0627\u0646 \u0646\u06cc\u0633\u062a. \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0631\u0648\u06cc \u062f\u0648 \u06af\u0648\u0634\u06cc \u0648\u0627\u0631\u062f \u062d\u0633\u0627\u0628\u0634 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0647\u0631 \u062f\u0633\u062a\u06af\u0627\u0647 Token \u062c\u062f\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0647\u0645\u0686\u0646\u06cc\u0646 \u06cc\u06a9 \u06af\u0648\u0634\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0628\u0639\u062f \u0627\u0632 \u062d\u0630\u0641 \u0648 \u0646\u0635\u0628 \u0645\u062c\u062f\u062f \u0628\u0631\u0646\u0627\u0645\u0647 Token \u062c\u062f\u06cc\u062f\u06cc \u0628\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 Backend \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u06cc\u06a9 \u0641\u06cc\u0644\u062f \u0633\u0627\u062f\u0647 \u0645\u062b\u0644 <code>notificationToken<\/code> \u062f\u0627\u062e\u0644 \u062c\u062f\u0648\u0644 User \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 \u062f\u0633\u062a\u06af\u0627\u0647\u200c\u0647\u0627 \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u062c\u062f\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0627\u0632 \u0646\u0638\u0631 \u0645\u0641\u0647\u0648\u0645\u06cc\u060c \u0647\u0631 \u0631\u06a9\u0648\u0631\u062f \u062f\u0633\u062a\u06af\u0627\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0634\u0627\u0645\u0644 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0634\u0646\u0627\u0633\u0647 \u06a9\u0627\u0631\u0628\u0631<\/li>\n\n\n\n<li>FCM Token<\/li>\n\n\n\n<li>\u0646\u0648\u0639 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644<\/li>\n\n\n\n<li>\u0646\u0627\u0645 \u06cc\u0627 \u0645\u062f\u0644 \u062f\u0633\u062a\u06af\u0627\u0647<\/li>\n\n\n\n<li>\u0632\u0645\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 \u0641\u0639\u0627\u0644\u06cc\u062a<\/li>\n\n\n\n<li>\u0641\u0639\u0627\u0644 \u06cc\u0627 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 Token<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0633\u0627\u062e\u062a\u0627\u0631 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u0686\u0646\u062f \u062f\u0633\u062a\u06af\u0627\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0647\u0646\u06af\u0627\u0645 \u062e\u0631\u0648\u062c \u0627\u0632 \u062d\u0633\u0627\u0628 \u0641\u0642\u0637 Token \u0647\u0645\u0627\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0627\u0632 \u062d\u0633\u0627\u0628 \u062c\u062f\u0627 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062f\u0631\u06cc\u0627\u0641\u062a Token \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc Firebase Messaging\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 Token \u0641\u0639\u0644\u06cc \u0646\u0635\u0628 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>FirebaseMessaging.getInstance().token\n    .addOnSuccessListener { token ->\n        viewModel.onNotificationTokenReceived(token)\n    }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">FirebaseMessaging.<\/span><span style=\"color: #6F42C1\">getInstance<\/span><span style=\"color: #24292E\">().token<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">addOnSuccessListener<\/span><span style=\"color: #24292E\"> { token <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        viewModel.<\/span><span style=\"color: #6F42C1\">onNotificationTokenReceived<\/span><span style=\"color: #24292E\">(token)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0628\u0627\u06cc\u062f \u062f\u0631 \u0628\u062e\u0634\u06cc \u0627\u062c\u0631\u0627 \u0628\u0634\u0647 \u06a9\u0647 \u0645\u0633\u0626\u0648\u0644 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 Notification \u0627\u0633\u062a\u060c \u0646\u0647 \u062f\u0627\u062e\u0644 \u0647\u0631 Composable \u06cc\u0627 \u0647\u0631 \u0628\u0627\u0631 Recomposition.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0637 \u0645\u0647\u0645 \u0627\u06cc\u0646\u062c\u0627 <code>token<\/code> \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0645\u0642\u062f\u0627\u0631 \u0628\u0627\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 Login \u0628\u0647 Backend \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647 \u062a\u0627 \u0633\u0631\u0648\u0631 \u0628\u062f\u0648\u0646\u0647 \u0627\u06cc\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0628\u0647 \u06a9\u062f\u0648\u0645 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u062a\u0639\u0644\u0642 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel \u062e\u0648\u062f\u0634 \u0646\u0628\u0627\u06cc\u062f Retrofit \u0631\u0648 \u0635\u062f\u0627 \u0628\u0632\u0646\u0647. \u0641\u0642\u0637 Token \u0631\u0648 \u0628\u0647 Repository \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun onNotificationTokenReceived(token: String) {\n    viewModelScope.launch {\n        notificationRepository.registerDevice(token)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onNotificationTokenReceived<\/span><span style=\"color: #24292E\">(token: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    viewModelScope.<\/span><span style=\"color: #6F42C1\">launch<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        notificationRepository.<\/span><span style=\"color: #6F42C1\">registerDevice<\/span><span style=\"color: #24292E\">(token)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Repository \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062b\u0628\u062a \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647 \u0648 \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Token \u062b\u0627\u0628\u062a \u0648 \u062f\u0627\u0626\u0645\u06cc \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f Token \u0631\u0648 \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0628\u06af\u06cc\u0631\u06cc\u0645 \u0648 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0627\u0628\u062f \u0645\u0639\u062a\u0628\u0631\u0647. FCM \u0645\u0645\u06a9\u0646\u0647 Token \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647\u061b \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644 \u0628\u0639\u062f \u0627\u0632 \u0646\u0635\u0628 \u0645\u062c\u062f\u062f \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u062f\u0627\u062f\u0647 \u0631\u0648\u06cc \u062f\u0633\u062a\u06af\u0627\u0647 \u062c\u062f\u06cc\u062f \u06cc\u0627 \u0628\u0631\u062e\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0627\u062e\u0644\u06cc \u0633\u0631\u0648\u06cc\u0633.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a Token \u062c\u062f\u06cc\u062f\u060c \u0633\u0631\u0648\u06cc\u0633\u06cc \u06a9\u0647 \u0627\u0632 <code>FirebaseMessagingService<\/code> \u0627\u0631\u062b \u0645\u06cc\u200c\u0628\u0631\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 <code>onNewToken<\/code> \u0631\u0648 Override \u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>override fun onNewToken(token: String) {\n    super.onNewToken(token)\n\n    deviceTokenSyncer.sync(token)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onNewToken<\/span><span style=\"color: #24292E\">(token: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #005CC5\">super<\/span><span style=\"color: #24292E\">.<\/span><span style=\"color: #6F42C1\">onNewToken<\/span><span style=\"color: #24292E\">(token)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    deviceTokenSyncer.<\/span><span style=\"color: #6F42C1\">sync<\/span><span style=\"color: #24292E\">(token)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u062f\u0627\u062e\u0644 <code>FirebaseMessagingService<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0648\u0638\u06cc\u0641\u0647\u200c\u0627\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0648\u0642\u062a\u06cc Token \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u060c \u0646\u0633\u062e\u0647 \u062a\u0627\u0632\u0647 \u0631\u0648 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 Sync \u062f\u0633\u062a\u06af\u0627\u0647 \u062a\u062d\u0648\u06cc\u0644 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627 \u0628\u0647\u062a\u0631\u0647 \u0633\u0631\u0648\u06cc\u0633 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062a\u0645\u0627\u0645 \u0645\u0646\u0637\u0642 Authentication\u060c Retrofit \u0648 Error Handling \u0631\u0648 \u067e\u06cc\u0627\u062f\u0647 \u0646\u06a9\u0646\u0647. \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0645\u062b\u0644 <code>DeviceTokenSyncer<\/code> \u06cc\u0627 Repository \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0633\u0626\u0648\u0644 \u0647\u0645\u0627\u0647\u0646\u06af \u06a9\u0631\u062f\u0646 Token \u0628\u0627 Backend \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0646\u0648\u0632 Login \u0646\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 FCM Token \u0642\u0628\u0644 \u0627\u0632 \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u062e\u0627\u0635 \u0645\u062a\u0635\u0644 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9 \u0637\u0631\u0627\u062d\u06cc \u0645\u0646\u0627\u0633\u0628 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Token \u0645\u0648\u0642\u062a\u0627\u064b \u062f\u0627\u062e\u0644 DataStore \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0634\u0647. \u0628\u0639\u062f \u0627\u0632 Login \u0645\u0648\u0641\u0642\u060c Session Manager \u06cc\u0627 Repository \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647 \u0622\u06cc\u0627 Token \u062b\u0628\u062a\u200c\u0646\u0634\u062f\u0647\u200c\u0627\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u0648 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0631\u0627\u06cc Backend \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u062f\u0648 \u0627\u062a\u0641\u0627\u0642 \u0645\u0633\u062a\u0642\u0644 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>FCM \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0646\u0635\u0628 Token \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/li>\n\n\n\n<li>\u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 Login \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0642\u0637 \u0648\u0642\u062a\u06cc \u0647\u0631 \u062f\u0648 \u0627\u062a\u0641\u0627\u0642 \u0631\u062e \u062f\u0627\u062f\u0647 \u0628\u0627\u0634\u0646\u060c Backend \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0631\u0627\u0628\u0637\u0647 \u0628\u06cc\u0646 User \u0648 Device \u0631\u0648 \u062b\u0628\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Logout \u0648 Notification<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 Logout \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 JWT \u0648 Room \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a. \u0628\u0627\u06cc\u062f \u062f\u0633\u062a\u06af\u0627\u0647 \u0641\u0639\u0644\u06cc \u0647\u0645 \u0627\u0632 \u062d\u0633\u0627\u0628 \u062c\u062f\u0627 \u0628\u0634\u0647\u061b \u0648\u06af\u0631\u0646\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062d\u0633\u0627\u0628 \u0642\u0628\u0644\u06cc \u0647\u0645\u0686\u0646\u0627\u0646 \u0631\u0648\u06cc \u0647\u0645\u0648\u0646 \u06af\u0648\u0634\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 Session\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 Backend \u0628\u06af\u0647 Token \u0641\u0639\u0644\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u0627 \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>suspend fun logout() {\n    notificationRepository.unregisterCurrentDevice()\n    sessionRepository.clearSession()\n    database.clearUserData()\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">logout<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    notificationRepository.<\/span><span style=\"color: #6F42C1\">unregisterCurrentDevice<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    sessionRepository.<\/span><span style=\"color: #6F42C1\">clearSession<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    database.<\/span><span style=\"color: #6F42C1\">clearUserData<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0641\u0642\u0637 \u0628\u062e\u0634 \u062a\u0631\u062a\u06cc\u0628 \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0648 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647. \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a Unregister \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06af\u0627\u0647 \u0628\u0627\u06cc\u062f \u0632\u0645\u0627\u0646\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647 \u06a9\u0647 \u0647\u0646\u0648\u0632 Token \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0647\u0646\u06af\u0627\u0645 Logout \u0642\u0637\u0639 \u0628\u0627\u0634\u0647\u060c \u0628\u0627\u06cc\u062f \u0633\u06cc\u0627\u0633\u062a \u0645\u0634\u062e\u0635\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645. \u0645\u06cc\u0634\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0644\u06cc \u062d\u0633\u0627\u0628 \u0631\u0648 \u0641\u0648\u0631\u0627\u064b \u067e\u0627\u06a9 \u06a9\u0631\u062f \u0648 \u062d\u0630\u0641 Token \u0627\u0632 Backend \u0631\u0648 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0639\u062f\u06cc \u0635\u0641\u200c\u0628\u0646\u062f\u06cc \u06a9\u0631\u062f. \u0627\u0645\u0646\u06cc\u062a \u0648 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0627\u0631\u0633\u0627\u0644 \u0627\u0639\u0644\u0627\u0646 \u0628\u0647 \u062d\u0633\u0627\u0628 \u0642\u0628\u0644\u06cc \u0645\u0647\u0645\u200c\u062a\u0631 \u0627\u0632 \u0633\u0627\u062f\u06af\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u06cc\u0627\u0645 \u0628\u0627 FirebaseMessagingService<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u06a9\u0646\u062a\u0631\u0644 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u060c \u06cc\u06a9 Service \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0627\u0632 <code>FirebaseMessagingService<\/code> \u0627\u0631\u062b \u0645\u06cc\u200c\u0628\u0631\u0647. \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 <code>onMessageReceived<\/code> \u0648 <code>onNewToken<\/code> \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062e\u0634 \u0645\u062a\u0645\u0627\u06cc\u0632 \u06a9\u0644\u0627\u0633 \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class PriceBanMessagingService :\n    FirebaseMessagingService() {\n\n    override fun onMessageReceived(\n        message: RemoteMessage\n    ) {\n        notificationHandler.handle(message)\n    }\n\n    override fun onNewToken(token: String) {\n        deviceTokenSyncer.sync(token)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">PriceBanMessagingService<\/span><span style=\"color: #24292E\"> :<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">FirebaseMessagingService<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onMessageReceived<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        message: <\/span><span style=\"color: #6F42C1\">RemoteMessage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        notificationHandler.<\/span><span style=\"color: #6F42C1\">handle<\/span><span style=\"color: #24292E\">(message)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onNewToken<\/span><span style=\"color: #24292E\">(token: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        deviceTokenSyncer.<\/span><span style=\"color: #6F42C1\">sync<\/span><span style=\"color: #24292E\">(token)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u0646\u0628\u0627\u06cc\u062f \u0628\u0647 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0686\u0646\u062f\u0635\u062f\u062e\u0637\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0647. \u0641\u0642\u0637 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u06a9\u0644\u0627\u0633 \u0645\u0633\u0626\u0648\u0644 \u062a\u062d\u0644\u06cc\u0644 \u0648 \u0633\u0627\u062e\u062a Notification \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>notificationHandler<\/code> \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u067e\u06cc\u0627\u0645 \u0686\u0647 \u0646\u0648\u0639\u06cc\u0647\u060c \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0648 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Notification \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0631\u0641\u06cc Service \u062f\u0631 Manifest<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0631\u0648\u06cc\u0633 Firebase \u0628\u0627\u06cc\u062f \u062f\u0631 Manifest \u0645\u0639\u0631\u0641\u06cc \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;service\n    android:name=\".notification.PriceBanMessagingService\"\n    android:exported=\"false\">\n\n    &lt;intent-filter>\n        &lt;action\n            android:name=\"com.google.firebase.MESSAGING_EVENT\" \/>\n    &lt;\/intent-filter>\n\n&lt;\/service>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">service<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;.notification.PriceBanMessagingService&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    android:<\/span><span style=\"color: #6F42C1\">exported<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;false&quot;<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">intent<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">filter<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">action<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;com.google.firebase.MESSAGING_EVENT&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">&lt;\/<\/span><span style=\"color: #24292E\">intent<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">filter<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">&lt;\/<\/span><span style=\"color: #24292E\">service<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>exported=\"false\"<\/code> \u06cc\u0639\u0646\u06cc \u0633\u0627\u06cc\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u06cc\u0646 Service \u0631\u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0646. <code>MESSAGING_EVENT<\/code> \u0647\u0645 \u0628\u0647 Firebase \u0645\u06cc\u06af\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a\u06cc \u0628\u0627\u06cc\u062f \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u062a\u062d\u0648\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification Message \u0648 Data Message<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">FCM \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0648 \u062f\u0631 \u0634\u06a9\u0644\u200c\u0647\u0627\u06cc \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647. \u062f\u0648 \u0646\u0648\u0639 \u0645\u0647\u0645\u060c <strong>Notification Message<\/strong> \u0648 <strong>Data Message<\/strong> \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notification Message \u0634\u0627\u0645\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0622\u0645\u0627\u062f\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 \u0639\u0646\u0648\u0627\u0646 \u0648 \u0645\u062a\u0646 \u0627\u0639\u0644\u0627\u0646\u0647. \u0648\u0642\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u0633\u062a\u060c \u0633\u06cc\u0633\u062a\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062e\u0648\u062f\u0634 \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u062f\u0631 \u067e\u0646\u0644 \u062f\u0633\u062a\u06af\u0627\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u06a9\u0646\u062a\u0631\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648\u06cc \u0631\u0641\u062a\u0627\u0631 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0645\u062a\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Data Message \u0634\u0627\u0645\u0644 \u0645\u062c\u0645\u0648\u0639\u0647\u200c\u0627\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u0633\u062a \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f\u0634 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0628\u0627 \u0627\u0648\u0646 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u0645\u062b\u0644\u0627\u064b \u067e\u06cc\u0627\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u06af\u0647 \u0646\u0648\u0639 \u0631\u0648\u06cc\u062f\u0627\u062f <code>PRICE_REJECTED<\/code> \u0627\u0633\u062a \u0648 \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644 \u06f8\u06f2\u06f4 \u0627\u0633\u062a. \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0639\u0646\u0648\u0627\u0646\u060c \u0645\u062a\u0646\u060c \u0645\u0633\u06cc\u0631 \u06a9\u0644\u06cc\u06a9 \u0648 \u0631\u0641\u062a\u0627\u0631 \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0631\u0641\u062a\u0627\u0631 FCM \u0628\u0631\u0627\u0633\u0627\u0633 \u0646\u0648\u0639 \u067e\u06cc\u0627\u0645 \u0648 \u0648\u0636\u0639\u06cc\u062a Foreground \u06cc\u0627 Background \u0641\u0631\u0642 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0631\u0627\u06cc Notification Message \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647\u060c \u0633\u06cc\u0633\u062a\u0645 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 System Tray \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647\u061b \u0627\u0645\u0627 Data Message \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u0628\u0647 <code>onMessageReceived<\/code> \u062a\u062d\u0648\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u067e\u06cc\u0627\u0645 \u062a\u0631\u06a9\u06cc\u0628\u06cc \u0647\u0645 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 Notification \u0631\u0648 \u0628\u0647 Tray \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647 \u0648 Data \u0631\u0648 \u062f\u0631 Intent \u0635\u0641\u062d\u0647 \u0622\u063a\u0627\u0632\u06cc\u0646 \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06a9\u0647 \u0628\u0647 Deep Link\u060c \u0631\u0641\u062a\u0627\u0631\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0648 \u06a9\u0646\u062a\u0631\u0644 \u062f\u0642\u06cc\u0642 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0647\u060c Data Message \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0646\u0639\u0637\u0627\u0641 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Payload \u067e\u06cc\u0627\u0645 \u0628\u0627\u06cc\u062f \u06a9\u0648\u0686\u06a9 \u0648 \u0631\u0648\u0634\u0646 \u0628\u0627\u0634\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0631\u0648\u0631 \u0646\u0628\u0627\u06cc\u062f \u062a\u0645\u0627\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u06cc\u0627 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u062f\u0627\u062e\u0644 Notification Payload \u0642\u0631\u0627\u0631 \u0628\u062f\u0647. \u067e\u06cc\u0627\u0645 \u0628\u0647\u062a\u0631\u0647 \u0641\u0642\u0637 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 \u0647\u062f\u0627\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0645\u062f\u0644 \u062f\u0627\u062e\u0644\u06cc \u067e\u06cc\u0627\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0686\u0646\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class NotificationPayload(\n    val type: NotificationType,\n    val entityId: Long?,\n    val title: String,\n    val body: String\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">NotificationPayload<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> type: <\/span><span style=\"color: #6F42C1\">NotificationType<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> entityId: <\/span><span style=\"color: #6F42C1\">Long<\/span><span style=\"color: #24292E\">?,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> title: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> body: <\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>type<\/code> \u0646\u0648\u0639 \u0627\u062a\u0641\u0627\u0642 \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c <code>entityId<\/code> \u0634\u0646\u0627\u0633\u0647 \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u0645\u0631\u062a\u0628\u0637\u0647 \u0648 \u0639\u0646\u0648\u0627\u0646 \u0648 \u0645\u062a\u0646 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u0639\u0644\u0627\u0646 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u0634\u0647\u060c <code>entityId<\/code> \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644\u0647. \u0627\u06af\u0631 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0628\u0627\u0634\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0634\u0646\u0627\u0633\u0647 \u0647\u0645\u0648\u0646 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0645\u0644 \u0628\u0639\u062f \u0627\u0632 \u0628\u0627\u0632 \u0634\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 Room \u06cc\u0627 API \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0647\u0645 Payload \u0631\u0648 \u0633\u0628\u06a9 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u0648 \u0647\u0645 \u062c\u0644\u0648\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0642\u062f\u06cc\u0645\u06cc \u062f\u0627\u062e\u0644 \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0646\u0648\u0639 \u0627\u0639\u0644\u0627\u0646 \u0631\u0627 \u0628\u0627 String \u062e\u0627\u0645 \u067e\u062e\u0634 \u0646\u06a9\u0646\u06cc\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 Backend \u0645\u0642\u062f\u0627\u0631\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 <code>product_updated<\/code> \u06cc\u0627 <code>business_approved<\/code> \u0628\u0641\u0631\u0633\u062a\u0647. \u0646\u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 String\u0647\u0627 \u0631\u0648 \u062f\u0631 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0633\u062a\u06cc \u0645\u0642\u0627\u06cc\u0633\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u0627\u0648\u0646\u200c\u0647\u0627 \u062f\u0631 \u06cc\u06a9 Mapper \u0628\u0647 \u0646\u0648\u0639 \u062f\u0627\u062e\u0644\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0646:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>enum class NotificationType {\n    BUSINESS_APPROVED,\n    PRICE_REJECTED,\n    PRODUCT_UPDATED,\n    GENERAL\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">enum<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">NotificationType<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    BUSINESS_APPROVED,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    PRICE_REJECTED,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    PRODUCT_UPDATED,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    GENERAL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Mapper \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0642\u062f\u0627\u0631 \u0646\u0627\u0634\u0646\u0627\u062e\u062a\u0647 \u0631\u0648 \u0628\u0647 <code>GENERAL<\/code> \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u0647. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0627\u06af\u0631 Backend \u0646\u0648\u0639 \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u06a9\u0631\u062f \u0648 \u0646\u0633\u062e\u0647 \u0641\u0639\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0648\u0646 \u0631\u0648 \u0646\u0645\u06cc\u200c\u0634\u0646\u0627\u062e\u062a\u060c \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 Crash \u0646\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification Channel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 Android 8 \u0628\u0647 \u0628\u0639\u062f\u060c \u0647\u0631 Notification \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 \u06cc\u06a9 <strong>Notification Channel<\/strong> \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647. Channel \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u0646\u0648\u0639\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0627\u0639\u0644\u0627\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0647\u061b \u0645\u062b\u0644\u0627\u064b \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u0631\u0648 \u0631\u0648\u0634\u0646 \u0646\u06af\u0647 \u062f\u0627\u0631\u0647 \u0648\u0644\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062a\u0628\u0644\u06cc\u063a\u0627\u062a\u06cc \u0631\u0648 \u062e\u0627\u0645\u0648\u0634 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 Channel\u0647\u0627\u06cc \u0645\u0639\u0646\u0627\u062f\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0648 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627<\/li>\n\n\n\n<li>\u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631<\/li>\n\n\n\n<li>\u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0647\u0631 \u0627\u0639\u0644\u0627\u0646 \u06cc\u06a9 Channel \u062a\u0627\u0632\u0647 \u0628\u0633\u0627\u0632\u06cc\u0645. Channel \u0646\u0645\u0627\u06cc\u0646\u062f\u0647 \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u0632 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0627\u062e\u062a Channel \u0628\u0627\u06cc\u062f \u06cc\u06a9\u200c\u0628\u0627\u0631 \u0647\u0646\u06af\u0627\u0645 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val channel = NotificationChannel(\n    \"price_updates\",\n    \"\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\",\n    NotificationManager.IMPORTANCE_DEFAULT\n)\n\nnotificationManager.createNotificationChannel(channel)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> channel <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">NotificationChannel<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;price_updates&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u06cc\u0645\u062a\u200c\u0647\u0627&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    NotificationManager.IMPORTANCE_DEFAULT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">notificationManager.<\/span><span style=\"color: #6F42C1\">createNotificationChannel<\/span><span style=\"color: #24292E\">(channel)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0634\u0646\u0627\u0633\u0647 <code>\"price_updates\"<\/code> \u0628\u0627\u06cc\u062f \u062b\u0627\u0628\u062a \u0628\u0645\u0648\u0646\u0647\u060c \u0686\u0648\u0646 \u0633\u06cc\u0633\u062a\u0645 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0631\u0627\u0633\u0627\u0633 \u0647\u0645\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. \u0646\u0627\u0645 \u0641\u0627\u0631\u0633\u06cc Channel \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0647 \u0648 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u0648\u0636\u06cc\u062d \u0648\u0627\u0636\u062d\u200c\u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Importance \u06cc\u0639\u0646\u06cc \u0645\u06cc\u0632\u0627\u0646 \u0645\u0632\u0627\u062d\u0645\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0646\u06af\u0627\u0645 \u0633\u0627\u062e\u062a Channel \u0628\u0627\u06cc\u062f \u0645\u06cc\u0632\u0627\u0646 \u0627\u0647\u0645\u06cc\u062a \u0631\u0648 \u062a\u0639\u06cc\u06cc\u0646 \u06a9\u0646\u06cc\u0645. \u0627\u0647\u0645\u06cc\u062a \u0628\u06cc\u0634\u062a\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0627\u0639\u062b \u0635\u062f\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u060c \u0646\u0645\u0627\u06cc\u0634 \u0628\u0631\u062c\u0633\u062a\u0647\u200c\u062a\u0631 \u06cc\u0627 Heads-up Notification \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0646\u0628\u0627\u06cc\u062f <code>IMPORTANCE_HIGH<\/code> \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646. \u0645\u062b\u0644\u0627\u064b \u062a\u0623\u06cc\u06cc\u062f \u06cc\u0627 \u0631\u062f \u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a \u0645\u0647\u0645 \u0645\u0645\u06a9\u0646\u0647 \u0627\u0647\u0645\u06cc\u062a \u0628\u0627\u0644\u0627\u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0639\u0627\u062f\u06cc \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0634\u0627\u06cc\u062f \u0628\u0627 \u0627\u0647\u0645\u06cc\u062a Default \u06a9\u0627\u0641\u06cc \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0646 Channel\u060c \u06a9\u0646\u062a\u0631\u0644 \u0627\u0635\u0644\u06cc \u0627\u0648\u0646 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0648 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u06cc\u0633\u062a\u0645 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u062f\u0627\u0626\u0645\u0627\u064b \u062a\u0644\u0627\u0634 \u06a9\u0646\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062f\u0648\u0631 \u0628\u0632\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Permission \u0627\u0639\u0644\u0627\u0646 \u062f\u0631 Android 13<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 Android 13 \u06cc\u0627 API 33 \u0628\u0647 \u0628\u0639\u062f\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0628\u06cc\u0634\u062a\u0631 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0628\u0627\u06cc\u062f \u0645\u062c\u0648\u0632 Runtime \u0628\u0627 \u0646\u0627\u0645 <code>POST_NOTIFICATIONS<\/code> \u0628\u06af\u06cc\u0631\u0647. \u062f\u0631 \u0646\u0635\u0628\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0631\u0648\u06cc Android 13 \u0628\u0647 \u0628\u0627\u0644\u0627\u060c \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u062e\u0627\u0645\u0648\u0634 \u0647\u0633\u062a\u0646 \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062c\u0648\u0632 \u0631\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062c\u0627\u0632\u0647 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0628\u062a\u062f\u0627 Permission \u062f\u0627\u062e\u0644 Manifest \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;uses-permission\n    android:name=\"android.permission.POST_NOTIFICATIONS\" \/>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">uses<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">permission<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;android.permission.POST_NOTIFICATIONS&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">\/&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646 \u062e\u0637 \u0641\u0642\u0637 Permission \u0631\u0648 \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. \u06af\u0631\u0641\u062a\u0646 \u0627\u062c\u0627\u0632\u0647 \u0648\u0627\u0642\u0639\u06cc \u0631\u0648\u06cc Android 13 \u0628\u0647 \u0628\u0627\u0644\u0627 \u0628\u0627\u06cc\u062f \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Permission \u0631\u0648 \u0647\u0645\u0627\u0646 \u0627\u0628\u062a\u062f\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u062e\u0648\u0627\u0647\u06cc\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u062f\u062a\u0631\u06cc\u0646 \u0632\u0645\u0627\u0646 \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a Notification Permission\u060c \u0627\u0648\u0644\u06cc\u0646 \u062b\u0627\u0646\u06cc\u0647 \u0648\u0631\u0648\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u061b \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0646\u0648\u0632 \u0646\u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0686\u0647 \u0646\u0648\u0639 \u0627\u0639\u0644\u0627\u0646 \u0645\u0641\u06cc\u062f\u06cc \u0628\u0631\u0627\u0634 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u0627\u0628\u062a\u062f\u0627 \u062f\u0644\u06cc\u0644 \u0631\u0648\u0634\u0646 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645. \u0645\u062b\u0644\u0627\u064b \u0628\u0639\u062f \u0627\u0632 \u062b\u0628\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u062a\u0648\u0636\u06cc\u062d \u0628\u062f\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0627\u0632 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0628\u0627\u062e\u0628\u0631 \u0628\u0634\u06cc\u060c \u0627\u062c\u0627\u0632\u0647 \u0627\u0631\u0633\u0627\u0644 \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u062a\u0648\u0636\u06cc\u062d\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0633\u06cc\u0633\u062a\u0645\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Android \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 Permission \u0632\u0645\u0627\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0634\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0642\u0627\u0628\u0644\u06cc\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0634\u0646\u0627 \u0634\u062f\u0647 \u0648 \u062f\u0644\u06cc\u0644 \u0646\u06cc\u0627\u0632 \u0631\u0648 \u062f\u0631\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062f\u0631\u062e\u0648\u0627\u0633\u062a Permission \u062f\u0631 Compose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644 Permission\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc\u060c \u0627\u0632 Activity Result API \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val notificationPermissionLauncher =\n    rememberLauncherForActivityResult(\n        ActivityResultContracts.RequestPermission()\n    ) { granted ->\n        viewModel.onNotificationPermissionResult(granted)\n    }\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> notificationPermissionLauncher <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">rememberLauncherForActivityResult<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ActivityResultContracts.<\/span><span style=\"color: #6F42C1\">RequestPermission<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) { granted <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        viewModel.<\/span><span style=\"color: #6F42C1\">onNotificationPermissionResult<\/span><span style=\"color: #24292E\">(granted)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0646\u06af\u0627\u0645 \u0627\u0642\u062f\u0627\u0645 \u0645\u0646\u0627\u0633\u0628 \u06a9\u0627\u0631\u0628\u0631:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>notificationPermissionLauncher.launch(\n    Manifest.permission.POST_NOTIFICATIONS\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">notificationPermissionLauncher.<\/span><span style=\"color: #6F42C1\">launch<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    Manifest.permission.POST_NOTIFICATIONS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0641\u0642\u0637 \u0645\u0633\u0626\u0648\u0644 \u0646\u0645\u0627\u06cc\u0634 Permission Dialog \u0627\u0633\u062a. \u062b\u0628\u062a Token\u060c \u0633\u0627\u062e\u062a Channel \u06cc\u0627 \u0627\u0631\u0633\u0627\u0644 Notification \u0646\u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 Callback Launcher \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u067e\u0627\u06cc\u06cc\u0646\u200c\u062a\u0631 \u0627\u0632 Android 13 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0627\u06cc\u0646 Runtime Permission \u0646\u06cc\u0633\u062a\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0642\u0628\u0644 \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0627\u06cc\u062f \u0646\u0633\u062e\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0628\u0631\u0631\u0633\u06cc \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0631\u062f \u0634\u062f\u0646 Permission<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 Permission \u0631\u0648 \u0631\u062f \u06a9\u0631\u062f\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0627\u0632 \u06a9\u0627\u0631 \u0628\u06cc\u0641\u062a\u0647 \u06cc\u0627 \u0647\u0631 \u0628\u0627\u0631 \u0635\u0641\u062d\u0647 \u0628\u0627\u0632 \u0634\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645 \u0648 \u062f\u0631 \u0628\u062e\u0634 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0648\u0636\u06cc\u062d \u0628\u062f\u06cc\u0645 \u06a9\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u062e\u0627\u0645\u0648\u0634 \u0647\u0633\u062a\u0646. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f\u0627\u064b \u062e\u0648\u0627\u0633\u062a\u060c \u06cc\u06a9 \u062f\u06a9\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a Notification \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u062f\u0627\u06cc\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627\u06cc\u062f \u062a\u0648\u062c\u0647 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062d\u062a\u06cc \u0627\u06af\u0631 Permission \u0642\u0628\u0644\u0627\u064b \u0635\u0627\u062f\u0631 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0647\u0631 \u0632\u0645\u0627\u0646 \u0627\u0632 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u06cc\u0633\u062a\u0645 \u062a\u0645\u0627\u0645 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u06cc\u0627 \u0641\u0642\u0637 \u06cc\u06a9 Channel \u062e\u0627\u0635 \u0631\u0648 \u062e\u0627\u0645\u0648\u0634 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Token \u062b\u0628\u062a \u0634\u062f\u0647 \u0627\u0644\u0632\u0627\u0645\u0627\u064b \u0628\u0647 \u0645\u0639\u0646\u06cc \u0627\u0639\u0644\u0627\u0646 \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0627\u0633\u062a \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0633\u0627\u062e\u062a Notification<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u062a\u062d\u0644\u06cc\u0644 \u067e\u06cc\u0627\u0645\u060c \u0628\u0627\u06cc\u062f Notification \u0648\u0627\u0642\u0639\u06cc \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647. \u0628\u0631\u0627\u06cc \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u060c \u0627\u0632 <code>NotificationCompat.Builder<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val notification =\n    NotificationCompat.Builder(\n        context,\n        \"price_updates\"\n    )\n        .setSmallIcon(R.drawable.ic_notification)\n        .setContentTitle(payload.title)\n        .setContentText(payload.body)\n        .setAutoCancel(true)\n        .setContentIntent(pendingIntent)\n        .build()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> notification <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    NotificationCompat.<\/span><span style=\"color: #6F42C1\">Builder<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #032F62\">&quot;price_updates&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">setSmallIcon<\/span><span style=\"color: #24292E\">(R.drawable.ic_notification)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">setContentTitle<\/span><span style=\"color: #24292E\">(payload.title)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">setContentText<\/span><span style=\"color: #24292E\">(payload.body)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">setAutoCancel<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">true<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">setContentIntent<\/span><span style=\"color: #24292E\">(pendingIntent)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">build<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0634\u0646\u0627\u0633\u0647 Channel \u0628\u0627\u06cc\u062f \u0628\u0627 Channel \u0633\u0627\u062e\u062a\u0647\u200c\u0634\u062f\u0647 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>setSmallIcon<\/code> \u0636\u0631\u0648\u0631\u06cc\u0647 \u0648 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0622\u06cc\u06a9\u0648\u0646 \u0645\u0646\u0627\u0633\u0628 Notification \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647. <code>setAutoCancel(true)<\/code> \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0628\u0639\u062f \u0627\u0632 \u0644\u0645\u0633 \u0627\u0639\u0644\u0627\u0646\u060c \u0627\u0632 \u067e\u0646\u0644 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u067e\u0627\u06a9 \u0628\u0634\u0647. <code>setContentIntent<\/code> \u0647\u0645 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0644\u0645\u0633 Notification \u0686\u0647 \u0639\u0645\u0644\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0648\u062f Builder \u0628\u0647\u062a\u0631\u0647 \u062f\u0627\u062e\u0644 \u06a9\u0644\u0627\u0633\u06cc \u0645\u062b\u0644 <code>NotificationFactory<\/code> \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647. \u0633\u0631\u0648\u06cc\u0633 Firebase \u0641\u0642\u0637 Payload \u0631\u0648 \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647 \u0648 Factory \u0638\u0627\u0647\u0631 Notification \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Small Icon \u0628\u0627 \u0622\u06cc\u06a9\u0648\u0646 \u0627\u0635\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0631\u0642 \u062f\u0627\u0631\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0622\u06cc\u06a9\u0648\u0646 \u06a9\u0648\u0686\u06a9 Notification \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0634\u06a9\u0644 \u0633\u0627\u062f\u0647 \u0648 \u062a\u06a9\u200c\u0631\u0646\u06af \u0628\u0627 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0634\u0641\u0627\u0641 \u0628\u0627\u0634\u0647. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0632 \u0644\u0648\u06af\u0648\u06cc \u0631\u0646\u06af\u06cc \u06a9\u0627\u0645\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 Status Bar \u062e\u0631\u0648\u062c\u06cc \u0646\u0627\u0645\u0646\u0627\u0633\u0628\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u06cc\u06a9 Drawable \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u0645\u062b\u0644 <code>ic_notification<\/code> \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0627\u0646\u062f\u0627\u0632\u0647 \u06a9\u0648\u0686\u06a9 \u0647\u0645 \u062e\u0648\u0627\u0646\u0627 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Firebase \u0647\u0645 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u0622\u06cc\u06a9\u0648\u0646 \u0648 \u0631\u0646\u06af \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u062f\u0631 Manifest \u062a\u0639\u0631\u06cc\u0641 \u0628\u0634\u0646\u061b \u0627\u06cc\u0646 \u0645\u0642\u0627\u062f\u06cc\u0631 \u0648\u0642\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646 \u06a9\u0647 \u067e\u06cc\u0627\u0645 \u0648\u0631\u0648\u062f\u06cc \u0622\u06cc\u06a9\u0648\u0646 \u06cc\u0627 \u0631\u0646\u06af \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u062a\u0639\u06cc\u06cc\u0646 \u0646\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647. (<a href=\"https:\/\/firebase.google.com\/docs\/cloud-messaging\/android\/receive-messages?utm_source=chatgpt.com\">Firebase<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification ID<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 Notification \u0627\u0632 <code>NotificationManager<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>NotificationManagerCompat\n    .from(context)\n    .notify(notificationId, notification)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">NotificationManagerCompat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">from<\/span><span style=\"color: #24292E\">(context)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">notify<\/span><span style=\"color: #24292E\">(notificationId, notification)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>notificationId<\/code> \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0627\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646 \u06cc\u06a9 \u0645\u0648\u0631\u062f \u062a\u0627\u0632\u0647 \u0627\u0633\u062a \u06cc\u0627 \u0628\u0627\u06cc\u062f \u0627\u0639\u0644\u0627\u0646 \u0642\u0628\u0644\u06cc \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0627\u0639\u0644\u0627\u0646 \u06cc\u06a9 ID \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0633\u0627\u0632\u06cc\u0645\u060c \u0647\u0645\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u062f\u0627\u062e\u0644 \u067e\u0646\u0644 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0646. \u0627\u06af\u0631 \u0628\u0631\u0627\u06cc \u0627\u0639\u0644\u0627\u0646 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0647\u0645\u06cc\u0634\u0647 \u0627\u0632 ID \u0647\u0645\u0648\u0646 \u0645\u062d\u0635\u0648\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0627\u0639\u0644\u0627\u0646 \u062c\u062f\u06cc\u062f \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0646\u0633\u062e\u0647 \u0642\u0628\u0644\u06cc \u0647\u0645\u0648\u0646 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 ID \u0641\u0642\u0637 \u06cc\u06a9 \u0639\u062f\u062f \u062a\u0635\u0627\u062f\u0641\u06cc \u0646\u06cc\u0633\u062a\u061b \u0628\u062e\u0634\u06cc \u0627\u0632 \u0633\u06cc\u0627\u0633\u062a \u0646\u0645\u0627\u06cc\u0634 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deep Link<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u0627\u0639\u0644\u0627\u0646 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0631\u062f \u0634\u062f \u0645\u06cc\u200c\u0632\u0646\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632 \u0628\u0634\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062c\u0628\u0648\u0631 \u0628\u0634\u0647 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647. Notification \u0628\u0627\u06cc\u062f \u0627\u0648\u0646 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 \u0635\u0641\u062d\u0647 \u0645\u0631\u062a\u0628\u0637 \u0647\u062f\u0627\u06cc\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0645\u0642\u0635\u062f \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0635\u0641\u062d\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u0634\u0645\u0627\u0631\u0647 \u06f8\u06f2\u06f4 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Intent \u0645\u0642\u0635\u062f\u060c \u0634\u0646\u0627\u0633\u0647 \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u0631\u0648 \u0647\u0645\u0631\u0627\u0647 \u062e\u0648\u062f\u0634 \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val intent = Intent(\n    context,\n    MainActivity::class.java\n).apply {\n    putExtra(\"notification_type\", payload.type.name)\n    putExtra(\"entity_id\", payload.entityId)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> intent <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Intent<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    MainActivity::<\/span><span style=\"color: #6F42C1\">class<\/span><span style=\"color: #24292E\">.java<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">).<\/span><span style=\"color: #6F42C1\">apply<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">putExtra<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;notification_type&quot;<\/span><span style=\"color: #24292E\">, payload.type.name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">putExtra<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;entity_id&quot;<\/span><span style=\"color: #24292E\">, payload.entityId)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f Intent \u0628\u0647 <code>PendingIntent<\/code> \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val pendingIntent = PendingIntent.getActivity(\n    context,\n    notificationId,\n    intent,\n    PendingIntent.FLAG_UPDATE_CURRENT or\n        PendingIntent.FLAG_IMMUTABLE\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> pendingIntent <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> PendingIntent.<\/span><span style=\"color: #6F42C1\">getActivity<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    notificationId,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    intent,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    PendingIntent.FLAG_UPDATE_CURRENT or<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        PendingIntent.FLAG_IMMUTABLE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>PendingIntent<\/code> \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0628\u0639\u062f\u0627\u064b\u060c \u0647\u0646\u06af\u0627\u0645 \u0644\u0645\u0633 \u0627\u0639\u0644\u0627\u0646\u060c Intent \u062a\u0639\u0631\u06cc\u0641\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 MainActivity \u0646\u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0634 \u0628\u0627 \u062a\u0639\u062f\u0627\u062f \u0632\u06cc\u0627\u062f\u06cc <code>if<\/code> \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647 \u06a9\u062f\u0648\u0645 \u0635\u0641\u062d\u0647 \u0628\u0627\u0632 \u0628\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 Intent \u0628\u0647 \u06cc\u06a9 \u0645\u062f\u0644 Navigation \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0647 \u0648 Navigation Coordinator \u06cc\u0627 NavHost \u0645\u0642\u0635\u062f \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification \u0646\u0628\u0627\u06cc\u062f \u062f\u0627\u062f\u0647 \u06a9\u0627\u0645\u0644 \u0635\u0641\u062d\u0647 \u0631\u0627 \u062d\u0645\u0644 \u06a9\u0646\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0627\u0639\u0644\u0627\u0646 \u0645\u06cc\u06af\u0647 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0634\u0645\u0627\u0631\u0647 \u06f8\u06f2\u06f4 \u0631\u062f \u0634\u062f\u0647. \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0644\u0645\u0633 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0642\u0637 \u0634\u0646\u0627\u0633\u0647 \u06f8\u06f2\u06f4 \u0631\u0648 \u0627\u0632 Intent \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u0635\u0641\u062d\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u062f\u0627\u062f\u0647 \u062a\u0627\u0632\u0647 \u0631\u0648 \u0627\u0632 Repository \u0645\u06cc\u200c\u062e\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0628\u0627\u06cc\u062f \u06a9\u0644 Product \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 JSON \u062f\u0627\u062e\u0644 Intent \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc\u0645. \u0645\u0645\u06a9\u0646\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0639\u0644\u0627\u0646 \u0642\u062f\u06cc\u0645\u06cc \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0646\u062f\u0627\u0632\u0647 Payload \u0632\u06cc\u0627\u062f \u0628\u0634\u0647 \u06cc\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u0645\u062f\u0644 \u0628\u06cc\u0646 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0627\u0639\u062f\u0647 \u0647\u0645\u0648\u0646\u06cc\u0647 \u06a9\u0647 \u062f\u0631 Navigation \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0627\u0634\u062a\u06cc\u0645:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u0645\u0642\u0635\u062f \u0641\u0642\u0637 \u0634\u0646\u0627\u0633\u0647 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0635\u0644\u06cc \u0631\u0648 \u0627\u0632 \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u062e\u0648\u0646\u0647.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u062f \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0645\u06cc\u200c\u0627\u0641\u062a\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0644\u0645\u0633 Notification \u0645\u0645\u06a9\u0646\u0647 \u0632\u0645\u0627\u0646\u06cc \u0627\u062a\u0641\u0627\u0642 \u0628\u06cc\u0641\u062a\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0633\u062a\u0647 \u0627\u0633\u062a. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a MainActivity \u0627\u0632 \u0627\u0628\u062a\u062f\u0627 \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647\u060c Session \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u0634\u0647 \u0648 \u0628\u0639\u062f Navigation \u0628\u0627\u06cc\u062f \u0645\u0642\u0635\u062f \u062f\u0631\u0633\u062a \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 Login \u0646\u0628\u0627\u0634\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645 \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 \u062e\u0635\u0648\u0635\u06cc \u0645\u062d\u0635\u0648\u0644 \u0628\u0634\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0628\u062a\u062f\u0627 \u0635\u0641\u062d\u0647 Login \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647 \u0648 \u0645\u0642\u0635\u062f \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0645\u0648\u0642\u062a\u0627\u064b \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647. \u0628\u0639\u062f \u0627\u0632 Login \u0645\u0648\u0641\u0642\u060c \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0647\u0645\u0648\u0646 \u0645\u0642\u0635\u062f \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 Deep Link \u0628\u0627\u06cc\u062f \u0628\u0627 Authentication \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0627\u06af\u0631 Session \u0645\u0639\u062a\u0628\u0631\u0647\u060c \u0645\u0642\u0635\u062f \u0627\u0639\u0644\u0627\u0646 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647.<\/li>\n\n\n\n<li>\u0627\u06af\u0631 Session \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647\u060c Login \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647.<\/li>\n\n\n\n<li>\u0628\u0639\u062f \u0627\u0632 Login\u060c \u0645\u0642\u0635\u062f \u0645\u0639\u0648\u0642 \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0628\u062e\u0634\u06cc \u0627\u0632 Navigation Architecture \u0627\u0633\u062a\u060c \u0646\u0647 \u0648\u0638\u06cc\u0641\u0647 Notification Builder.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 Foreground \u0628\u0627\u0634\u062f \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0645\u06cc\u200c\u0627\u0641\u062a\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632 \u0648 \u0641\u0639\u0627\u0644 \u0627\u0633\u062a\u060c <code>onMessageReceived<\/code> \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062a\u062d\u0648\u06cc\u0644 \u0628\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0644\u0632\u0648\u0645\u0627\u064b \u0646\u0628\u0627\u06cc\u062f \u0641\u0648\u0631\u0627\u064b Notification \u0633\u06cc\u0633\u062a\u0645 \u0628\u0633\u0627\u0632\u06cc\u0645. \u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u06cc\u0646 \u062d\u0627\u0644\u0627 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644 \u0634\u0645\u0627\u0631\u0647 \u06f8\u06f2\u06f4 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0647. \u0646\u0645\u0627\u06cc\u0634 \u06cc\u06a9 \u0627\u0639\u0644\u0627\u0646 \u062c\u062f\u0627 \u062f\u0631\u0628\u0627\u0631\u0647 \u0647\u0645\u0648\u0646 \u0645\u062d\u0635\u0648\u0644 \u0645\u0645\u06a9\u0646\u0647 \u062a\u06a9\u0631\u0627\u0631\u06cc \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>NotificationHandler<\/code> \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0631\u0627\u0633\u0627\u0633 \u0648\u0636\u0639\u06cc\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0641\u0642\u0637 Room \u0631\u0648 Sync \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>Event \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>Snackbar \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647.<\/li>\n\n\n\n<li>\u06cc\u0627 \u0627\u06af\u0631 \u0631\u0648\u06cc\u062f\u0627\u062f \u062e\u06cc\u0644\u06cc \u0645\u0647\u0645\u0647\u060c Notification \u0633\u06cc\u0633\u062a\u0645 \u0647\u0645 \u0628\u0633\u0627\u0632\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 Foreground \u06cc\u0627 Background \u0645\u06cc\u0634\u0647 \u06cc\u06a9 App Visibility Tracker \u062f\u0627\u0634\u062a\u060c \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f Activity \u06cc\u0627 Composable \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645 \u062f\u0627\u062e\u0644 Firebase Service \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification \u062c\u0627\u06cc Sync \u0631\u0627 \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u06cc\u0627\u0645 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0646\u06cc\u0633\u062a \u06a9\u0647 \u062a\u0645\u0627\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0644\u06cc \u0645\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0627\u0632\u0647 \u0634\u062f\u0646. Notification \u0628\u06cc\u0634\u062a\u0631 \u06cc\u06a9 \u0633\u06cc\u06af\u0646\u0627\u0644 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc\u06af\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0631\u062e \u062f\u0627\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b Payload \u0645\u06cc\u06af\u0647 \u0645\u062d\u0635\u0648\u0644 \u06f8\u06f2\u06f4 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u06cc\u0627\u0645\u060c Repository \u0631\u0648 \u0648\u0627\u062f\u0627\u0631 \u06a9\u0646\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062a\u0627\u0632\u0647 \u0627\u0648\u0646 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0627\u0632 API \u0628\u06af\u06cc\u0631\u0647 \u0648 \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0633\u06cc\u0631 \u0645\u0646\u0627\u0633\u0628 \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FCM \u067e\u06cc\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0645\u06cc\u200c\u0631\u0633\u0648\u0646\u0647\u060c Repository \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062a\u0627\u0632\u0647 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Room \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u0634\u0647 \u0648 \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0634\u0647 UI \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0628\u0627\u0634\u0647\u060c Notification \u0647\u0645 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 Notification \u0648 Sync \u062f\u0648 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u062c\u062f\u0627 \u062f\u0627\u0631\u0646:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notification \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0627\u062e\u0628\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Sync \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062a\u0627\u0632\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u06a9\u0627\u0631 \u0637\u0648\u0644\u0627\u0646\u06cc \u062f\u0627\u062e\u0644 onMessageReceived \u0627\u0646\u062c\u0627\u0645 \u0646\u062f\u0647\u06cc\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>onMessageReceived<\/code> \u0632\u0645\u0627\u0646 \u0645\u062d\u062f\u0648\u062f\u06cc \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627 \u062f\u0627\u0631\u0647. \u067e\u0631\u062f\u0627\u0632\u0634\u200c\u0647\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc \u0645\u062b\u0644 \u062f\u0627\u0646\u0644\u0648\u062f \u062a\u0635\u0648\u06cc\u0631 \u0628\u0632\u0631\u06af\u060c Sync \u0633\u0646\u06af\u06cc\u0646 \u06cc\u0627 \u0686\u0646\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u0628\u06a9\u0647 \u067e\u0634\u062a\u200c\u0633\u0631\u0647\u0645 \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0627\u062e\u0644 \u0627\u0648\u0646 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0646. Firebase \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0627\u0632 \u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647 \u0637\u0648\u0644 \u0645\u06cc\u200c\u06a9\u0634\u0646 \u0628\u0627 WorkManager \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646\u060c \u0686\u0648\u0646 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0645\u0645\u06a9\u0646\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u0637\u0648\u0644\u0627\u0646\u06cc Service \u0631\u0648 \u0645\u062a\u0648\u0642\u0641 \u06a9\u0646\u0646. (<a href=\"https:\/\/firebase.google.com\/docs\/cloud-messaging\/android\/receive-messages?utm_source=chatgpt.com\">Firebase<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>override fun onMessageReceived(\n    message: RemoteMessage\n) {\n    if (requiresLongSync(message)) {\n        notificationSyncScheduler.enqueue(message.data)\n    } else {\n        notificationHandler.handle(message)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onMessageReceived<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    message: <\/span><span style=\"color: #6F42C1\">RemoteMessage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #6F42C1\">requiresLongSync<\/span><span style=\"color: #24292E\">(message)) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        notificationSyncScheduler.<\/span><span style=\"color: #6F42C1\">enqueue<\/span><span style=\"color: #24292E\">(message.<\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    } <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        notificationHandler.<\/span><span style=\"color: #6F42C1\">handle<\/span><span style=\"color: #24292E\">(message)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>notificationSyncScheduler<\/code> \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 WorkManager \u0631\u0648 \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u06a9\u0627\u0631 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Service \u0641\u0642\u0637 \u062a\u0635\u0645\u06cc\u0645 \u0633\u0631\u06cc\u0639 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u06a9\u0627\u0631 \u0633\u0646\u06af\u06cc\u0646 \u0631\u0648 \u062e\u0648\u062f\u0634 \u0627\u0646\u062c\u0627\u0645 \u0646\u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0639\u06a9\u0633 \u062f\u0627\u062e\u0644 Notification<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u0636\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0632\u0631\u06af \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u060c \u0627\u0645\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u062a\u0635\u0648\u06cc\u0631 \u0627\u0632 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0645\u0645\u06a9\u0646\u0647 \u0632\u0645\u0627\u0646\u200c\u0628\u0631 \u0628\u0627\u0634\u0647. \u0646\u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 <code>onMessageReceived<\/code> \u0645\u0646\u062a\u0638\u0631 \u062f\u0627\u0646\u0644\u0648\u062f \u0637\u0648\u0644\u0627\u0646\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0628\u0645\u0648\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0631\u0627\u06cc \u0627\u0639\u0644\u0627\u0646 \u0636\u0631\u0648\u0631\u06cc\u0647\u060c WorkManager \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u0627\u0646\u0644\u0648\u062f \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647 \u0648 \u0628\u0639\u062f Notification \u06a9\u0627\u0645\u0644 \u0631\u0648 \u0628\u0633\u0627\u0632\u0647. \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0639\u0646\u0648\u0627\u0646\u060c \u0645\u062a\u0646 \u0648 \u0622\u06cc\u06a9\u0648\u0646 \u0633\u0627\u062f\u0647 \u06a9\u0627\u0641\u06cc \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0639\u06a9\u0633 \u0641\u0642\u0637 \u0686\u0648\u0646 \u0627\u0632 \u0646\u0638\u0631 \u0638\u0627\u0647\u0631\u06cc \u062c\u0630\u0627\u0628\u0647\u060c \u0627\u0631\u0632\u0634 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc\u060c \u0645\u0635\u0631\u0641 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648 \u062a\u0623\u062e\u06cc\u0631 \u0631\u0648 \u0646\u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f \u0645\u0645\u06a9\u0646\u0647 \u0686\u0646\u062f \u0628\u0627\u0631 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647 \u06cc\u0627 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u0639\u062f \u0627\u0632 Retry \u062f\u0648\u0628\u0627\u0631\u0647 \u0647\u0645\u0648\u0646 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u067e\u0631\u062f\u0627\u0632\u0634 \u06a9\u0646\u0647. \u0627\u06af\u0631 \u0647\u0631 \u0628\u0627\u0631 Notification \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0628\u0633\u0627\u0632\u06cc\u0645\u060c \u06a9\u0627\u0631\u0628\u0631 \u0686\u0646\u062f \u0627\u0639\u0644\u0627\u0646 \u06cc\u06a9\u0633\u0627\u0646 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u0647\u0631 \u067e\u06cc\u0627\u0645 \u06cc\u06a9 <code>eventId<\/code> \u06cc\u0627 <code>notificationId<\/code> \u067e\u0627\u06cc\u062f\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 Room \u062b\u0628\u062a \u06a9\u0646\u0647 \u0648 \u0642\u0628\u0644 \u0627\u0632 \u0646\u0645\u0627\u06cc\u0634 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647 \u0622\u06cc\u0627 \u0642\u0628\u0644\u0627\u064b \u067e\u0631\u062f\u0627\u0632\u0634 \u0634\u062f\u0647 \u06cc\u0627 \u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062f\u0644 \u062f\u0627\u062e\u0644\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0686\u0646\u06cc\u0646 \u0641\u06cc\u0644\u062f\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>data class NotificationPayload(\n    val eventId: String,\n    val type: NotificationType,\n    val entityId: Long?,\n    val title: String,\n    val body: String\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">NotificationPayload<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> eventId: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> type: <\/span><span style=\"color: #6F42C1\">NotificationType<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> entityId: <\/span><span style=\"color: #6F42C1\">Long<\/span><span style=\"color: #24292E\">?,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> title: <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> body: <\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u0628\u0627\u06cc\u062f \u0627\u0632 Backend \u0628\u06cc\u0627\u062f\u060c \u0686\u0648\u0646 Backend \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f\u0647. \u062a\u0648\u0644\u06cc\u062f \u06cc\u06a9 UUID \u062a\u0627\u0632\u0647 \u062f\u0631 \u06af\u0648\u0634\u06cc \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u067e\u06cc\u0627\u0645 \u062a\u06a9\u0631\u0627\u0631\u06cc \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification Inbox<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0639\u0644\u0627\u0646 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0645\u06a9\u0646\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0627\u06a9 \u0628\u0634\u0647 \u06cc\u0627 \u0627\u0635\u0644\u0627\u064b \u0628\u0647 \u062f\u0644\u06cc\u0644 Permission \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0646\u0634\u0647. \u0627\u06af\u0631 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u062c\u0631\u06cc\u0627\u0646 \u06a9\u0627\u0631\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u0647\u0645 \u0647\u0633\u062a\u0646\u060c \u0628\u0647\u062a\u0631\u0647 \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 Push Notification \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u062f\u0627\u062e\u0644 \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Backend \u0647\u0631 \u0627\u0639\u0644\u0627\u0646 \u0645\u0647\u0645 \u0631\u0648 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u062e\u0648\u062f\u0634 \u062b\u0628\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. Push \u0641\u0642\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0627\u062e\u0628\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0635\u0641\u062d\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0647\u0645 \u0644\u06cc\u0633\u062a \u06a9\u0627\u0645\u0644 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u060c \u0648\u0636\u0639\u06cc\u062a \u062e\u0648\u0627\u0646\u062f\u0647\u200c\u0634\u062f\u0647 \u0648 \u0645\u0642\u0635\u062f \u0647\u0631 \u0645\u0648\u0631\u062f \u0631\u0648 \u0627\u0632 API \u06cc\u0627 Room \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc\u060c FCM \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0646\u06cc\u0633\u062a. \u0627\u06af\u0631 Push \u06af\u0645 \u0628\u0634\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0639\u062f\u0627\u064b \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u062f\u0627\u062e\u0644 Inbox \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0628\u06cc\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Push Notification \u06cc\u06a9 \u0631\u0648\u0634 \u062a\u062d\u0648\u06cc\u0644 \u0641\u0648\u0631\u06cc\u0647.<\/li>\n\n\n\n<li>Notification Inbox \u0633\u0627\u0628\u0642\u0647 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u062a\u0641\u0627\u0642\u200c\u0647\u0627\u0633\u062a.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u062e\u0648\u0627\u0646\u062f\u0647\u200c\u0634\u062f\u0647 \u0648 \u062f\u06cc\u062f\u0647\u200c\u0634\u062f\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0635\u0641\u062d\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062f\u0627\u062e\u0644\u06cc\u060c \u0628\u0647\u062a\u0631\u0647 \u0628\u06cc\u0646 \u062a\u062d\u0648\u06cc\u0644 \u062f\u0627\u062f\u0647\u200c\u0634\u062f\u0647\u060c \u062f\u06cc\u062f\u0647\u200c\u0634\u062f\u0647 \u0648 \u062e\u0648\u0627\u0646\u062f\u0647\u200c\u0634\u062f\u0647 \u062a\u0641\u0627\u0648\u062a \u0642\u0627\u0626\u0644 \u0628\u0634\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 Notification \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0648\u0646 \u0631\u0648 \u0644\u0645\u0633 \u0646\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u062c\u0632\u0626\u06cc\u0627\u062a \u0627\u0648\u0646 \u0645\u0648\u0631\u062f \u0631\u0648 \u0628\u0627\u0632 \u0646\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Backend \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u0633\u0627\u0633 \u0646\u06cc\u0627\u0632 \u0645\u062d\u0635\u0648\u0644 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u0647 \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0627\u0639\u0644\u0627\u0646 Read \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0647. \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0639\u0644\u0627\u0646 \u06cc\u0627 \u0645\u0642\u0635\u062f \u0627\u0648\u0646 \u0631\u0648 \u0628\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0648\u0636\u0639\u06cc\u062a \u062e\u0648\u0627\u0646\u062f\u0647\u200c\u0634\u062f\u0647 \u062b\u0628\u062a \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0642\u0637 \u067e\u0627\u06a9 \u0634\u062f\u0646 Notification \u0627\u0632 System Tray \u0628\u0647 \u0645\u0639\u0646\u06cc \u062e\u0648\u0627\u0646\u062f\u0647 \u0634\u062f\u0646 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Topic Messaging<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">FCM \u0627\u0645\u06a9\u0627\u0646 \u0627\u0631\u0633\u0627\u0644 \u067e\u06cc\u0627\u0645 \u0628\u0647 Topic \u0631\u0648 \u0647\u0645 \u062f\u0627\u0631\u0647. \u0645\u062b\u0644\u0627\u064b \u0647\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f \u0628\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0639\u0636\u0648 Topic \u0645\u0634\u062e\u0635\u06cc \u0628\u0627\u0634\u0646 \u0648 \u0633\u0631\u0648\u0631 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u0627\u0639\u0636\u0627\u06cc \u0627\u0648\u0646 Topic \u0628\u0641\u0631\u0633\u062a\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 Topic \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062e\u0635\u0648\u0635\u06cc \u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0633\u062a. \u0646\u0628\u0627\u06cc\u062f \u0645\u062b\u0644\u0627\u064b \u0647\u0645\u0647 \u0635\u0627\u062d\u0628\u0627\u0646 \u06cc\u06a9 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u0628\u0627 Topic \u0639\u0645\u0648\u0645\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u0645 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062d\u0633\u0627\u0633 \u0631\u0648 \u062f\u0631 \u067e\u06cc\u0627\u0645 \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0634\u062e\u0635\u06cc \u0645\u062b\u0644 \u0631\u062f \u0634\u062f\u0646 \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u06cc\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u0627\u0631\u0633\u0627\u0644 \u0628\u0647 Device Token\u0647\u0627\u06cc \u0645\u0631\u062a\u0628\u0637 \u0627\u0645\u0646\u200c\u062a\u0631 \u0648 \u062f\u0642\u06cc\u0642\u200c\u062a\u0631\u0647. Topic \u0628\u06cc\u0634\u062a\u0631 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0648 \u063a\u06cc\u0631\u062d\u0633\u0627\u0633 \u0645\u0646\u0627\u0633\u0628\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0639\u0644\u0627\u0646 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0646\u0647 \u0645\u0634\u062e\u0635 \u06a9\u0646\u0647 \u0686\u0647 \u0646\u0648\u0639 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f. \u0645\u062b\u0644\u0627\u064b \u0645\u0645\u06a9\u0646\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0631\u062f \u0642\u06cc\u0645\u062a \u0631\u0648 \u0636\u0631\u0648\u0631\u06cc \u0628\u062f\u0648\u0646\u0647\u060c \u0627\u0645\u0627 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0631\u0648 \u0646\u062e\u0648\u0627\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u0627\u06cc\u0646 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u06cc\u0645\u062a\u200c\u0647\u0627<\/li>\n\n\n\n<li>\u0648\u0636\u0639\u06cc\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a<\/li>\n\n\n\n<li>\u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631<\/li>\n\n\n\n<li>\u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0647\u062a\u0631\u0647 \u062f\u0631 Backend \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0646\u060c \u0686\u0648\u0646 \u0633\u0631\u0648\u0631 \u0628\u0627\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0627\u0631\u0633\u0627\u0644 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647 \u0622\u06cc\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0686\u0646\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646\u06cc \u0631\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0647 \u06cc\u0627 \u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notification Channel\u0647\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u0633\u0637\u062d \u062f\u06cc\u06af\u0631\u06cc \u0627\u0632 \u06a9\u0646\u062a\u0631\u0644 \u0631\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u0630\u0627\u0631\u0646. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0648 \u0633\u0637\u062d \u062a\u0646\u0638\u06cc\u0645 \u062f\u0627\u0631\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062f\u0627\u062e\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0633\u0631\u0648\u0631 \u0686\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc\u06cc \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647. \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u06cc\u0633\u062a\u0645 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0627\u062c\u0627\u0632\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0686\u0647 Channel\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0628\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062d\u0633\u0627\u0633 \u0631\u0648\u06cc Lock Screen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0627\u0639\u0644\u0627\u0646 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0642\u0641\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0628\u0627\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062d\u0633\u0627\u0633 \u06cc\u0627 \u062e\u0635\u0648\u0635\u06cc \u0631\u0648 \u0628\u062f\u0648\u0646 \u0641\u06a9\u0631 \u062f\u0627\u062e\u0644 \u0639\u0646\u0648\u0627\u0646 \u0648 \u0645\u062a\u0646 \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0628\u0647 \u062c\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0645\u0644 \u0645\u0627\u0644\u06cc \u06cc\u0627 \u062c\u0632\u0626\u06cc\u0627\u062a \u062e\u0635\u0648\u0635\u06cc\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0636\u0639\u06cc\u062a \u06cc\u06a9\u06cc \u0627\u0632 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\u06cc \u062b\u0628\u062a\u200c\u0634\u062f\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 \u062c\u0632\u0626\u06cc\u0627\u062a \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u0634\u0647 \u0648 Authentication \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u06cc\u0632\u0627\u0646 \u062c\u0632\u0626\u06cc\u0627\u062a \u0627\u0639\u0644\u0627\u0646 \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u0633\u0627\u0633 \u062d\u0633\u0627\u0633\u06cc\u062a \u062f\u0627\u062f\u0647 \u0648 \u0633\u06cc\u0627\u0633\u062a \u062d\u0631\u06cc\u0645 \u062e\u0635\u0648\u0635\u06cc \u0645\u062d\u0635\u0648\u0644 \u062a\u0639\u06cc\u06cc\u0646 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u06cc Notification \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0634\u0644\u0648\u063a \u0634\u062f\u0646 Service \u0648 ViewModel\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a\u200c\u0647\u0627 \u0631\u0648 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062c\u062f\u0627 \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>PriceBanMessagingService<\/code> \u067e\u06cc\u0627\u0645 Firebase \u0648 Token \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>NotificationPayloadParser<\/code> \u062f\u0627\u062f\u0647 \u062e\u0627\u0645 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0647 \u0645\u062f\u0644 \u062f\u0627\u062e\u0644\u06cc \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>NotificationHandler<\/code> \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u067e\u06cc\u0627\u0645 \u0646\u06cc\u0627\u0632 \u0628\u0647 Sync\u060c \u0627\u0639\u0644\u0627\u0646 \u0633\u06cc\u0633\u062a\u0645 \u06cc\u0627 Event \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>NotificationFactory<\/code> \u0638\u0627\u0647\u0631 Notification\u060c Channel\u060c Icon \u0648 PendingIntent \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>NotificationRepository<\/code> \u062b\u0628\u062a \u0648 \u062d\u0630\u0641 Device Token\u060c \u062f\u0631\u06cc\u0627\u0641\u062a Inbox \u0648 \u062b\u0628\u062a Read Status \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>NotificationSyncWorker<\/code> \u06a9\u0627\u0631\u0647\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc \u06cc\u0627 \u0642\u0627\u0628\u0644 Retry \u0631\u0648 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ViewModel\u0647\u0627\u06cc \u0635\u0641\u062d\u0647\u200c\u0647\u0627 \u0641\u0642\u0637 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc Notification Inbox \u06cc\u0627 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 UI \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0646. \u0627\u0648\u0646\u200c\u0647\u0627 \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u0626\u0648\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u0633\u062a\u0642\u06cc\u0645 \u067e\u06cc\u0627\u0645 FCM \u0628\u0627\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0631\u06cc\u0627\u0646 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0639\u0644\u0627\u0646 \u0642\u06cc\u0645\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u06cc\u06a9\u06cc \u0627\u0632 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627\u06cc \u062b\u0628\u062a\u200c\u0634\u062f\u0647 \u0631\u0648 \u0631\u062f \u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Backend \u0627\u0628\u062a\u062f\u0627 \u0648\u0636\u0639\u06cc\u062a \u0642\u06cc\u0645\u062a \u0631\u0648 \u062f\u0631 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u0647. \u0628\u0639\u062f \u06cc\u06a9 Notification Event \u0628\u0627 \u0646\u0648\u0639 <code>PRICE_REJECTED<\/code> \u0628\u0631\u0627\u06cc \u0635\u0627\u062d\u0628 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647. \u0633\u0631\u0648\u0631 Token\u0647\u0627\u06cc \u0641\u0639\u0627\u0644 \u0627\u0648\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 FCM \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0631\u0648\u06cc \u06af\u0648\u0634\u06cc\u060c <code>FirebaseMessagingService<\/code> \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. Parser \u0646\u0648\u0639 \u067e\u06cc\u0627\u0645 \u0648 \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0645\u06cc\u200c\u06a9\u0646\u0647. Repository \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 Sync \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 NotificationFactory \u0627\u0639\u0644\u0627\u0646\u06cc \u0628\u0627 \u0645\u062a\u0646 \u0645\u0646\u0627\u0633\u0628 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0644\u0645\u0633 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 Session \u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0634\u0647\u060c \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644 \u0645\u0631\u062a\u0628\u0637 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 Login \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647\u060c \u0645\u0642\u0635\u062f \u062a\u0627 \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062c\u0631\u06cc\u0627\u0646 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647 Notification \u0641\u0642\u0637 \u0622\u062e\u0631\u06cc\u0646 \u062d\u0644\u0642\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u0647. \u0627\u0635\u0644 \u0627\u062a\u0641\u0627\u0642 \u0631\u0648\u06cc Backend \u0631\u062e \u062f\u0627\u062f\u0647 \u0648 \u0627\u0639\u0644\u0627\u0646 \u0641\u0642\u0637 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u0631\u0633\u0648\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">State \u0627\u0639\u0644\u0627\u0646 \u0628\u0627 State \u0635\u0641\u062d\u0647 \u0641\u0631\u0642 \u062f\u0627\u0631\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Notification \u0633\u06cc\u0633\u062a\u0645 \u0686\u06cc\u0632\u06cc \u0646\u06cc\u0633\u062a \u06a9\u0647 \u062f\u0627\u062e\u0644 <code>ProductsUiState<\/code> \u06cc\u0627 <code>DashboardUiState<\/code> \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645. \u0645\u0645\u06a9\u0646\u0647 \u0627\u0639\u0644\u0627\u0646 \u0632\u0645\u0627\u0646\u06cc \u0628\u0631\u0633\u0647 \u06a9\u0647 \u0647\u06cc\u0686\u200c\u06a9\u062f\u0648\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647\u200c\u0647\u0627 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0639\u0644\u0627\u0646 \u06cc\u06a9 \u0642\u0627\u0628\u0644\u06cc\u062a \u0633\u0631\u0627\u0633\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a \u0648 \u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u0644 \u0627\u0632 Screen\u0647\u0627\u06cc \u0645\u0634\u062e\u0635 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0628\u062a\u0647 \u0646\u062a\u06cc\u062c\u0647 \u0627\u0639\u0644\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Room \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647 \u0648 \u0628\u0639\u062f State \u0635\u0641\u062d\u0647\u200c\u0647\u0627 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u067e\u06cc\u0627\u0645 <code>PRODUCT_UPDATED<\/code> \u0628\u0627\u0639\u062b Sync \u0645\u062d\u0635\u0648\u0644 \u0645\u06cc\u0634\u0647 \u0648 \u0686\u0648\u0646 Room \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647\u060c \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0647\u0645 \u0646\u0633\u062e\u0647 \u062a\u0627\u0632\u0647 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0627\u0631\u062a\u0628\u0627\u0637 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647 \u0645\u0634\u062a\u0631\u06a9 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 Notification Service \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b ViewModel \u0635\u0641\u062d\u0647 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification \u062a\u0636\u0645\u06cc\u0646 \u0635\u062f\u062f\u0631\u0635\u062f\u06cc \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Push Notification \u0646\u0628\u0627\u06cc\u062f \u062a\u0646\u0647\u0627 \u0645\u06a9\u0627\u0646\u06cc\u0632\u0645 \u0627\u062c\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u062d\u06cc\u0627\u062a\u06cc \u0628\u0627\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0645\u062f\u062a \u0632\u06cc\u0627\u062f\u06cc \u0622\u0641\u0644\u0627\u06cc\u0646 \u0628\u0627\u0634\u0647\u060c Token \u0645\u0646\u0642\u0636\u06cc \u0628\u0634\u0647\u060c \u0627\u0639\u0644\u0627\u0646 \u062a\u0648\u0633\u0637 \u0633\u06cc\u0633\u062a\u0645 \u0645\u062d\u062f\u0648\u062f \u0628\u0634\u0647 \u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 Permission \u0631\u0648 \u062e\u0627\u0645\u0648\u0634 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u062a\u06cc FCM \u062f\u0631 \u0628\u0639\u0636\u06cc \u0634\u0631\u0627\u06cc\u0637 \u0645\u0645\u06a9\u0646\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0645\u0639\u0648\u0642 \u0631\u0648 \u062d\u0630\u0641 \u06a9\u0646\u0647\u061b \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0631\u0633\u0645\u06cc \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0646 \u062f\u0631 \u0686\u0646\u06cc\u0646 \u062d\u0627\u0644\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u06a9 Sync \u06a9\u0627\u0645\u0644 \u0628\u0627 \u0633\u0631\u0648\u0631 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. (<a href=\"https:\/\/firebase.google.com\/docs\/cloud-messaging\/android\/receive-messages?utm_source=chatgpt.com\">Firebase<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Backend \u0646\u0628\u0627\u06cc\u062f \u062a\u0635\u0648\u0631 \u06a9\u0646\u0647 \u0686\u0648\u0646 Push \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u062d\u062a\u0645\u0627\u064b \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062f\u06cc\u062f\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0647\u0645 \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0633\u0631\u0648\u0631 \u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 Notification Inbox \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0647\u0631 \u0628\u062e\u0634<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Backend \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0627\u0631\u0632\u0634 \u0627\u0639\u0644\u0627\u0646 \u062f\u0627\u0631\u0647\u060c \u0645\u062e\u0627\u0637\u0628 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0639\u0644\u0627\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0631\u0627\u06cc FCM \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FCM \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0647 \u0646\u0635\u0628 \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>FirebaseMessagingService<\/code> \u067e\u06cc\u0627\u0645 \u06cc\u0627 Token \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0633\u0631\u06cc\u0639 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u06a9\u0644\u0627\u0633 \u0645\u0633\u0626\u0648\u0644 \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>NotificationHandler<\/code> \u0646\u0648\u0639 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0648 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 Notification\u060c Sync \u06cc\u0627 WorkManager \u0644\u0627\u0632\u0645 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>NotificationFactory<\/code> \u0638\u0627\u0647\u0631 \u0627\u0639\u0644\u0627\u0646 \u0648 \u0645\u0642\u0635\u062f \u0644\u0645\u0633 \u0627\u0648\u0646 \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repository\u060c Token \u062f\u0633\u062a\u06af\u0627\u0647 \u0648 \u0633\u0627\u0628\u0642\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0631\u0648 \u0628\u0627 Backend \u0647\u0645\u0627\u0647\u0646\u06af \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Room \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Inbox \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u060c \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634\u200c\u0634\u062f\u0647 \u0648 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062a\u0627\u0632\u0647\u200c\u0634\u062f\u0647 \u0631\u0648 \u0646\u06af\u0647 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compose \u0641\u0642\u0637 \u0635\u0641\u062d\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0639\u0644\u0627\u0646\u060c Notification Inbox \u06cc\u0627 \u0645\u0642\u0635\u062f\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0627\u0639\u0644\u0627\u0646 \u0648\u0627\u0631\u062f\u0634 \u0634\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification \u0641\u0642\u0637 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0628\u0627\u0644\u0627\u06cc \u06af\u0648\u0634\u06cc \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0638\u0627\u0647\u0631\u060c \u06a9\u0627\u0631\u0628\u0631 \u06cc\u06a9 \u0639\u0646\u0648\u0627\u0646 \u0648 \u0645\u062a\u0646 \u06a9\u0648\u062a\u0627\u0647 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647. \u0627\u0645\u0627 \u067e\u0634\u062a \u0647\u0645\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646\u060c \u0686\u0646\u062f \u0633\u06cc\u0633\u062a\u0645 \u0628\u0627 \u0647\u0645 \u0647\u0645\u06a9\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0646: Backend \u0631\u0648\u06cc\u062f\u0627\u062f \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647\u060c FCM \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0645\u0646\u062a\u0642\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Android Permission \u0648 Channel \u0631\u0648 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Service \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Handler \u062a\u0635\u0645\u06cc\u0645 \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 Navigation \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0647 \u0635\u0641\u062d\u0647 \u062f\u0631\u0633\u062a \u0645\u06cc\u200c\u0631\u0633\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>Notification \u0646\u0628\u0627\u06cc\u062f \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u062f\u0627\u062f\u0647 \u06cc\u0627 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0628\u0627\u0634\u0647<\/strong>. \u0627\u0639\u0644\u0627\u0646 \u0641\u0642\u0637 \u062e\u0628\u0631 \u0645\u06cc\u062f\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0631\u062e \u062f\u0627\u062f\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648\u0627\u0642\u0639\u06cc \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0648 Room \u0642\u0631\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646 \u0648 \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631\u060c \u0627\u0632 \u0647\u0645\u0648\u0646 \u0645\u0646\u0627\u0628\u0639 \u0645\u0639\u062a\u0628\u0631 \u062e\u0648\u0646\u062f\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0633\u06cc\u0631 Notification \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Backend \u0628\u0639\u062f \u0627\u0632 \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f \u0645\u0647\u0645\u060c \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0631\u0627\u06cc Token\u0647\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 FCM \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647. \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062f\u0631 <code>FirebaseMessagingService<\/code> \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u0631\u0627\u0633\u0627\u0633 \u0646\u0648\u0639 \u0627\u0648\u0646 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0648 Sync \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Notification \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u062f\u0627\u062e\u0644 Channel \u062f\u0631\u0633\u062a \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647 \u0648 \u0628\u0627 \u0644\u0645\u0633 \u0627\u0639\u0644\u0627\u0646\u060c \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0627 \u062d\u0641\u0638 \u0642\u0648\u0627\u0639\u062f Authentication \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 \u0628\u062e\u0634 \u0645\u0631\u062a\u0628\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">35. Firebase Cloud Messaging<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0628\u062e\u0634 \u06f1:<\/strong> \u0645\u0642\u062f\u0645\u0647\u060c \u0641\u0644\u0633\u0641\u0647 FCM\u060c \u0645\u0634\u06a9\u0644 \u0627\u0631\u062a\u0628\u0627\u0637 \u0645\u0633\u062a\u0642\u06cc\u0645\u060c \u0645\u0639\u0645\u0627\u0631\u06cc\u060c Firebase Project\u060c Token<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u067e\u0646\u062c\u0645<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Firebase Cloud Messaging (FCM)<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0627\u0635\u0644\u0627\u064b \u0628\u0647 FCM \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u062a\u0648\u06cc \u0627\u06cc\u0646 \u06a9\u062a\u0627\u0628 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u0627\u0631\u062a\u0628\u0627\u0637\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 Backend \u06cc\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0645\u0634\u062a\u0631\u06a9 \u062f\u0627\u0634\u062a\u0646\u061b \u0647\u0645\u06cc\u0634\u0647 <strong>\u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0648 \u0634\u0631\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0631\u062f<\/strong>. \u0645\u062b\u0644\u0627\u064b \u06a9\u0627\u0631\u0628\u0631 \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0628\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0631\u062f\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0627\u062f \u0648 \u0644\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u0645\u06cc\u200c\u06af\u0631\u0641\u062a. \u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u062f\u06a9\u0645\u0647 Refresh \u0631\u0648 \u0645\u06cc\u200c\u0632\u062f \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u062f\u0627\u0646\u0644\u0648\u062f \u0645\u06cc\u200c\u06a9\u0631\u062f. \u062d\u062a\u06cc \u0648\u0642\u062a\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 Pagination \u06cc\u0627 Infinite Scroll \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u06cc\u0645\u060c \u0628\u0627\u0632 \u0647\u0645 \u0627\u06cc\u0646 \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0648\u062f \u06a9\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u0631\u0641\u062a \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0628\u0647 Backend \u0648\u0635\u0644 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u06cc\u0647 \u062f\u0633\u062a\u0647 \u0627\u0632 \u0627\u062a\u0641\u0627\u0642\u200c\u0647\u0627 \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0631\u0639\u06a9\u0633\u0646. \u0641\u0631\u0636 \u06a9\u0646 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0631\u062f\u0647\u060c \u06cc\u0627 \u06cc\u06a9 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0628\u0639\u062f \u0627\u0632 \u0628\u0631\u0631\u0633\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647\u060c \u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u06cc\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u062f\u06cc\u06af\u0647 \u0648\u0627\u0631\u062f \u062d\u0633\u0627\u0628\u0634 \u0634\u062f\u0647. \u062a\u0648\u06cc \u0627\u06cc\u0646 \u0634\u0631\u0627\u06cc\u0637 \u062f\u06cc\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0647\u06cc\u0686 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u062f\u0627\u062f\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u062e\u0648\u0627\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062c\u062f\u06cc\u062f\u06cc \u0628\u0647 \u0633\u0631\u0648\u0631 \u0628\u0641\u0631\u0633\u062a\u0647. \u0627\u06cc\u0646 \u0628\u0627\u0631 <strong>\u0633\u0631\u0648\u0631<\/strong> \u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u0627\u062a\u0641\u0627\u0642 \u0645\u0647\u0645\u06cc \u0627\u0641\u062a\u0627\u062f\u0647 \u0648 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u0647 \u0647\u0631\u0686\u0647 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631 \u0627\u06cc\u0646 \u062e\u0628\u0631 \u0631\u0648 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0633\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u0633\u0624\u0627\u0644 \u0627\u0635\u0644\u06cc \u0645\u0637\u0631\u062d \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u06cc\u0627 \u0627\u0635\u0644\u0627\u064b \u0686\u0646\u062f \u0633\u0627\u0639\u062a \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0627\u062c\u0631\u0627 \u0646\u0634\u062f\u0647\u060c Backend \u0686\u0637\u0648\u0631\u06cc \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u062e\u0628\u0631 \u0631\u0648 \u0628\u0647 \u06af\u0648\u0634\u06cc \u0628\u0631\u0633\u0648\u0646\u0647\u061f \u0622\u06cc\u0627 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0635\u0644 \u0628\u0634\u0647\u061f \u062c\u0648\u0627\u0628 \u06a9\u0648\u062a\u0627\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0646\u0647. \u0648 \u062f\u0642\u06cc\u0642\u0627\u064b \u0647\u0645\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 Firebase Cloud Messaging \u0648\u0627\u0631\u062f \u062f\u0627\u0633\u062a\u0627\u0646 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 Backend \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06af\u0648\u0634\u06cc \u0648\u0635\u0644 \u0628\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644\u06cc\u0646 \u0627\u06cc\u062f\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0647 \u0630\u0647\u0646 \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u0645\u06cc\u200c\u0631\u0633\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062e\u0628 Backend \u062e\u0648\u062f\u0634 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06af\u0648\u0634\u06cc \u067e\u06cc\u0627\u0645 \u0628\u0641\u0631\u0633\u062a\u0647. \u0631\u0648\u06cc \u06a9\u0627\u063a\u0630 \u0627\u06cc\u0646 \u0627\u06cc\u062f\u0647 \u0633\u0627\u062f\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u0627\u062f\u060c \u0648\u0644\u06cc \u0648\u0642\u062a\u06cc \u0648\u0627\u0631\u062f \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0645\u06cc\u0634\u06cc\u060c \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u063a\u06cc\u0631\u0639\u0645\u0644\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644 \u0627\u0632 \u0647\u0645\u0647\u060c \u06af\u0648\u0634\u06cc \u06a9\u0627\u0631\u0628\u0631 IP \u062b\u0627\u0628\u062a\u06cc \u0646\u062f\u0627\u0631\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0627\u0644\u0627\u0646 \u0631\u0648\u06cc \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062e\u0648\u0646\u0647 \u0628\u0627\u0634\u0647\u060c \u067e\u0646\u062c \u062f\u0642\u06cc\u0642\u0647 \u0628\u0639\u062f \u0631\u0648\u06cc \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0645\u0648\u0628\u0627\u06cc\u0644\u060c \u06cc\u06a9 \u0633\u0627\u0639\u062a \u0628\u0639\u062f \u0628\u0647 Wi-Fi \u0645\u062d\u0644 \u06a9\u0627\u0631 \u0648\u0635\u0644 \u0628\u0634\u0647 \u0648 \u0634\u0628 \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0648\u06cc \u06cc\u0647 \u0634\u0628\u06a9\u0647 \u062f\u06cc\u06af\u0647 \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Backend \u0627\u0635\u0644\u0627\u064b \u0646\u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u0627\u0644\u0627\u0646 \u06af\u0648\u0634\u06cc \u06a9\u062c\u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 \u0637\u0631\u0641 \u062f\u06cc\u06af\u0647\u060c \u0628\u06cc\u0634\u062a\u0631 \u06af\u0648\u0634\u06cc\u200c\u0647\u0627 \u067e\u0634\u062a NAT \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0646 \u0648 \u0627\u062a\u0635\u0627\u0644 \u0648\u0631\u0648\u062f\u06cc \u0631\u0648 \u0642\u0628\u0648\u0644 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0646. \u06cc\u0639\u0646\u06cc \u062d\u062a\u06cc \u0627\u06af\u0631 IP \u0641\u0639\u0644\u06cc \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0648 \u0647\u0645 \u0628\u062f\u0648\u0646\u06cc\u060c \u0628\u0627\u0632 \u0647\u0645 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u062c\u0627\u0632\u0647 \u0646\u062f\u0627\u0631\u06cc \u0627\u0632 \u0628\u06cc\u0631\u0648\u0646 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u0627\u0648\u0646 \u0648\u0635\u0644 \u0628\u0634\u06cc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0647 \u0645\u0634\u06a9\u0644 \u062f\u06cc\u06af\u0647 \u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647. \u062d\u062a\u06cc \u0645\u0645\u06a9\u0646\u0647 \u062e\u0648\u062f \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0631\u0627\u06cc \u0622\u0632\u0627\u062f \u06a9\u0631\u062f\u0646 \u062d\u0627\u0641\u0638\u0647\u060c Process \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0686\u0646\u062f \u0633\u0627\u0639\u062a \u067e\u06cc\u0634 \u0645\u062a\u0648\u0642\u0641 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0627\u0635\u0644\u0627\u064b \u0686\u06cc\u0632\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647 \u06a9\u0647 Backend \u0628\u062e\u0648\u0627\u062f \u0628\u0627\u0647\u0627\u0634 \u0635\u062d\u0628\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 \u0627\u06cc\u0646 \u0633\u0624\u0627\u0644 \u067e\u06cc\u0634 \u0645\u06cc\u0627\u062f \u06a9\u0647 \u067e\u0633 \u062a\u0644\u06af\u0631\u0627\u0645\u060c \u0648\u0627\u062a\u0633\u0627\u067e \u06cc\u0627 \u0627\u06cc\u0646\u0633\u062a\u0627\u06af\u0631\u0627\u0645 \u0686\u0637\u0648\u0631\u06cc \u0627\u06cc\u0646 \u0647\u0645\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0644\u062d\u0638\u0647\u200c\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0646\u061f \u0622\u06cc\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u06a9 \u0627\u062a\u0635\u0627\u0644 \u062f\u0627\u0626\u0645\u06cc \u0628\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc\u200c\u0627\u0641\u062a\u0627\u062f\u060c \u0628\u0627\u062a\u0631\u06cc \u06af\u0648\u0634\u06cc \u0638\u0631\u0641 \u0686\u0646\u062f \u0633\u0627\u0639\u062a \u062e\u0627\u0644\u06cc \u0645\u06cc\u200c\u0634\u062f. \u062a\u0635\u0648\u0631 \u06a9\u0646 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0647\u0631 \u06a9\u0627\u0631\u0628\u0631 \u06f5\u06f0 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0635\u0628 \u0628\u0627\u0634\u0647 \u0648 \u0647\u0631 \u06a9\u062f\u0648\u0645 \u0628\u062e\u0648\u0627\u0646 \u06cc\u06a9 \u0627\u0631\u062a\u0628\u0627\u0637 \u062f\u0627\u0626\u0645\u06cc \u0628\u0627 \u0633\u0631\u0648\u0631\u0634\u0648\u0646 \u0646\u06af\u0647 \u062f\u0627\u0631\u0646. \u0647\u0645 \u0645\u0635\u0631\u0641 \u0628\u0627\u062a\u0631\u06cc \u0648\u062d\u0634\u062a\u0646\u0627\u06a9 \u0645\u06cc\u200c\u0634\u062f\u060c \u0647\u0645 \u0645\u0635\u0631\u0641 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648 \u0647\u0645 \u062d\u0627\u0641\u0638\u0647 \u062f\u0633\u062a\u06af\u0627\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0632 \u0633\u0627\u0644\u200c\u0647\u0627 \u0642\u0628\u0644 \u06cc\u06a9 \u0631\u0627\u0647\u200c\u062d\u0644 \u0645\u0634\u062a\u0631\u06a9 \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0641\u0644\u0633\u0641\u0647 \u0627\u0635\u0644\u06cc FCM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u062f\u0647 FCM \u062e\u06cc\u0644\u06cc \u0647\u0648\u0634\u0645\u0646\u062f\u0627\u0646\u0647 \u0648 \u062f\u0631 \u0639\u06cc\u0646 \u062d\u0627\u0644 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u06a9 \u0627\u062a\u0635\u0627\u0644 \u062f\u0627\u0626\u0645\u06cc \u0628\u0627 \u0633\u0631\u0648\u0631 \u062e\u0648\u062f\u0634 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0641\u0642\u0637 <strong>\u06cc\u06a9 \u0627\u0631\u062a\u0628\u0627\u0637 \u062f\u0627\u0626\u0645\u06cc<\/strong> \u0628\u06cc\u0646 \u06af\u0648\u0634\u06cc \u0648 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u06af\u0648\u06af\u0644 \u0628\u0631\u0642\u0631\u0627\u0631 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 \u0627\u0631\u062a\u0628\u0627\u0637 \u062a\u0648\u0633\u0637 Google Play Services \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u0634\u0647 \u0648 \u0647\u0645\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0632 FCM \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u060c \u0627\u0632 \u0647\u0645\u06cc\u0646 \u0627\u0631\u062a\u0628\u0627\u0637 \u0645\u0634\u062a\u0631\u06a9 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0647\u200c\u0647\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0631 \u06a9\u062f\u0648\u0645 \u06cc\u06a9 \u0627\u062a\u0635\u0627\u0644 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u060c \u0641\u0642\u0637 \u06cc\u06a9 \u0627\u0631\u062a\u0628\u0627\u0637 \u0647\u0645\u06cc\u0634\u0647 \u0641\u0639\u0627\u0644 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u0648 \u06af\u0648\u06af\u0644 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0647\u0645\u0648\u0646 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646\u0627\u0633\u0628 \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u062a\u06cc\u062c\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0645\u0635\u0631\u0641 \u0628\u0627\u062a\u0631\u06cc \u062e\u06cc\u0644\u06cc \u06a9\u0645\u062a\u0631 \u0645\u06cc\u0634\u0647.<\/li>\n\n\n\n<li>\u0645\u0635\u0631\u0641 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/li>\n\n\n\n<li>\u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0647\u0645\u06cc\u0634\u0647 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0628\u0627\u0634\u0647.<\/li>\n\n\n\n<li>Backend \u0647\u0645 \u062f\u06cc\u06af\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u062f\u0646\u0628\u0627\u0644 \u06af\u0648\u0634\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u06af\u0631\u062f\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0648\u0627\u0642\u0639 \u06af\u0648\u06af\u0644 \u0646\u0642\u0634 \u06cc\u06a9 <strong>\u0648\u0627\u0633\u0637\u0647 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f<\/strong> \u0628\u06cc\u0646 Backend \u0648 \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0648 \u0628\u0627\u0632\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0645\u0627\u0631\u06cc FCM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u06cc\u0645 \u06a9\u0644 \u0645\u0633\u06cc\u0631 \u062d\u0631\u06a9\u062a \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062e\u06cc\u0644\u06cc \u0633\u0627\u062f\u0647 \u0628\u0628\u06cc\u0646\u06cc\u0645\u060c \u062f\u0627\u0633\u062a\u0627\u0646 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0627\u06cc\u0646 \u0634\u06a9\u0644\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644\u060c Backend \u0645\u062a\u0648\u062c\u0647 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u06cc\u06a9 \u0627\u062a\u0641\u0627\u0642 \u0645\u0647\u0645 \u0627\u0641\u062a\u0627\u062f\u0647. \u0645\u062b\u0644\u0627\u064b \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647. Backend \u062e\u0648\u062f\u0634 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0627 \u06af\u0648\u0634\u06cc \u0635\u062d\u0628\u062a \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u0644\u06a9\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0631\u0627\u06cc Firebase Cloud Messaging \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FCM \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u06a9\u062f\u0648\u0645 \u062f\u0633\u062a\u06af\u0627\u0647\u0647 \u0648 \u0628\u0639\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 Google Play Services \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u06af\u0648\u0634\u06cc \u0645\u0646\u0627\u0633\u0628 \u0645\u06cc\u200c\u0631\u0633\u0648\u0646\u0647. \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u062c\u0627\u0632\u0647 \u0628\u062f\u0647\u060c \u067e\u06cc\u0627\u0645 \u0628\u0647 \u062f\u0627\u062e\u0644 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u06cc\u200c\u0631\u0633\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u06cc\u0645 \u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 \u062e\u06cc\u0644\u06cc \u062e\u0644\u0627\u0635\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645\u060c \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a\u0647:<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Backend<br>\u2502<br>\u25bc<br>Firebase Cloud Messaging<br>\u2502<br>\u25bc<br>Google Play Services<br>\u2502<br>\u25bc<br>Android Device<br>\u2502<br>\u25bc<br>Your App<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 FCM \u0641\u0642\u0637 <strong>\u0645\u0633\u06cc\u0631 \u0627\u0646\u062a\u0642\u0627\u0644 \u067e\u06cc\u0627\u0645<\/strong> \u0631\u0648 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062e\u0648\u062f\u0634 \u062a\u0635\u0645\u06cc\u0645 \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0686\u0647 \u067e\u06cc\u0627\u0645\u06cc \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647\u060c \u0686\u0647 \u06a9\u0633\u06cc \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647 \u06cc\u0627 \u0628\u0639\u062f \u0627\u0632 \u0631\u0633\u06cc\u062f\u0646 \u067e\u06cc\u0627\u0645 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0628\u06cc\u0641\u062a\u0647. \u0647\u0645\u0647 \u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645\u200c\u0647\u0627 \u062f\u0627\u062e\u0644 Backend \u06cc\u0627 \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">FCM \u062c\u0627\u06cc Backend \u0631\u0648 \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0639\u0636\u06cc\u200c\u0647\u0627 \u0628\u0639\u062f \u0627\u0632 \u0622\u0634\u0646\u0627 \u0634\u062f\u0646 \u0628\u0627 Firebase \u0641\u06a9\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u062f\u06cc\u06af\u0647 Backend \u062e\u06cc\u0644\u06cc \u0627\u0647\u0645\u06cc\u062a \u0646\u062f\u0627\u0631\u0647 \u0648 \u06af\u0648\u06af\u0644 \u0647\u0645\u0647 \u06a9\u0627\u0631\u0647\u0627 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647. \u0627\u06cc\u0646 \u0628\u0631\u062f\u0627\u0634\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u0627\u0634\u062a\u0628\u0627\u0647\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0642\u06cc\u0645\u062a \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647. \u0627\u06cc\u0646 Backend\u0640\u0647 \u06a9\u0647 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u062a\u0641\u0627\u0642 \u0627\u0641\u062a\u0627\u062f\u0647\u060c \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0686\u0647 \u06a9\u0627\u0631\u0628\u0631\u0647\u0627\u06cc\u06cc \u0628\u0627\u06cc\u062f \u0627\u0632 \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u0627\u062e\u0628\u0631 \u0628\u0634\u0646\u060c \u0645\u062a\u0646 \u067e\u06cc\u0627\u0645 \u0686\u06cc \u0628\u0627\u0634\u0647 \u0648 \u0622\u06cc\u0627 \u0627\u0635\u0644\u0627\u064b \u0644\u0627\u0632\u0645 \u0647\u0633\u062a \u067e\u06cc\u0627\u0645\u06cc \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647 \u06cc\u0627 \u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FCM \u0647\u06cc\u0686 \u0627\u0637\u0644\u0627\u0639\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0646\u062f\u0627\u0631\u0647. \u0627\u0632 \u062f\u06cc\u062f \u06af\u0648\u06af\u0644\u060c \u0647\u0645\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0641\u0642\u0637 \u0686\u0646\u062f \u0628\u0627\u06cc\u062a \u062f\u0627\u062f\u0647 \u0647\u0633\u062a\u0646 \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0646\u0642\u0637\u0647 A \u0628\u0647 \u0646\u0642\u0637\u0647 B \u0645\u0646\u062a\u0642\u0644 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0648\u0627\u0642\u0639 \u0645\u06cc\u0634\u0647 \u06af\u0641\u062a Backend \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647\u060c \u0648\u0644\u06cc FCM \u0641\u0642\u0637 \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Firebase Project \u0686\u0647 \u0646\u0642\u0634\u06cc \u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u062a\u0648\u0646\u0647 \u0627\u0632 FCM \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0647\u060c \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 Firebase \u06cc\u06a9 Project \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0634\u0627\u06cc\u062f \u0627\u0648\u0644\u0634 \u0627\u06cc\u0646 Project \u0641\u0642\u0637 \u0634\u0628\u06cc\u0647 \u06cc\u06a9 \u067e\u0648\u0634\u0647 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u0647\u060c \u0648\u0644\u06cc \u062f\u0631 \u0648\u0627\u0642\u0639 \u0646\u0642\u0634 \u062e\u06cc\u0644\u06cc \u0645\u0647\u0645\u200c\u062a\u0631\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06cc\u06a9 Project \u062f\u0627\u062e\u0644 Firebase \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u060c \u06af\u0648\u06af\u0644 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u062a \u06cc\u06a9 \u0647\u0648\u06cc\u062a \u0645\u0634\u062e\u0635 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0632 \u0627\u0648\u0646 \u0644\u062d\u0638\u0647 \u0628\u0647 \u0628\u0639\u062f \u0647\u0631 \u067e\u06cc\u0627\u0645\u06cc \u06a9\u0647 \u0627\u0632 Backend \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0647\u060c \u0628\u0647 \u0647\u0645\u06cc\u0646 Project \u0646\u0633\u0628\u062a \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0641\u0642\u0637 \u062f\u0633\u062a\u06af\u0627\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0639\u0636\u0648 \u0647\u0645\u06cc\u0646 Project \u0647\u0633\u062a\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0627\u0648\u0646 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0632\u0628\u0627\u0646 \u0633\u0627\u062f\u0647\u060c Project \u0645\u062b\u0644 \u06cc\u06a9 \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0628\u0632\u0631\u06af\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0648 \u06cc\u06a9\u06cc \u0627\u0632 \u0648\u0627\u062d\u062f\u0647\u0627\u06cc \u0627\u0648\u0646 \u0633\u0627\u062e\u062a\u0645\u0627\u0646\u0647. \u0627\u06af\u0631 Backend \u0628\u062e\u0648\u0627\u062f \u067e\u06cc\u0627\u0645\u06cc \u0628\u0641\u0631\u0633\u062a\u0647\u060c \u0628\u0627\u06cc\u062f \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u062f\u0648\u0646\u0647 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06a9\u062f\u0648\u0645 \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0648 \u06a9\u062f\u0648\u0645 \u0648\u0627\u062d\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 \u0645\u0648\u0642\u0639 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc Firebase \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0641\u0627\u06cc\u0644\u06cc \u0628\u0647 \u0627\u0633\u0645 <strong>google-services.json<\/strong> \u062f\u0627\u062e\u0644 \u067e\u0631\u0648\u0698\u0647 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u062a\u0627\u0632\u0647\u200c\u06a9\u0627\u0631 \u0641\u0642\u0637 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0631\u0648 \u06a9\u067e\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0648 \u062c\u0644\u0648 \u0645\u06cc\u0631\u0646\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u062f\u0648\u0646\u0646 \u0627\u0635\u0644\u0627\u064b \u0686\u0631\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u062f\u0631 \u0648\u0627\u0642\u0639 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc Firebase \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647\u061b \u0645\u062b\u0644 \u0634\u0646\u0627\u0633\u0647 \u067e\u0631\u0648\u0698\u0647\u060c \u0634\u0646\u0627\u0633\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u06a9\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u062f\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0639\u0636\u0648 \u06a9\u062f\u0648\u0645 Firebase Project \u0647\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0645\u062d\u062a\u0648\u06cc\u0627\u062a \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0631\u0648 \u062d\u0641\u0638 \u06a9\u0646\u06cc \u06cc\u0627 \u062d\u062a\u06cc \u062a\u06a9\u200c\u062a\u06a9 \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u0634 \u0631\u0648 \u0628\u0634\u0646\u0627\u0633\u06cc. \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0645\u0647\u0645\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u062f\u0648\u0646\u06cc \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646 \u0627\u0631\u062a\u0628\u0627\u0637 \u0627\u0648\u0644\u06cc\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0635\u0644\u0627\u064b \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0648\u0627\u0631\u062f \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 Firebase \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Registration Token \u0686\u06cc\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0633\u0624\u0627\u0644 \u0645\u0647\u0645 \u0628\u0627\u0642\u06cc \u0645\u0648\u0646\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646\u06cc\u0645 Backend \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0647 FCM \u062a\u062d\u0648\u06cc\u0644 \u062f\u0627\u062f. \u062d\u0627\u0644\u0627 FCM \u0627\u0632 \u06a9\u062c\u0627 \u0628\u0627\u06cc\u062f \u0628\u0641\u0647\u0645\u0647 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u06a9\u062f\u0648\u0645 \u06af\u0648\u0634\u06cc\u0647\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 Registration Token \u0648\u0627\u0631\u062f \u062f\u0627\u0633\u062a\u0627\u0646 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646 \u0628\u0627\u0631 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647\u060c FCM \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u0646\u062d\u0635\u0631\u0628\u0647\u200c\u0641\u0631\u062f \u0628\u0631\u0627\u06cc \u0647\u0645\u0648\u0646 <strong>\u0646\u0635\u0628 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647<\/strong> \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0647 \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 Registration Token \u06cc\u0627 \u0628\u0647 \u0627\u062e\u062a\u0635\u0627\u0631 FCM Token \u06af\u0641\u062a\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0628\u0631\u0627\u06cc Token\u060c \u0622\u062f\u0631\u0633 \u067e\u0633\u062a\u06cc\u0647. \u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u06cc \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0646\u0641\u0631 \u0646\u0627\u0645\u0647 \u0628\u0641\u0631\u0633\u062a\u06cc\u060c \u0641\u0642\u0637 \u062f\u0648\u0646\u0633\u062a\u0646 \u0627\u0633\u0645\u0634 \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a\u061b \u0628\u0627\u06cc\u062f \u0622\u062f\u0631\u0633\u0634 \u0631\u0648 \u0647\u0645 \u0628\u062f\u0648\u0646\u06cc. Backend \u0647\u0645 \u0628\u0631\u0627\u06cc \u0641\u0631\u0633\u062a\u0627\u062f\u0646 \u067e\u06cc\u0627\u0645 \u0641\u0642\u0637 \u0627\u0633\u0645 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0646\u0645\u06cc\u200c\u0634\u0646\u0627\u0633\u0647\u060c \u0628\u0644\u06a9\u0647 \u0628\u0627\u06cc\u062f Token \u062f\u0633\u062a\u06af\u0627\u0647\u0634 \u0631\u0648 \u0647\u0645 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 Token \u0628\u0639\u062f\u0627\u064b \u0628\u0647 Backend \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0647 \u0648 \u0647\u0631 \u0648\u0642\u062a \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 \u067e\u06cc\u0627\u0645\u06cc \u0628\u0631\u0627\u06cc \u0627\u0648\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647\u060c Backend \u0647\u0645\u06cc\u0646 Token \u0631\u0648 \u0628\u0647 FCM \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Token \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0641\u06a9\u0631 \u06a9\u0646\u06cc\u0645 \u0647\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u06cc\u06a9 Token \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0648\u0627\u0642\u0639 Token \u0627\u0635\u0644\u0627\u064b \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u06cc\u0633\u062a\u061b \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 <strong>\u06cc\u06a9 \u0646\u0635\u0628 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648\u06cc \u06cc\u06a9 \u062f\u0633\u062a\u06af\u0627\u0647<\/strong> \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0639\u0644\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0631\u0648\u06cc \u0633\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0646\u0635\u0628 \u06a9\u0631\u062f\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u06af\u0648\u0634\u06cc \u0634\u062e\u0635\u06cc<\/li>\n\n\n\n<li>\u062a\u0628\u0644\u062a<\/li>\n\n\n\n<li>\u06af\u0648\u0634\u06cc \u0645\u062d\u0644 \u06a9\u0627\u0631<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u06a9\u062f\u0648\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u0646\u0635\u0628\u200c\u0647\u0627 \u06cc\u06a9 Token \u06a9\u0627\u0645\u0644\u0627\u064b \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u062a\u06cc \u0627\u06af\u0631 \u0639\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0627\u0632 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u062d\u0630\u0641 \u06a9\u0646\u0647 \u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0646\u0635\u0628\u0634 \u06a9\u0646\u0647\u060c \u0627\u062d\u062a\u0645\u0627\u0644 \u0632\u06cc\u0627\u062f\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u06a9\u0647 \u06cc\u06a9 Token \u062c\u062f\u06cc\u062f \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 Backend \u0646\u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 \u062c\u062f\u0648\u0644 User \u0641\u0642\u0637 \u06cc\u06a9 \u0633\u062a\u0648\u0646 \u0628\u0647 \u0627\u0633\u0645 <code>fcm_token<\/code> \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u0637\u0631\u0627\u062d\u06cc \u0627\u0632 \u0647\u0645\u0648\u0646 \u0631\u0648\u0632 \u0627\u0648\u0644 \u0645\u0634\u06a9\u0644 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0637\u0631\u0627\u062d\u06cc \u062f\u0631\u0633\u062a \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0686\u06cc\u0632\u06cc \u0634\u0628\u06cc\u0647 \u0627\u06cc\u0646\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>User\n   \u2502\n   \u251c\u2500\u2500 Device 1\n   \u2502        \u2502\n   \u2502        \u2514\u2500\u2500 Token A\n   \u2502\n   \u251c\u2500\u2500 Device 2\n   \u2502        \u2502\n   \u2502        \u2514\u2500\u2500 Token B\n   \u2502\n   \u2514\u2500\u2500 Device 3\n            \u2502\n            \u2514\u2500\u2500 Token C\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627 \u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc\u060c \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0686\u0646\u062f \u062f\u0633\u062a\u06af\u0627\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0647\u060c Backend \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u062f\u0633\u062a\u06af\u0627\u0647\u200c\u0647\u0627\u06cc \u0641\u0639\u0627\u0644\u0634 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 Token \u0645\u0645\u06a9\u0646\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0647 \u0627\u0634\u062a\u0628\u0627\u0647 \u062f\u06cc\u06af\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0641\u06a9\u0631 \u06a9\u0646\u06cc\u0645 Token \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0634\u0647 \u062b\u0627\u0628\u062a\u0647. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0647 \u062f\u0644\u0627\u06cc\u0644 \u0645\u062e\u062a\u0644\u0641 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647\u061b \u0645\u062b\u0644\u0627\u064b \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062d\u0630\u0641 \u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0646\u0635\u0628 \u06a9\u0646\u0647\u060c \u06af\u0648\u0634\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0628\u062e\u0631\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u0634 \u0631\u0648 Restore \u06a9\u0646\u0647 \u06cc\u0627 \u062e\u0648\u062f FCM \u0628\u0647 \u062f\u0644\u0627\u06cc\u0644 \u0627\u0645\u0646\u06cc\u062a\u06cc Token \u062c\u062f\u06cc\u062f\u06cc \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645\u06cc\u0634\u0647 \u0628\u0627\u06cc\u062f \u0622\u0645\u0627\u062f\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a Token \u062c\u062f\u06cc\u062f \u0628\u0627\u0634\u0647 \u0648 \u0647\u0631 \u0648\u0642\u062a \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0627\u0641\u062a\u0627\u062f\u060c \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f\u0634 \u0631\u0648 \u0628\u0631\u0627\u06cc Backend \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647. \u0627\u06af\u0631 Backend \u0647\u0645\u0686\u0646\u0627\u0646 Token \u0642\u062f\u06cc\u0645\u06cc \u0631\u0648 \u0646\u06af\u0647 \u062f\u0627\u0631\u0647\u060c \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0628\u0647 \u0645\u0642\u0635\u062f \u0646\u0645\u06cc\u200c\u0631\u0633\u0646\u060c \u0686\u0648\u0646 FCM \u062f\u06cc\u06af\u0647 \u0627\u0648\u0646 Token \u0631\u0648 \u0645\u0639\u062a\u0628\u0631 \u0646\u0645\u06cc\u200c\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 Token \u0631\u0648 \u0645\u062b\u0644 \u06cc\u06a9 <strong>\u0622\u062f\u0631\u0633 \u0642\u0627\u0628\u0644 \u062a\u063a\u06cc\u06cc\u0631<\/strong> \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u060c \u0646\u0647 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u062f\u0627\u0626\u0645\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0628\u0627 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0628\u062e\u0634 \u0645\u0641\u0647\u0648\u0645\u06cc FCM \u0622\u0634\u0646\u0627 \u0634\u062f\u06cc\u0645\u061b \u0641\u0647\u0645\u06cc\u062f\u06cc\u0645 \u0686\u0631\u0627 Backend \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0627 \u06af\u0648\u0634\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0631\u0642\u0631\u0627\u0631 \u06a9\u0646\u0647\u060c \u0686\u0631\u0627 \u06af\u0648\u06af\u0644 \u0646\u0642\u0634 \u0648\u0627\u0633\u0637\u0647 \u0631\u0648 \u0628\u0627\u0632\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Firebase Project \u0686\u0647 \u0646\u0642\u0634\u06cc \u062f\u0627\u0631\u0647 \u0648 Token \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u06cc\u0647. \u062f\u0631 \u0628\u062e\u0634 \u0628\u0639\u062f\u06cc \u0648\u0627\u0631\u062f \u062e\u0648\u062f \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0645\u06cc\u200c\u0634\u06cc\u0645 \u0648 \u062a\u0641\u0627\u0648\u062a <strong>Notification Message<\/strong> \u0648 <strong>Data Message<\/strong> \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u061b \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0648\u0642\u0639 \u0637\u0631\u0627\u062d\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u06cc \u0628\u0627\u06cc\u062f \u0628\u06af\u06cc\u0631\u06cc.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u062f\u0627\u0645\u0647 \u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u067e\u0646\u062c\u0645<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Firebase Cloud Messaging (\u0628\u062e\u0634 \u062f\u0648\u0645)<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Data Message \u0648 Notification Message\u061b \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0645\u0639\u0645\u0627\u0631\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0641\u0647\u0645\u06cc\u062f\u06cc\u0645 \u06a9\u0647 FCM \u0641\u0642\u0637 \u0648\u0638\u06cc\u0641\u0647 \u062f\u0627\u0631\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0627\u0632 Backend \u0628\u0647 \u06af\u0648\u0634\u06cc \u0628\u0631\u0633\u0648\u0646\u0647. \u0627\u0645\u0627 \u0647\u0646\u0648\u0632 \u06cc\u06a9 \u0633\u0624\u0627\u0644 \u0645\u0647\u0645 \u0628\u0627\u0642\u06cc \u0645\u0648\u0646\u062f\u0647\u061b \u0648\u0642\u062a\u06cc Backend \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u067e\u06cc\u0627\u0645\u06cc \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647\u060c \u0622\u06cc\u0627 \u0647\u0645\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9 \u0634\u06a9\u0644 \u0647\u0633\u062a\u0646\u061f \u062c\u0648\u0627\u0628 \u0645\u0646\u0641\u06cc\u0647. \u062f\u0627\u062e\u0644 FCM \u0686\u0646\u062f \u0646\u0648\u0639 \u067e\u06cc\u0627\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u06cc \u0628\u0627 \u062f\u0648 \u0646\u0648\u0639 \u0627\u0635\u0644\u06cc \u0633\u0631\u0648\u06a9\u0627\u0631 \u062f\u0627\u0631\u0646\u061b <strong>Notification Message<\/strong> \u0648 <strong>Data Message<\/strong>. \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u0641\u06a9\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u062a\u0641\u0627\u0648\u062a \u0627\u06cc\u0646 \u062f\u0648 \u0641\u0642\u0637 \u0686\u0646\u062f \u0641\u06cc\u0644\u062f \u062f\u0627\u062e\u0644 JSON\u0640\u0647\u060c \u0627\u0645\u0627 \u0648\u0627\u0642\u0639\u06cc\u062a \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u062f\u0648\u060c \u062f\u0648 \u0641\u0644\u0633\u0641\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0631\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0647\u0633\u062a\u0646. \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u062d\u062a\u06cc \u06cc\u06a9 \u062e\u0637 \u06a9\u062f \u0628\u0646\u0648\u06cc\u0633\u06cc\u060c \u0628\u0627\u06cc\u062f \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u06cc \u06a9\u0647 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u06cc \u06a9\u0646\u062a\u0631\u0644 \u0627\u0639\u0644\u0627\u0646 \u062f\u0633\u062a \u0686\u0647 \u06a9\u0633\u06cc \u0628\u0627\u0634\u0647\u061b \u062e\u0648\u062f \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u06cc\u0627 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u062a\u061f \u0647\u0645\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0631\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc Backend\u060c \u0646\u062d\u0648\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0648 \u062d\u062a\u06cc \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0623\u062b\u06cc\u0631 \u0645\u06cc\u200c\u0630\u0627\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Notification Message<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Notification Message \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u06cc\u0646 \u0645\u062f\u0644\u06cc\u0647 \u06a9\u0647 FCM \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631\u062a \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647. \u062a\u0648\u06cc \u0627\u06cc\u0646 \u0631\u0648\u0634 Backend \u0639\u0646\u0648\u0627\u0646 \u0627\u0639\u0644\u0627\u0646\u060c \u0645\u062a\u0646\u060c \u0622\u06cc\u06a9\u0646 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0635\u0644\u06cc \u0631\u0648 \u0628\u0631\u0627\u06cc FCM \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f \u0627\u0632 \u0627\u0648\u0646 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u0645\u0647 \u06a9\u0627\u0631\u0647\u0627 \u0631\u0648 \u062e\u0648\u062f \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0628\u0627\u0634\u0647\u060c \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0648\u0627\u0631\u062f \u0639\u0645\u0644 \u0628\u0634\u0647\u060c Notification \u0631\u0648 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u06cc\u0646 \u0645\u062f\u0644 \u062e\u06cc\u0644\u06cc \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u0648 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06cc\u06a9 \u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0641\u0642\u0637 \u0645\u06cc\u200c\u062e\u0648\u0627\u0646 \u0686\u0646\u062f \u0627\u0639\u0644\u0627\u0646 \u0633\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0646\u060c \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u062f\u06cc \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06cc\u0646 \u0633\u0627\u062f\u06af\u06cc \u06cc\u06a9 \u0646\u0642\u0637\u0647\u200c\u0636\u0639\u0641 \u0647\u0645 \u062f\u0627\u0631\u0647. \u0686\u0648\u0646 \u0648\u0642\u062a\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0627\u0639\u0644\u0627\u0646 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u0633\u067e\u0631\u062f\u0647 \u0645\u06cc\u0634\u0647\u060c \u0627\u062e\u062a\u06cc\u0627\u0631 \u0632\u06cc\u0627\u062f\u06cc \u0631\u0648\u06cc \u0627\u062a\u0641\u0627\u0642\u0627\u062a\u06cc \u06a9\u0647 \u0642\u0628\u0644 \u06cc\u0627 \u0628\u0639\u062f \u0627\u0632 \u0646\u0645\u0627\u06cc\u0634 Notification \u0645\u06cc\u200c\u0627\u0641\u062a\u0647 \u0646\u062f\u0627\u0631\u06cc. \u0641\u0631\u0636 \u06a9\u0646 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u06cc \u0642\u0628\u0644 \u0627\u0632 \u0646\u0645\u0627\u06cc\u0634 \u0627\u0639\u0644\u0627\u0646\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 Room \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647\u060c \u06cc\u0627 \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u0648\u0646 \u0644\u062d\u0638\u0647 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0627\u0648\u0646 \u0645\u062d\u0635\u0648\u0644 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0647\u060c \u0628\u0647 \u062c\u0627\u06cc Notification \u0641\u0642\u0637 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0634\u0647. \u0634\u0627\u06cc\u062f \u0647\u0645 \u0628\u062e\u0648\u0627\u06cc \u0686\u0646\u062f \u0627\u0639\u0644\u0627\u0646 \u0645\u0634\u0627\u0628\u0647 \u0631\u0648 \u0628\u0627 \u0647\u0645 \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u06cc \u06cc\u0627 \u0645\u062a\u0646 \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0628\u0631 \u0627\u0633\u0627\u0633 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u06cc. \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u0647\u0627 \u0628\u0627 Notification Message \u06cc\u0627 \u0645\u0645\u06a9\u0646 \u0646\u06cc\u0633\u062a \u06cc\u0627 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u062f\u0627\u0631\u0647\u060c \u0686\u0648\u0646 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u0628\u062e\u0634 \u0632\u06cc\u0627\u062f\u06cc \u0627\u0632 \u0641\u0631\u0622\u06cc\u0646\u062f \u0631\u0648 \u0628\u0647 \u062c\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Data Message<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Data Message \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0627 \u06cc\u06a9 \u0637\u0631\u0632 \u0641\u06a9\u0631 \u0645\u062a\u0641\u0627\u0648\u062a \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647. \u062a\u0648\u06cc \u0627\u06cc\u0646 \u0645\u062f\u0644 Backend \u0647\u06cc\u0686 \u0627\u0639\u0644\u0627\u0646 \u0622\u0645\u0627\u062f\u0647\u200c\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0641\u0642\u0637 \u06cc\u06a9 \u0628\u0633\u062a\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0634\u0627\u0645\u0644 \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644\u060c \u0646\u0648\u0639 \u0631\u0648\u06cc\u062f\u0627\u062f\u060c \u0632\u0645\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631\u060c \u0634\u0646\u0627\u0633\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06cc\u0627 \u0647\u0631 \u062f\u0627\u062f\u0647 \u062f\u06cc\u06af\u0647\u200c\u0627\u06cc \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u062a\u0635\u0645\u06cc\u0645\u200c\u06af\u06cc\u0631\u06cc \u0628\u0647\u0634 \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u0647. \u0648\u0642\u062a\u06cc \u067e\u06cc\u0627\u0645 \u0628\u0647 \u06af\u0648\u0634\u06cc \u0631\u0633\u06cc\u062f\u060c \u0627\u06cc\u0646 \u0628\u0627\u0631 \u0647\u06cc\u0686\u200c\u06a9\u0633 \u0628\u0647 \u062c\u0632 \u062e\u0648\u062f \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u06a9\u0647 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0628\u06cc\u0641\u062a\u0647. \u0634\u0627\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u06a9 Notification \u0628\u0633\u0627\u0632\u0647\u060c \u0634\u0627\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0646\u0647\u060c \u0634\u0627\u06cc\u062f \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u062f\u0627\u062e\u0644\u06cc \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u0647 \u0648 \u0634\u0627\u06cc\u062f \u0647\u0645 \u0627\u0635\u0644\u0627\u064b \u0647\u06cc\u0686 \u0686\u06cc\u0632\u06cc \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u0627\u06cc\u0634 \u0646\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0628\u0627\u0639\u062b \u0634\u062f\u0647 Data Message \u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0645\u062d\u0628\u0648\u0628\u200c\u062a\u0631 \u0628\u0627\u0634\u0647. \u0686\u0648\u0646 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0627\u0645\u0644 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u0647\u0631 \u0633\u0646\u0627\u0631\u06cc\u0648\u06cc\u06cc \u06a9\u0647 \u0628\u062e\u0648\u0627\u06cc \u0642\u0627\u0628\u0644 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc\u0647. \u062f\u0631 \u0648\u0627\u0642\u0639 Notification Message \u0628\u06cc\u0634\u062a\u0631 \u0634\u0628\u06cc\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Backend \u0628\u06af\u0647 \u0627\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0647\u0645\u06cc\u0646 \u0627\u0644\u0627\u0646 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0634\u0648\u0646 \u0628\u062f\u0647\u060c \u0627\u0645\u0627 Data Message \u0628\u06cc\u0634\u062a\u0631 \u0634\u0628\u06cc\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Backend \u0628\u06af\u0647 \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0627\u0641\u062a\u0627\u062f\u0647\u060c \u062d\u0627\u0644\u0627 \u062e\u0648\u062f\u062a \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0648\u0627\u06a9\u0646\u0634 \u0686\u06cc\u0647. \u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u0634\u0627\u06cc\u062f \u0631\u0648\u06cc \u06a9\u0627\u063a\u0630 \u06a9\u0648\u0686\u06a9 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u0647\u060c \u0648\u0644\u06cc \u062f\u0631 \u0639\u0645\u0644 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645\u200c\u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0647\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u06cc\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u06af\u0631 \u062c\u0627\u06cc \u0645\u0627 \u0628\u0648\u062f\u06cc\u060c \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06a9\u062f\u0648\u0645 \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0631\u062f\u06cc\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0645 \u0641\u0642\u0637 \u067e\u0631\u0648\u0698\u0647 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u0645\u060c \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062f\u0631 \u062a\u0645\u0627\u0645 \u0642\u0633\u0645\u062a\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 Data Message \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0646\u0637\u0642\u06cc\u200c\u062a\u0631\u06cc\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647. \u0627\u06af\u0631 Notification Message \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. \u0627\u0645\u0627 \u0634\u0627\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u0639\u0644\u0627\u0646 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0634\u0648\u0646 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647\u060c \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u062f\u0627\u062e\u0644 Room \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647\u060c \u06a9\u0634 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0627\u0648\u0646 \u0645\u062d\u0635\u0648\u0644 \u067e\u0627\u06a9 \u0628\u0634\u0647\u060c \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632\u0647 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0641\u0648\u0631\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647 \u0648 \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u062a\u0647 \u0627\u0633\u062a\u060c \u062a\u0627\u0632\u0647 Notification \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647. \u062d\u062a\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0628\u0639\u0636\u06cc \u0648\u0642\u062a\u200c\u0647\u0627 \u0627\u0635\u0644\u0627\u064b \u0644\u0627\u0632\u0645 \u0646\u0628\u0627\u0634\u0647 \u0647\u06cc\u0686 Notification\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647 \u0648 \u0641\u0642\u0637 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0634\u0647. \u0647\u0645\u0647 \u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645\u200c\u0647\u0627 \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0647 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0627\u0645\u0644 \u062f\u0633\u062a \u062e\u0648\u062f \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u0627\u0634\u0647 \u0648 \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0628\u06cc\u0634\u062a\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0628\u0632\u0631\u06af \u062f\u0646\u06cc\u0627 \u062a\u0627 \u062c\u0627\u06cc \u0645\u0645\u06a9\u0646 \u0627\u0632 Data Message \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">FCM \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 Notification \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0628\u0631\u062f\u0627\u0634\u062a\u200c\u0647\u0627\u06cc \u0627\u0634\u062a\u0628\u0627\u0647\u06cc \u06a9\u0647 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u062a\u0627\u0632\u0647\u200c\u06a9\u0627\u0631 \u062e\u06cc\u0644\u06cc \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0641\u06a9\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646 FCM \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0627\u0639\u0644\u0627\u0646 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647. \u062d\u062a\u06cc \u0627\u0633\u0645\u0634 \u0631\u0648 \u0647\u0645 \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0647 \u062e\u0627\u0637\u0631 \u0645\u06cc\u200c\u0633\u067e\u0627\u0631\u0646 \u0648 \u0628\u0647\u0634 \u0645\u06cc\u06af\u0646 Firebase Notification. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u0633\u0645 \u0648\u0627\u0642\u0639\u06cc \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 <strong>Firebase Cloud Messaging<\/strong>\u0640\u0647. \u06cc\u0639\u0646\u06cc \u0648\u0638\u06cc\u0641\u0647 \u0627\u0635\u0644\u06cc\u0634 \u0627\u0646\u062a\u0642\u0627\u0644 \u067e\u06cc\u0627\u0645\u0647\u060c \u0646\u0647 \u0646\u0645\u0627\u06cc\u0634 Notification.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u06cc\u0644\u06cc \u0648\u0642\u062a\u200c\u0647\u0627 \u067e\u06cc\u0627\u0645 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u06cc\u06a9 \u0627\u062a\u0641\u0627\u0642 \u0628\u0627\u062e\u0628\u0631 \u0628\u0634\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u06a9\u0627\u0644\u0627 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0627\u0646\u0644\u0648\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u062f\u0627\u062e\u0644\u06cc \u0631\u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 Render \u0645\u06cc\u200c\u06a9\u0646\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0641\u0642\u0637 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647 \u0642\u06cc\u0645\u062a \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0648 \u0634\u0627\u06cc\u062f \u0627\u0635\u0644\u0627\u064b \u0647\u06cc\u0686 Notification\u0627\u06cc \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0638\u0627\u0647\u0631 \u0646\u0634\u0647. \u06cc\u0627 \u0641\u0631\u0636 \u06a9\u0646 Backend \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0637\u0644\u0627\u0639 \u0645\u06cc\u062f\u0647 \u06a9\u0647 \u0641\u0627\u06cc\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062c\u062f\u06cc\u062f \u0622\u0645\u0627\u062f\u0647 \u062f\u0627\u0646\u0644\u0648\u062f \u0634\u062f\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0633\u06a9\u0648\u062a \u0641\u0627\u06cc\u0644 \u0631\u0648 \u062f\u0627\u0646\u0644\u0648\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0628\u062f\u0648\u0646 \u06a9\u0648\u0686\u06a9\u200c\u062a\u0631\u06cc\u0646 \u0645\u0632\u0627\u062d\u0645\u062a\u06cc \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0647\u06cc\u0686\u200c\u0648\u0642\u062a FCM \u0631\u0648 \u0645\u0633\u0627\u0648\u06cc Notification \u062f\u0631 \u0646\u0638\u0631 \u0646\u06af\u06cc\u0631\u061b Notification \u0641\u0642\u0637 \u06cc\u06a9\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u062f\u0647\u0627\u06cc FCM\u0640\u0647\u060c \u0646\u0647 \u062a\u0645\u0627\u0645 \u0627\u0648\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Topic\u061b \u0648\u0642\u062a\u06cc \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u0641\u0642\u0637 \u06cc\u06a9 \u0646\u0641\u0631 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0641\u0631\u0636 \u06a9\u0631\u062f\u06cc\u0645 Backend \u062f\u0642\u06cc\u0642\u0627\u064b \u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u06a9\u062f\u0648\u0645 \u062f\u0633\u062a\u06af\u0627\u0647 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647 \u0648 Token \u0627\u0648\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0648 \u0647\u0645 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u062f\u0627\u0631\u0647. \u0627\u0645\u0627 \u0647\u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u200c\u0637\u0648\u0631 \u0646\u06cc\u0633\u062a. \u0628\u0639\u0636\u06cc \u0648\u0642\u062a\u200c\u0647\u0627 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0627\u0635\u0644\u0627\u064b \u0634\u062e\u0635\u06cc \u0646\u06cc\u0633\u062a \u0648 \u0628\u0627\u06cc\u062f \u0628\u0647 \u062a\u0639\u062f\u0627\u062f \u0632\u06cc\u0627\u062f\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646\u062a\u0634\u0631 \u0634\u062f\u0647\u060c \u06cc\u0627 \u06a9\u0645\u067e\u06cc\u0646 \u0646\u0648\u0631\u0648\u0632\u06cc \u0634\u0631\u0648\u0639 \u0634\u062f\u0647\u060c \u06cc\u0627 \u0633\u0631\u0648\u0631 \u0642\u0631\u0627\u0631\u0647 \u0646\u06cc\u0645 \u0633\u0627\u0639\u062a \u062f\u06cc\u06af\u0647 \u0628\u0631\u0627\u06cc \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u0627\u0632 \u062f\u0633\u062a\u0631\u0633 \u062e\u0627\u0631\u062c \u0628\u0634\u0647. \u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u06cc \u0628\u0631\u0627\u06cc \u0686\u0646\u06cc\u0646 \u067e\u06cc\u0627\u0645\u06cc \u0645\u06cc\u0644\u06cc\u0648\u0646\u200c\u0647\u0627 Token \u0631\u0648 \u0627\u0632 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0628\u062e\u0648\u0646\u06cc \u0648 \u06cc\u06a9\u06cc\u200c\u06cc\u06a9\u06cc \u0628\u0631\u0627\u0634\u0648\u0646 \u067e\u06cc\u0627\u0645 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u060c \u0647\u0645 \u0632\u0645\u0627\u0646 \u0632\u06cc\u0627\u062f\u06cc \u062a\u0644\u0641 \u0645\u06cc\u0634\u0647 \u0648 \u0647\u0645 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0633\u062e\u062a \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646 FCM \u0642\u0627\u0628\u0644\u06cc\u062a\u06cc \u0628\u0647 \u0627\u0633\u0645 <strong>Topic<\/strong> \u062f\u0627\u0631\u0647. Topic \u0631\u0648 \u0645\u06cc\u0634\u0647 \u0634\u0628\u06cc\u0647 \u06cc\u06a9 \u06a9\u0627\u0646\u0627\u0644 \u0639\u0636\u0648\u06cc\u062a \u062a\u0635\u0648\u0631 \u06a9\u0631\u062f. \u0647\u0631 \u062f\u0633\u062a\u06af\u0627\u0647\u06cc \u06a9\u0647 \u0639\u0636\u0648 Topic \u062e\u0627\u0635\u06cc \u0628\u0627\u0634\u0647\u060c \u0647\u0631 \u067e\u06cc\u0627\u0645\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u0648\u0646 Topic \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u06cc\u0639\u0646\u06cc Backend \u0641\u0642\u0637 \u0645\u06cc\u06af\u0647 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0631\u0627\u06cc Topic \u0627\u062e\u0628\u0627\u0631 \u0628\u0641\u0631\u0633\u062a \u0648 \u0628\u0642\u06cc\u0647 \u06a9\u0627\u0631\u0647\u0627 \u0631\u0648 \u062e\u0648\u062f FCM \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647. \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a Token \u062a\u06a9\u200c\u062a\u06a9 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0648 \u0628\u0634\u0646\u0627\u0633\u06cc \u06cc\u0627 \u0646\u06af\u0631\u0627\u0646 \u062a\u0639\u062f\u0627\u062f \u0632\u06cc\u0627\u062f \u06af\u06cc\u0631\u0646\u062f\u0647\u200c\u0647\u0627 \u0628\u0627\u0634\u06cc. \u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a \u0628\u0631\u0627\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0641\u0648\u0642\u200c\u0627\u0644\u0639\u0627\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0628\u062a\u0647 \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0627\u06a9\u062b\u0631 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0634\u062e\u0635\u06cc \u0647\u0633\u062a\u0646\u061b \u0645\u062b\u0644\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u06cc\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062e\u0648\u062f\u0634. \u0627\u06cc\u0646 \u0646\u0648\u0639 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0646\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Token \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0646\u0627\u0633\u0628\u200c\u062a\u0631\u06cc\u0647. \u0627\u0645\u0627 \u0627\u06af\u0631 \u0631\u0648\u0632\u06cc \u0628\u062e\u0648\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u06cc\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0645\u062b\u0644 \u0645\u0639\u0631\u0641\u06cc \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u0627 \u0627\u0639\u0644\u0627\u0645 \u06cc\u06a9 \u06a9\u0645\u067e\u06cc\u0646 \u0633\u0631\u0627\u0633\u0631\u06cc \u0631\u0648 \u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u06cc\u060c Topic \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647\u062a\u0631\u06cc\u0646 \u06af\u0632\u06cc\u0646\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Priority\u061b \u0647\u0645\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0627\u0631\u0632\u0634 \u06cc\u06a9\u0633\u0627\u0646\u06cc \u0646\u062f\u0627\u0631\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u062f\u0642\u062a \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u06cc\u060c \u0647\u0645\u0647 \u0627\u062a\u0641\u0627\u0642\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u062e \u0645\u06cc\u062f\u0646 \u0627\u0632 \u0646\u0638\u0631 \u0627\u0647\u0645\u06cc\u062a \u06cc\u06a9\u0633\u0627\u0646 \u0646\u06cc\u0633\u062a\u0646. \u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0632\u06cc\u0646\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0631\u0648 \u067e\u0631\u062f\u0627\u062e\u062a \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0627\u06cc\u062f \u0646\u062a\u06cc\u062c\u0647 \u067e\u0631\u062f\u0627\u062e\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0647\u0634 \u0627\u0639\u0644\u0627\u0645 \u0628\u0634\u0647. \u062f\u0631 \u0645\u0642\u0627\u0628\u0644\u060c \u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u0646\u062a\u0634\u0627\u0631 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0635\u0644\u0627\u064b \u0641\u0648\u0631\u06cc\u062a \u0646\u062f\u0627\u0631\u0647 \u0648 \u062d\u062a\u06cc \u0627\u06af\u0631 \u0686\u0646\u062f \u062f\u0642\u06cc\u0642\u0647 \u0628\u0639\u062f \u0628\u0647 \u06af\u0648\u0634\u06cc \u0628\u0631\u0633\u0647\u060c \u0645\u0634\u06a9\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 FCM \u0645\u0641\u0647\u0648\u0645 <strong>Priority<\/strong> \u0631\u0648 \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f\u0647. \u0628\u0639\u0636\u06cc \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0628\u0627 \u0627\u0648\u0644\u0648\u06cc\u062a \u0639\u0627\u062f\u06cc \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0646 \u0648 \u06af\u0648\u06af\u0644 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0647\u0634 \u0645\u0635\u0631\u0641 \u0628\u0627\u062a\u0631\u06cc\u060c \u062a\u062d\u0648\u06cc\u0644 \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u06a9\u0645\u06cc \u0628\u0647 \u062a\u0623\u062e\u06cc\u0631 \u0628\u0646\u062f\u0627\u0632\u0647. \u062f\u0631 \u0645\u0642\u0627\u0628\u0644\u060c \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc\u06cc \u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0646 \u06a9\u0647 \u0627\u0647\u0645\u06cc\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0631\u0646 \u0648 \u0628\u0627 \u0627\u0648\u0644\u0648\u06cc\u062a \u0628\u0627\u0644\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0646 \u062a\u0627 \u062f\u0631 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631\u06cc\u0646 \u0632\u0645\u0627\u0646 \u0645\u0645\u06a9\u0646 \u0628\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0628\u0631\u0633\u0646. \u0627\u0644\u0628\u062a\u0647 \u0627\u06cc\u0646 \u0628\u0647 \u0645\u0639\u0646\u06cc \u062a\u0636\u0645\u06cc\u0646 \u062a\u062d\u0648\u06cc\u0644 \u0644\u062d\u0638\u0647\u200c\u0627\u06cc \u0646\u06cc\u0633\u062a. \u0627\u06af\u0631 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u062a\u0645\u0627\u0645 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0648 \u0628\u0627 \u0628\u0627\u0644\u0627\u062a\u0631\u06cc\u0646 \u0627\u0648\u0644\u0648\u06cc\u062a \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647\u060c FCM \u0628\u0647 \u0645\u0631\u0648\u0631 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0648 \u0645\u0645\u06a9\u0646\u0647 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc\u06cc \u0627\u0639\u0645\u0627\u0644 \u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0648\u0644\u0648\u06cc\u062a \u0628\u0627\u0644\u0627 \u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc\u06cc \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0647 \u0648\u0627\u06a9\u0646\u0634 \u0633\u0631\u06cc\u0639 \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u0646\u060c \u0646\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0627\u0639\u0644\u0627\u0646 \u0633\u0627\u062f\u0647\u200c\u0627\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">TTL\u061b \u0627\u06af\u0631 \u06af\u0648\u0634\u06cc \u062e\u0627\u0645\u0648\u0634 \u0628\u0648\u062f \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0645\u06cc\u200c\u0627\u0641\u062a\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 \u0641\u0631\u0636 \u06a9\u0646 Backend \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0631\u062f\u0647\u060c \u0627\u0645\u0627 \u06af\u0648\u0634\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062e\u0627\u0645\u0648\u0634\u0647 \u06cc\u0627 \u0628\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u0646\u062f\u0627\u0631\u0647. \u0622\u06cc\u0627 \u067e\u06cc\u0627\u0645 \u0641\u0648\u0631\u0627\u064b \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u0631\u0647\u061f \u0646\u0647. FCM \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0628\u0631\u0627\u06cc \u0645\u062f\u062a \u0645\u0634\u062e\u0635\u06cc \u0646\u06af\u0647 \u062f\u0627\u0631\u0647 \u0648 \u0647\u0631 \u0632\u0645\u0627\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0622\u0646\u0644\u0627\u06cc\u0646 \u0634\u062f\u060c \u0627\u0648\u0646 \u0631\u0648 \u062a\u062d\u0648\u06cc\u0644 \u0628\u062f\u0647. \u0627\u06cc\u0646 \u0645\u062f\u062a \u0632\u0645\u0627\u0646 \u0628\u0627 \u0645\u0641\u0647\u0648\u0645\u06cc \u0628\u0647 \u0627\u0633\u0645 <strong>TTL \u06cc\u0627 Time To Live<\/strong> \u0645\u0634\u062e\u0635 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">TTL \u062f\u0631 \u0648\u0627\u0642\u0639 \u0639\u0645\u0631 \u0645\u0641\u06cc\u062f \u06cc\u06a9 \u067e\u06cc\u0627\u0645\u0647. \u0627\u06af\u0631 \u06af\u0648\u0634\u06cc \u0642\u0628\u0644 \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 \u0627\u06cc\u0646 \u0632\u0645\u0627\u0646 \u0622\u0646\u0644\u0627\u06cc\u0646 \u0628\u0634\u0647\u060c \u067e\u06cc\u0627\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u0627\u06af\u0631 \u0645\u062f\u062a TTL \u062a\u0645\u0648\u0645 \u0628\u0634\u0647\u060c FCM \u0627\u0648\u0646 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0686\u0648\u0646 \u0641\u0631\u0636 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u06cc\u06af\u0647 \u0627\u0631\u0632\u0634 \u0627\u0631\u0633\u0627\u0644 \u0646\u062f\u0627\u0631\u0647. \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0642\u062f\u0627\u0631 \u0645\u0646\u0627\u0633\u0628 TTL \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0647 \u0646\u0648\u0639 \u067e\u06cc\u0627\u0645 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u0642\u0631\u0627\u0631 \u0628\u0627\u0634\u0647 \u0627\u0637\u0644\u0627\u0639 \u0628\u062f\u06cc \u0633\u0631\u0648\u0631 \u062f\u0647 \u062f\u0642\u06cc\u0642\u0647 \u062f\u06cc\u06af\u0647 \u0627\u0632 \u062f\u0633\u062a\u0631\u0633 \u062e\u0627\u0631\u062c \u0645\u06cc\u0634\u0647\u060c \u0645\u0646\u0637\u0642\u06cc \u0646\u06cc\u0633\u062a \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0641\u0631\u062f\u0627 \u0628\u0647 \u062f\u0633\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0633\u0647. \u0627\u0645\u0627 \u0627\u06af\u0631 \u067e\u06cc\u0627\u0645 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062a\u0623\u06cc\u06cc\u062f \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0633\u0641\u0627\u0631\u0634 \u0628\u0627\u0634\u0647\u060c \u0634\u0627\u06cc\u062f \u0627\u0631\u0632\u0634 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0686\u0646\u062f \u0631\u0648\u0632 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0634\u0647 \u062a\u0627 \u0647\u0631 \u0632\u0645\u0627\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0622\u0646\u0644\u0627\u06cc\u0646 \u0634\u062f\u060c \u0627\u0648\u0646 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Backend Design\u061b Backend \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc\u062f\u0627\u062f \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0647\u060c \u0646\u0647 Notification<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u062e\u06cc\u0644\u06cc \u0627\u0632 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Backend \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0634\u0631\u0648\u0639 \u0628\u0647 \u0633\u0627\u062e\u062a \u0645\u062a\u0646 Notification \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u062f\u0627\u062e\u0644 \u06a9\u062f \u0646\u0648\u0634\u062a\u0647 \u0645\u06cc\u0634\u0647: \u0627\u06af\u0631 \u0642\u06cc\u0645\u062a \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u060c \u0627\u06cc\u0646 \u0639\u0646\u0648\u0627\u0646 \u0648 \u0627\u06cc\u0646 \u0645\u062a\u0646 \u0631\u0648 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0641\u0631\u0633\u062a. \u0634\u0627\u06cc\u062f \u0627\u06cc\u0646 \u0631\u0648\u0634 \u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9 \u062c\u0648\u0627\u0628 \u0628\u062f\u0647\u060c \u0627\u0645\u0627 \u0647\u0631\u0686\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0628\u0632\u0631\u06af\u200c\u062a\u0631 \u0628\u0634\u0647\u060c \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0627\u0648\u0646 \u0633\u062e\u062a\u200c\u062a\u0631 \u0645\u06cc\u0634\u0647. \u0686\u0648\u0646 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0628\u0627 \u0645\u0646\u0637\u0642 \u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc \u0642\u0627\u0637\u06cc \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0637\u0631\u0627\u062d\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc\u200c\u062a\u0631 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Backend \u0641\u0642\u0637 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0631\u0648 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u0639\u0644\u0627\u0645 \u06a9\u0646\u0647 \u06a9\u0647 \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647\u060c \u06cc\u06a9 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647 \u06cc\u0627 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062c\u062f\u06cc\u062f \u062b\u0628\u062a \u0634\u062f\u0647. \u0628\u0639\u062f \u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u062c\u062f\u0627 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0628\u0627\u06cc\u062f Notification \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647\u060c \u0641\u0642\u0637 \u06cc\u06a9 Data Message \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647\u060c \u0627\u06cc\u0645\u06cc\u0644 \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0628\u0634\u0647 \u06cc\u0627 \u062d\u062a\u06cc \u0647\u06cc\u0686 \u0627\u0642\u062f\u0627\u0645\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u0647. \u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u0646\u0637\u0642 \u0627\u0635\u0644\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0627\u0632 \u0646\u062d\u0648\u0647 \u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc \u062c\u062f\u0627 \u0645\u06cc\u0634\u0647 \u0648 \u062a\u0648\u0633\u0639\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 \u062e\u06cc\u0644\u06cc \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f. \u0627\u06af\u0631 \u0628\u0639\u062f\u0647\u0627 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u06cc \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 Notification\u060c \u0627\u06cc\u0645\u06cc\u0644 \u06cc\u0627 \u067e\u06cc\u0627\u0645\u06a9 \u0647\u0645 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u060c \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0645\u0646\u0637\u0642 \u0627\u0635\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u06cc\u061b \u0641\u0642\u0637 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc \u0631\u0648 \u0628\u0647 \u0647\u0645\u0648\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0645\u062a\u0635\u0644 \u0645\u06cc\u200c\u06a9\u0646\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0645\u0641\u0627\u0647\u06cc\u0645 \u0639\u0645\u0644\u06cc FCM \u0631\u0648 \u0634\u0646\u0627\u062e\u062a\u06cc\u0645. \u062f\u06cc\u062f\u06cc\u0645 \u06a9\u0647 Notification Message \u0648 Data Message \u0641\u0642\u0637 \u062f\u0648 \u0642\u0627\u0644\u0628 \u0645\u062e\u062a\u0644\u0641 \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u06cc\u0633\u062a\u0646\u060c \u0628\u0644\u06a9\u0647 \u062f\u0648 \u0631\u0648\u0634 \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0631\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0646. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0641\u0647\u0645\u06cc\u062f\u06cc\u0645 \u06a9\u0647 FCM \u0635\u0631\u0641\u0627\u064b \u0645\u0633\u0626\u0648\u0644 \u0627\u0646\u062a\u0642\u0627\u0644 \u067e\u06cc\u0627\u0645\u0647 \u0648 \u0646\u0645\u0627\u06cc\u0634 Notification \u0641\u0642\u0637 \u06cc\u06a9\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u062f\u0647\u0627\u06cc \u0627\u0648\u0646 \u0628\u0647 \u062d\u0633\u0627\u0628 \u0645\u06cc\u0627\u062f. \u0628\u0639\u062f \u0628\u0627 Topic \u0622\u0634\u0646\u0627 \u0634\u062f\u06cc\u0645 \u06a9\u0647 \u0627\u0631\u0633\u0627\u0644 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0631\u0648 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0645\u0641\u0647\u0648\u0645 Priority \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0631\u062f\u06cc\u0645 \u062a\u0627 \u0628\u062f\u0648\u0646\u06cc\u0645 \u0647\u0645\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0627\u0631\u0632\u0634 \u06cc\u06a9\u0633\u0627\u0646\u06cc \u0646\u062f\u0627\u0631\u0646\u060c \u062f\u0631\u0628\u0627\u0631\u0647 TTL \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u06cc\u0645 \u06a9\u0647 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062a\u0627 \u0686\u0647 \u0645\u062f\u062a \u0627\u0631\u0632\u0634 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u062f\u0627\u0631\u0647 \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0647\u0645 \u062f\u06cc\u062f\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u06cc\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc\u060c Backend \u0628\u0647\u062a\u0631\u0647 \u0641\u0642\u0637 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0631\u0648 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0647 \u0648 \u062a\u0635\u0645\u06cc\u0645 \u062f\u0631\u0628\u0627\u0631\u0647 \u0646\u062d\u0648\u0647 \u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc \u0628\u0647 \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u0628\u0627\u0644\u0627\u062a\u0631 \u0633\u067e\u0631\u062f\u0647 \u0628\u0634\u0647. \u0627\u06cc\u0646 \u0646\u06af\u0627\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631\u062a\u0631\u060c \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc\u200c\u062a\u0631 \u0648 \u0622\u0645\u0627\u062f\u0647\u200c\u062a\u0631 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647\u200c\u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u0627\u062f\u0627\u0645\u0647 \u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u067e\u0646\u062c\u0645<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Firebase Cloud Messaging (\u0628\u062e\u0634 \u0633\u0648\u0645)<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u06cc\u06a9 \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0632\u0631\u06af\u061b \u0641\u06a9\u0631 \u0646\u06a9\u0646 FCM \u06cc\u0639\u0646\u06cc \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u0628\u0627 FCM \u0622\u0634\u0646\u0627 \u0645\u06cc\u0634\u0646\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06cc\u06a9 \u0627\u0634\u062a\u0628\u0627\u0647 \u0631\u0627\u06cc\u062c \u0645\u0631\u062a\u06a9\u0628 \u0645\u06cc\u0634\u0646. \u0628\u0627 \u062e\u0648\u062f\u0634\u0648\u0646 \u0645\u06cc\u06af\u0646 \u062d\u0627\u0644\u0627 \u06a9\u0647 \u0647\u0631 \u0648\u0642\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u060c \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u067e\u0633 \u062f\u06cc\u06af\u0647 \u0646\u06cc\u0627\u0632\u06cc \u0646\u06cc\u0633\u062a \u0645\u0648\u0642\u0639 \u0628\u0627\u0632 \u0634\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0628\u06af\u06cc\u0631\u06cc\u0645. \u0627\u06cc\u0646 \u0646\u06af\u0627\u0647 \u062f\u0631 \u0638\u0627\u0647\u0631 \u0645\u0646\u0637\u0642\u06cc\u0647\u060c \u0627\u0645\u0627 \u062f\u0631 \u0639\u0645\u0644 \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0627\u06cc\u062c\u200c\u062a\u0631\u06cc\u0646 \u062f\u0644\u0627\u06cc\u0644 \u0646\u0627\u0633\u0627\u0632\u06af\u0627\u0631 \u0634\u062f\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0646 \u06af\u0648\u0634\u06cc \u0648 Backend \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0644\u06cc\u0644\u0634 \u0647\u0645 \u062e\u06cc\u0644\u06cc \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. FCM \u0647\u06cc\u0686\u200c\u0648\u0642\u062a \u062a\u0636\u0645\u06cc\u0646 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0647\u0645\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0635\u062f\u062f\u0631\u0635\u062f \u0648 \u0628\u062f\u0648\u0646 \u0627\u0633\u062a\u062b\u0646\u0627 \u0628\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0628\u0631\u0633\u0646. \u0645\u0645\u06a9\u0646\u0647 \u06af\u0648\u0634\u06cc \u0686\u0646\u062f \u0633\u0627\u0639\u062a \u062e\u0627\u0645\u0648\u0634 \u0628\u0627\u0634\u0647\u060c \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06a9\u0627\u0631\u0628\u0631 \u0642\u0637\u0639 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 Google Play Services \u0631\u0648 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0645\u0635\u0631\u0641 \u0628\u0627\u062a\u0631\u06cc \u0628\u0627\u0639\u062b \u062a\u0623\u062e\u06cc\u0631 \u062f\u0631 \u067e\u0631\u062f\u0627\u0632\u0634 \u067e\u06cc\u0627\u0645 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u062d\u062a\u06cc \u0628\u0647 \u0647\u0631 \u062f\u0644\u06cc\u0644 \u062f\u06cc\u06af\u0631\u06cc \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062e\u0627\u0635 \u0628\u0647 \u0645\u0642\u0635\u062f \u0646\u0631\u0633\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u06af\u0631 \u06a9\u0644 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u062a \u0631\u0648 \u0641\u0642\u0637 \u0631\u0648\u06cc FCM \u0628\u0646\u0627 \u06a9\u0646\u06cc\u060c \u062f\u06cc\u0631 \u06cc\u0627 \u0632\u0648\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 \u06af\u0648\u0634\u06cc \u0628\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648\u0627\u0642\u0639\u06cc \u0633\u0631\u0648\u0631 \u0627\u062e\u062a\u0644\u0627\u0641 \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 \u0628\u0627\u06cc\u062f \u0647\u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u0627\u0635\u0644 \u0645\u0647\u0645 \u0631\u0648 \u06cc\u0627\u062f\u062a \u0628\u0645\u0648\u0646\u0647\u061b <strong>FCM \u0641\u0642\u0637 \u062e\u0628\u0631 \u0645\u06cc\u062f\u0647 \u06a9\u0647 \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0686\u06cc\u0632\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647\u060c \u0627\u0645\u0627 \u0645\u0631\u062c\u0639 \u0627\u0635\u0644\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0647\u0645\u06cc\u0634\u0647 Backend \u0627\u0633\u062a.<\/strong> \u06cc\u0639\u0646\u06cc \u0648\u0642\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u0647\u0645\u0648\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u062d\u0642\u06cc\u0642\u062a \u0646\u0647\u0627\u06cc\u06cc \u0641\u0631\u0636 \u06a9\u0646\u0647\u060c \u0628\u0644\u06a9\u0647 \u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627 \u0628\u0647\u062a\u0631\u0647 \u0627\u0632 \u0627\u0648\u0646 \u067e\u06cc\u0627\u0645 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0632\u0646\u06af \u0647\u0634\u062f\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0647 \u062a\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0646\u06af\u0627\u0647 \u0634\u0627\u06cc\u062f \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u06a9\u0645\u06cc \u067e\u0631\u0647\u0632\u06cc\u0646\u0647\u200c\u062a\u0631 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u0647\u060c \u0627\u0645\u0627 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u062d\u062a\u06cc \u0627\u06af\u0631 \u0686\u0646\u062f \u067e\u06cc\u0627\u0645 \u0647\u0645 \u0627\u0632 \u062f\u0633\u062a \u0628\u0631\u0646\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 Sync \u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u06cc\u0627\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 Backend \u062a\u0634\u062e\u06cc\u0635 \u062f\u0627\u062f\u0647 \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0648 \u06cc\u06a9 Data Message \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0631\u062f\u0647. \u0634\u0627\u06cc\u062f \u0627\u0648\u0644\u06cc\u0646 \u0627\u06cc\u062f\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0642\u06cc\u0645\u062a \u062c\u062f\u06cc\u062f \u0647\u0645 \u062f\u0627\u062e\u0644 \u0647\u0645\u0648\u0646 \u067e\u06cc\u0627\u0645 \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0647\u0645\u0648\u0646 \u0645\u0642\u062f\u0627\u0631 \u0631\u0648 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u062e\u06cc\u0644\u06cc \u06a9\u0648\u0686\u06a9 \u0634\u0627\u06cc\u062f \u062c\u0648\u0627\u0628 \u0628\u062f\u0647\u060c \u0627\u0645\u0627 \u0647\u0631\u0686\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0628\u0632\u0631\u06af\u200c\u062a\u0631 \u0628\u0634\u0647\u060c \u0645\u0634\u06a9\u0644\u0627\u062a\u0634 \u0628\u06cc\u0634\u062a\u0631 \u062e\u0648\u062f\u0634 \u0631\u0648 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0686\u0646\u062f \u062a\u063a\u06cc\u06cc\u0631 \u067e\u0634\u062a \u0633\u0631 \u0647\u0645 \u0631\u0648\u06cc \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647 \u0648 \u0641\u0642\u0637 \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0628\u0647 \u06af\u0648\u0634\u06cc \u0631\u0633\u06cc\u062f\u0647\u060c \u06cc\u0627 \u06cc\u06a9\u06cc \u0627\u0632 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0648\u0633\u0637 \u0631\u0627\u0647 \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 \u06af\u0648\u0634\u06cc \u0646\u0627\u0642\u0635 \u0645\u06cc\u0634\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 \u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u067e\u06cc\u0627\u0645 \u0641\u0642\u0637 \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f \u0627\u062a\u0641\u0627\u0642 \u0627\u0641\u062a\u0627\u062f\u0647 \u0648 \u0628\u0639\u062f \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0627\u0632 Backend \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u06cc\u0639\u0646\u06cc FCM \u0646\u0642\u0634 \u06cc\u06a9 \u0632\u0646\u06af \u062f\u0631 \u0631\u0648 \u0628\u0627\u0632\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647\u061b \u0632\u0646\u06af \u0641\u0642\u0637 \u062e\u0628\u0631 \u0645\u06cc\u062f\u0647 \u06a9\u0647 \u06a9\u0633\u06cc \u067e\u0634\u062a \u062f\u0631\u0647\u060c \u0627\u0645\u0627 \u062e\u0648\u062f\u062a \u0628\u0627\u06cc\u062f \u062f\u0631 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0646\u06cc \u0648 \u0628\u0628\u06cc\u0646\u06cc \u0686\u0647 \u06a9\u0633\u06cc \u0627\u0648\u0645\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0646 \u0646\u06af\u0627\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u062d\u062a\u06cc \u0627\u06af\u0631 \u06cc\u06a9\u06cc \u0627\u0632 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0628\u0647 \u0647\u0631 \u062f\u0644\u06cc\u0644\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u0634\u0647\u060c \u062f\u0641\u0639\u0647 \u0628\u0639\u062f \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u062c\u0631\u0627 \u0634\u062f \u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0635\u0641\u062d\u0647 \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0631\u062f\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u0634\u0647 \u0648 \u0627\u062e\u062a\u0644\u0627\u0641\u200c\u0647\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u0646. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Sync \u0648\u0627\u0642\u0639\u06cc \u0647\u0645\u06cc\u0634\u0647 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 Backend \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647 \u0648 FCM \u0641\u0642\u0637 \u0634\u0631\u0648\u0639\u200c\u06a9\u0646\u0646\u062f\u0647 \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u06af\u0631 \u067e\u06cc\u0627\u0645 \u0646\u0631\u0633\u06cc\u062f\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u062e\u0631\u0627\u0628 \u0628\u0634\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0646\u0634\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u06cc\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc \u0636\u0639\u06cc\u0641 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u06af\u0631 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 FCM \u0628\u0647 \u0645\u0642\u0635\u062f \u0646\u0631\u0633\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0627\u0631\u062f \u0648\u0636\u0639\u06cc\u062a \u0646\u0627\u062f\u0631\u0633\u062a\u06cc \u0628\u0634\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u067e\u06cc\u0627\u0645 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062a\u0623\u06cc\u06cc\u062f \u06cc\u06a9 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647\u060c \u0627\u0645\u0627 \u06af\u0648\u0634\u06cc \u0627\u0648\u0646 \u0644\u062d\u0638\u0647 \u0622\u0641\u0644\u0627\u06cc\u0646 \u0628\u0648\u062f\u0647 \u0648 \u067e\u06cc\u0627\u0645 \u0647\u0645 \u0628\u0647 \u0647\u0631 \u062f\u0644\u06cc\u0644\u06cc \u0627\u0632 \u0628\u06cc\u0646 \u0631\u0641\u062a\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0642\u0637 \u0645\u0646\u062a\u0638\u0631 \u0647\u0645\u0648\u0646 \u067e\u06cc\u0627\u0645 \u0628\u0627\u0634\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u062a\u0627 \u0645\u062f\u062a\u200c\u0647\u0627 \u0647\u0645\u0686\u0646\u0627\u0646 \u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0631\u0648 \u062f\u0631 \u062d\u0627\u0644 \u0628\u0631\u0631\u0633\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0645\u062f\u062a\u200c\u0647\u0627\u0633\u062a \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0647\u06cc\u0686\u200c\u0648\u0642\u062a \u062e\u0648\u062f\u0634 \u0631\u0648 \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0647 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647. \u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u0635\u0641\u062d\u0647 \u0645\u0631\u0628\u0648\u0637\u0647 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648\u0627\u0642\u0639\u06cc \u0627\u0632 Backend \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0627\u06af\u0631 \u062a\u063a\u06cc\u06cc\u0631\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u0635\u0644\u0627\u062d \u0645\u06cc\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0646 \u06cc\u06a9 Notification \u06cc\u0627 \u06cc\u06a9 Data Message \u0646\u0628\u0627\u06cc\u062f \u0628\u0627\u0639\u062b \u062e\u0631\u0627\u0628 \u0634\u062f\u0646 \u0645\u0646\u0637\u0642 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0634\u0647. \u0627\u06af\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0647 \u0634\u06a9\u0644\u06cc \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u06a9\u0647 \u0646\u0628\u0648\u062f\u0646 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u06a9\u0644 \u0633\u06cc\u0633\u062a\u0645 \u0631\u0648 \u0628\u0647 \u0647\u0645 \u0645\u06cc\u200c\u0631\u06cc\u0632\u0647\u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u062c\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0645\u0634\u06a9\u0644 \u062f\u0627\u0631\u0647\u060c \u0646\u0647 FCM.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 FCM \u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0686\u0646\u062f \u0633\u0627\u0644 \u06a9\u0627\u0631 \u0631\u0648\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u06a9\u062b\u0631 \u062a\u06cc\u0645\u200c\u0647\u0627 \u0628\u0647 \u06cc\u06a9 \u0646\u062a\u06cc\u062c\u0647 \u0645\u0634\u062a\u0631\u06a9 \u0645\u06cc\u200c\u0631\u0633\u0646\u061b \u0647\u0631\u0686\u0647 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc FCM \u06a9\u0648\u0686\u06a9\u200c\u062a\u0631 \u0648 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0628\u0627\u0634\u0646\u060c \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0631\u0627\u062d\u062a\u200c\u062a\u0631 \u0645\u06cc\u0634\u0647. \u06cc\u0639\u0646\u06cc \u0628\u0647\u062a\u0631\u0647 \u067e\u06cc\u0627\u0645 \u0641\u0642\u0637 \u0628\u06af\u0647 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0627\u0641\u062a\u0627\u062f\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0645\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0627\u0648\u0646 \u0627\u062a\u0641\u0627\u0642 \u0631\u0648 \u0628\u0627 \u062e\u0648\u062f\u0634 \u062d\u0645\u0644 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647. \u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0646\u0627\u0645 \u0645\u062d\u0635\u0648\u0644\u060c \u0642\u06cc\u0645\u062a \u0642\u0628\u0644\u06cc\u060c \u0642\u06cc\u0645\u062a \u062c\u062f\u06cc\u062f\u060c \u0646\u0627\u0645 \u0641\u0631\u0648\u0634\u06af\u0627\u0647\u060c \u0632\u0645\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0648 \u062f\u0647\u200c\u0647\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u06cc\u06af\u0647 \u062f\u0627\u062e\u0644 \u067e\u06cc\u0627\u0645 \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06a9\u0627\u0641\u06cc\u200c\u0633\u062a \u0641\u0642\u0637 \u0646\u0648\u0639 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647. \u0628\u0639\u062f \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0645\u0644 \u0631\u0648 \u0627\u0632 Backend \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0686\u0646\u062f \u0645\u0632\u06cc\u062a \u0645\u0647\u0645 \u062f\u0627\u0631\u0647. \u0627\u0648\u0644 \u0627\u06cc\u0646\u06a9\u0647 \u062d\u062c\u0645 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u062e\u06cc\u0644\u06cc \u06a9\u0645\u062a\u0631 \u0645\u06cc\u0634\u0647. \u062f\u0648\u0645 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u06af\u0631 \u0633\u0627\u062e\u062a\u0627\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647\u060c \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0642\u0627\u0644\u0628 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc FCM \u0647\u0645 \u0645\u0631\u062a\u0628 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647. \u0633\u0648\u0645 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u062d\u062a\u0645\u0627\u0644 \u0646\u0627\u0633\u0627\u0632\u06af\u0627\u0631 \u0634\u062f\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0646 \u06af\u0648\u0634\u06cc \u0648 \u0633\u0631\u0648\u0631 \u06a9\u0645\u062a\u0631 \u0645\u06cc\u0634\u0647\u060c \u0686\u0648\u0646 \u0647\u0645\u06cc\u0634\u0647 \u0622\u062e\u0631\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 Backend \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0634\u0631\u06a9\u062a\u200c\u0647\u0627\u06cc \u0628\u0632\u0631\u06af\u060c FCM \u0631\u0648 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc \u062f\u0631 \u0646\u0638\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646\u060c \u0646\u0647 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0627\u0646\u062a\u0642\u0627\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062d\u062c\u06cc\u0645.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u06cc \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0645 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0686\u06cc\u0632\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u062f\u0631\u0628\u0627\u0631\u0647 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0633\u0627\u062e\u062a\u06cc\u0645\u060c \u0645\u0639\u0645\u0627\u0631\u06cc \u0646\u0647\u0627\u06cc\u06cc FCM \u0631\u0648 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0628\u062f\u0645\u060c \u0645\u0633\u06cc\u0631 \u06a9\u0644\u06cc \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0627\u06cc\u0646 \u0634\u06a9\u0644\u06cc\u0647. \u0647\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f \u0627\u0632 \u0646\u0635\u0628 \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u06a9 Token \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0627\u0648\u0646 Token \u062f\u0627\u062e\u0644 Backend \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u0634\u0647. \u0647\u0631 \u0632\u0645\u0627\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f\u06cc \u0645\u062b\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a\u060c \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u062d\u0630\u0641 \u0645\u062d\u0635\u0648\u0644 \u06cc\u0627 \u0647\u0631 \u0627\u062a\u0641\u0627\u0642 \u0645\u0647\u0645 \u062f\u06cc\u06af\u0647\u200c\u0627\u06cc \u0631\u062e \u0628\u062f\u0647\u060c Backend \u0641\u0642\u0637 \u06cc\u06a9 Data Message \u0628\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062d\u062f\u0627\u0642\u0644\u06cc \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u06cc\u0627\u0645\u060c \u0646\u0648\u0639 \u0631\u0648\u06cc\u062f\u0627\u062f \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0648\u0627\u06a9\u0646\u0634 \u0686\u06cc\u0647. \u0627\u06af\u0631 \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0647\u060c \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 Room \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u0634\u0647\u060c \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 Render \u0645\u06cc\u0634\u0647 \u0648 \u0641\u0642\u0637 \u0627\u06af\u0631 \u0634\u0631\u0627\u06cc\u0637 \u0645\u0646\u0627\u0633\u0628 \u0628\u0627\u0634\u0647\u060c Notification \u0647\u0645 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u0647\u06cc\u0686\u200c\u06a9\u062f\u0648\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0647 \u0647\u0645 \u0646\u06cc\u0633\u062a\u0646. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632 \u0628\u0627\u0634\u0647\u060c \u0634\u0627\u06cc\u062f \u0627\u0635\u0644\u0627\u064b Notification \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0646\u0634\u0647 \u0648 \u0641\u0642\u0637 \u0635\u0641\u062d\u0647 \u0641\u0639\u0644\u06cc \u0628\u0647\u200c\u0631\u0648\u0632 \u0628\u0634\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0627\u0639\u0644\u0627\u0646 \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u0628\u0627\u0634\u0647\u060c \u0639\u0645\u0644\u06cc\u0627\u062a \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0628\u0647 \u0632\u0645\u0627\u0646 \u0645\u0646\u0627\u0633\u0628\u200c\u062a\u0631\u06cc \u0645\u0648\u06a9\u0648\u0644 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 \u0627\u0646\u0639\u0637\u0627\u0641 \u062f\u0642\u06cc\u0642\u0627\u064b \u0647\u0645\u0648\u0646 \u0686\u06cc\u0632\u06cc\u0647 \u06a9\u0647 \u06cc\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0628\u0627\u06cc\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0646\u062f \u0627\u0634\u062a\u0628\u0627\u0647 \u0631\u0627\u06cc\u062c \u06a9\u0647 \u0628\u0647\u062a\u0631\u0647 \u0627\u0632 \u0647\u0645\u0648\u0646 \u0627\u0648\u0644 \u0645\u0631\u062a\u06a9\u0628\u0634\u0648\u0646 \u0646\u0634\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062a\u0645\u0627\u0645 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0628\u0627 \u0628\u0627\u0644\u0627\u062a\u0631\u06cc\u0646 Priority \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0646. \u0634\u0627\u06cc\u062f \u062f\u0631 \u06a9\u0648\u062a\u0627\u0647\u200c\u0645\u062f\u062a \u0645\u0634\u06a9\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0628\u0647 \u0645\u0631\u0648\u0631 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 FCM \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0631\u0648 \u063a\u06cc\u0631\u0639\u0627\u062f\u06cc \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u0647 \u0648 \u0645\u0632\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0648\u0644\u0648\u06cc\u062a \u0628\u0627\u0644\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u0647. \u0627\u0634\u062a\u0628\u0627\u0647 \u0631\u0627\u06cc\u062c \u062f\u06cc\u06af\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Token \u0641\u0642\u0637 \u06cc\u06a9 \u0628\u0627\u0631 \u0645\u0648\u0642\u0639 \u0646\u0635\u0628 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0627\u062e\u0644 Backend \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647 \u0648 \u0628\u0639\u062f \u0647\u06cc\u0686\u200c\u0648\u0642\u062a \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0646\u0634\u0647\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0647\u0645\u0648\u0646\u200c\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0628\u062e\u0634 \u0642\u0628\u0644 \u062f\u06cc\u062f\u06cc\u0645\u060c Token \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0637\u0648\u0644 \u0632\u0645\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0639\u062f\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 Data Message \u0631\u0648 \u0628\u062f\u0648\u0646 \u0647\u06cc\u0686 \u0628\u0631\u0631\u0633\u06cc \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u062d\u0642\u06cc\u0642\u062a \u0646\u0647\u0627\u06cc\u06cc \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u0647. \u0628\u0647\u062a\u0631\u0647 \u067e\u06cc\u0627\u0645 \u0641\u0642\u0637 \u0634\u0631\u0648\u0639\u200c\u06a9\u0646\u0646\u062f\u0647 \u0641\u0631\u0622\u06cc\u0646\u062f \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0628\u0627\u0634\u0647\u060c \u0646\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 Backend. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0648\u0686\u06a9 \u06cc\u06a9 Notification \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0646. \u0646\u062a\u06cc\u062c\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f \u0645\u0634\u062e\u0635 \u0645\u06cc\u0634\u0647\u061b \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u062a\u0639\u062f\u0627\u062f \u0632\u06cc\u0627\u062f \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u062e\u0633\u062a\u0647 \u0645\u06cc\u0634\u0647\u060c \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u06cc\u200c\u0635\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06cc\u0627 \u062d\u062a\u06cc \u0645\u062c\u0648\u0632 Notification \u0631\u0648 \u06a9\u0627\u0645\u0644\u0627\u064b \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u0631\u0632\u0634 Notification \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u062d\u0641\u0638 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0631\u0627\u06cc \u0627\u062a\u0641\u0627\u0642\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc \u062f\u0631\u0633<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 \u06a9\u0647 \u0627\u06cc\u0646 \u0633\u0647 \u0628\u062e\u0634 \u0631\u0648 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0645\u06cc\u200c\u0630\u0627\u0631\u06cc\u0645\u060c \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627\u0645\u0644\u200c\u062a\u0631\u06cc \u0627\u0632 Firebase Cloud Messaging \u0628\u0647 \u062f\u0633\u062a \u0645\u06cc\u0627\u062f. \u0627\u0648\u0644 \u0641\u0647\u0645\u06cc\u062f\u06cc\u0645 \u0686\u0631\u0627 Backend \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0627 \u06af\u0648\u0634\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0631\u0642\u0631\u0627\u0631 \u06a9\u0646\u0647 \u0648 \u0686\u0631\u0627 \u06af\u0648\u06af\u0644 \u0646\u0642\u0634 \u0648\u0627\u0633\u0637\u0647 \u0631\u0648 \u0628\u06cc\u0646 \u0633\u0631\u0648\u0631 \u0648 \u062f\u0633\u062a\u06af\u0627\u0647 \u0628\u0627\u0632\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0639\u062f \u0628\u0627 Token\u060c Firebase Project\u060c Data Message\u060c Notification Message\u060c Topic\u060c Priority \u0648 TTL \u0622\u0634\u0646\u0627 \u0634\u062f\u06cc\u0645 \u0648 \u062f\u06cc\u062f\u06cc\u0645 \u06a9\u0647 \u0647\u0631 \u06a9\u062f\u0648\u0645 \u0686\u0647 \u0646\u0642\u0634\u06cc \u062f\u0627\u062e\u0644 \u0627\u06cc\u0646 \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 \u062f\u0627\u0631\u0646. \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0647\u0645 \u0628\u0647 \u0627\u06cc\u0646 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0633\u06cc\u062f\u06cc\u0645 \u06a9\u0647 FCM \u0646\u0628\u0627\u06cc\u062f \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 Backend \u06cc\u0627 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647\u060c \u0628\u0644\u06a9\u0647 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc \u0647\u0648\u0634\u0645\u0646\u062f\u0647 \u06a9\u0647 \u0641\u0642\u0637 \u062e\u0628\u0631 \u0645\u06cc\u062f\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0627\u0641\u062a\u0627\u062f\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0648\u0627\u06a9\u0646\u0634 \u0686\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0645 \u06a9\u0644 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0631\u0648 \u0641\u0642\u0637 \u062f\u0631 \u06cc\u06a9 \u062c\u0645\u0644\u0647 \u062e\u0644\u0627\u0635\u0647 \u06a9\u0646\u0645\u060c \u0627\u0648\u0646 \u062c\u0645\u0644\u0647 \u0627\u06cc\u0646\u0647: <strong>Backend \u0647\u0645\u06cc\u0634\u0647 \u0645\u0631\u062c\u0639 \u0627\u0635\u0644\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u0647\u060c FCM \u0641\u0642\u0637 \u062e\u0628\u0631\u0631\u0633\u0627\u0646\u0647 \u0648 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0647\u0645 \u062a\u0635\u0645\u06cc\u0645\u200c\u06af\u06cc\u0631\u0646\u062f\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a.<\/strong> \u0648\u0642\u062a\u06cc \u0627\u06cc\u0646 \u0633\u0647 \u0646\u0642\u0634 \u0627\u0632 \u0647\u0645 \u062c\u062f\u0627 \u0628\u0627\u0634\u0646\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645 \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631\u062a\u0631 \u0645\u06cc\u0634\u0647\u060c \u0647\u0645 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc\u0634 \u0631\u0627\u062d\u062a\u200c\u062a\u0631\u0647 \u0648 \u0647\u0645 \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u0642\u0637\u0639\u06cc \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u060c \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0646 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0622\u06cc\u0646\u062f\u0647 \u0645\u0642\u0627\u0648\u0645\u062a \u062e\u06cc\u0644\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u062e\u0648\u0627\u0647\u062f \u062f\u0627\u0634\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u0634\u0634\u0645<\/h3>\n\n\n\n<h1 class=\"wp-block-heading\">Notification Channel<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f Notification Channel \u0631\u0648 \u0628\u0647 \u0648\u062c\u0648\u062f \u0622\u0648\u0631\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 Android 8\u060c \u06a9\u0646\u062a\u0631\u0644 \u0628\u06cc\u0634\u062a\u0631 \u0631\u0641\u062a\u0627\u0631 \u0627\u0639\u0644\u0627\u0646 \u062f\u0633\u062a \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0648\u062f. \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u0631\u0641\u062a \u0627\u0639\u0644\u0627\u0646 \u0635\u062f\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0646\u0647\u060c \u0648\u06cc\u0628\u0631\u0647 \u0628\u0632\u0646\u0647 \u06cc\u0627 \u0646\u0632\u0646\u0647\u060c \u0686\u0642\u062f\u0631 \u0645\u0647\u0645 \u0628\u0627\u0634\u0647 \u0648 \u0686\u0637\u0648\u0631 \u062a\u0648\u062c\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062c\u0644\u0628 \u0628\u06a9\u0646\u0647. \u0645\u0634\u06a9\u0644 \u0627\u06cc\u0646\u062c\u0627 \u0628\u0648\u062f \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0641\u0642\u0637 \u062f\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0627\u0634\u062a\u061b \u06cc\u0627 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u06a9\u0627\u0645\u0644 \u062a\u062d\u0645\u0644 \u0628\u06a9\u0646\u0647\u060c \u06cc\u0627 \u0647\u0645\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0627\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0628\u0646\u062f\u0647. \u0645\u062b\u0644\u0627\u064b \u0634\u0627\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u062f\u0648\u0633\u062a \u062f\u0627\u0634\u062a \u0627\u0639\u0644\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647\u200c\u0627\u0634 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0647\u06cc\u0686 \u0639\u0644\u0627\u0642\u0647\u200c\u0627\u06cc \u0628\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062a\u0628\u0644\u06cc\u063a\u0627\u062a\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0646\u062f\u0627\u0634\u062a. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645\u0647 \u0627\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0631\u0648 \u0628\u0627 \u06cc\u06a9 \u0647\u0648\u06cc\u062a \u0648\u0627\u062d\u062f \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0627\u062f \u0648 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u0631\u0627\u0647 \u062f\u0642\u06cc\u0642\u06cc \u0628\u0631\u0627\u06cc \u062c\u062f\u0627 \u06a9\u0631\u062f\u0646\u0634\u0648\u0646 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u06cc\u200c\u0630\u0627\u0634\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0648\u06af\u0644 \u0627\u0632 Android 8.0 \u06cc\u0627 API 26 \u0628\u0647 \u0628\u0639\u062f Notification Channel \u0631\u0648 \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f \u062a\u0627 \u0627\u06cc\u0646 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0631\u0648 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633 \u0628\u0647 \u0634\u06a9\u0644 \u06a9\u0627\u0645\u0644\u200c\u062a\u0631\u06cc \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0646\u062a\u0642\u0644 \u0628\u06a9\u0646\u0647. \u0627\u0632 \u0627\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0628\u0647 \u0628\u0639\u062f\u060c \u0647\u0631 Notification \u0628\u0627\u06cc\u062f \u0639\u0636\u0648 \u06cc\u06a9 Channel \u0645\u0634\u062e\u0635 \u0628\u0627\u0634\u0647 \u0648 \u0631\u0641\u062a\u0627\u0631\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u0627\u0639\u0644\u0627\u0646 \u0645\u062b\u0644 \u0645\u06cc\u0632\u0627\u0646 \u0627\u0647\u0645\u06cc\u062a\u060c \u0635\u062f\u0627 \u0648 \u0648\u06cc\u0628\u0631\u0647 \u062f\u0631 \u0633\u0637\u062d \u0647\u0645\u0648\u0646 Channel \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u0634\u0646. \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0648\u0627\u0631\u062f \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06af\u0648\u0634\u06cc \u0628\u0634\u0647 \u0648 \u0628\u0631\u0627\u06cc \u0647\u0631 Channel \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647\u061b \u0645\u062b\u0644\u0627\u064b \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0631\u0648 \u0631\u0648\u0634\u0646 \u0646\u06af\u0647 \u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0631\u0648 \u0628\u06cc\u200c\u0635\u062f\u0627 \u06cc\u0627 \u06a9\u0627\u0645\u0644\u0627\u064b \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0628\u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Notification Channel \u0641\u0642\u0637 \u06cc\u06a9 \u0627\u0644\u0632\u0627\u0645 \u0641\u0646\u06cc \u0646\u06cc\u0633\u062a\u061b \u062f\u0631 \u0627\u0635\u0644 \u06cc\u06a9 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0628\u06cc\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0648 \u06a9\u0627\u0631\u0628\u0631\u0647 \u06a9\u0647 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0647\u0631 \u062f\u0633\u062a\u0647 \u0627\u0632 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0686\u0647 \u0645\u0627\u0647\u06cc\u062a\u06cc \u062f\u0627\u0631\u0646 \u0648 \u0686\u0642\u062f\u0631 \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u0631\u0646 \u0645\u0632\u0627\u062d\u0645 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0645\u0647\u0645 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u062f\u0627\u0634\u062a: \u0627\u0632 Android 8 \u0628\u0647 \u0628\u0639\u062f \u062f\u06cc\u06af\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627\u0644\u06a9 \u06a9\u0627\u0645\u0644 \u0631\u0641\u062a\u0627\u0631 \u0627\u0639\u0644\u0627\u0646 \u0646\u06cc\u0633\u062a. \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0642\u0637 \u0645\u0648\u0642\u0639 \u0633\u0627\u062e\u062a Channel \u06cc\u06a9 \u0631\u0641\u062a\u0627\u0631 \u0627\u0648\u0644\u06cc\u0647 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u062f\u0647\u060c \u0627\u0645\u0627 \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f Channel\u060c \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0646\u062a\u0631\u0644 \u0627\u0635\u0644\u06cc \u0631\u0648 \u0628\u0647 \u062f\u0633\u062a \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u0627\u06cc\u0646 \u06cc\u0639\u0646\u06cc \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u06cc\u06a9 Notification \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u06cc \u0635\u062f\u0627\u06cc \u0627\u0648\u0646 \u0628\u0644\u0646\u062f\u062a\u0631 \u0628\u0627\u0634\u0647 \u06cc\u0627 Importance \u0628\u0627\u0644\u0627\u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0631\u0641\u062a\u0627\u0631 \u0627\u0639\u0644\u0627\u0646 \u0627\u0632 Channel \u0645\u06cc\u0627\u062f\u060c \u0646\u0647 \u0627\u0632 \u062e\u0648\u062f Notification. \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u067e\u0627\u06cc\u0647\u200c\u0627\u06cc\u200c\u062a\u0631\u06cc\u0646 \u0645\u0641\u0647\u0648\u0645 \u0627\u06cc\u0646 \u062f\u0631\u0633\u0647 \u0648 \u0627\u06af\u0631 \u062f\u0631\u0633\u062a \u0641\u0647\u0645\u06cc\u062f\u0647 \u0646\u0634\u0647\u060c \u0628\u0639\u062f\u0627\u064b \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0631\u0641\u062a\u0627\u0631\u0647\u0627\u06cc \u0639\u062c\u06cc\u0628 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0646\u0627\u0645\u0641\u0647\u0648\u0645 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u200c\u0631\u0633\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Channel \u0631\u0648 \u0645\u062b\u0644 \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0633\u0627\u062f\u0647 \u0646\u0628\u06cc\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0646\u06af\u0627\u0647 \u0627\u0648\u0644 \u0641\u06a9\u0631 \u06a9\u0646\u06cc Notification Channel \u0641\u0642\u0637 \u06cc\u06a9 Category \u0633\u0627\u062f\u0647 \u0627\u0633\u062a\u061b \u0645\u062b\u0644\u0627\u064b \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0631\u0648 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u0628\u0630\u0627\u0631\u06cc\u0645 \u0648 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062a\u0628\u0644\u06cc\u063a\u0627\u062a\u06cc \u0631\u0648 \u062f\u0627\u062e\u0644 \u062f\u0633\u062a\u0647 \u062f\u06cc\u06af\u0647. \u0627\u06cc\u0646 \u0628\u0631\u062f\u0627\u0634\u062a \u0646\u0635\u0641\u0647\u200c\u062f\u0631\u0633\u062a\u0647. Channel \u0627\u0632 \u0646\u0638\u0631 \u0645\u0641\u0647\u0648\u0645\u06cc \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0646\u0638\u0645 \u062f\u0627\u062f\u0646 \u0628\u0647 \u06a9\u062f \u0633\u0627\u062e\u062a\u0647 \u0646\u0634\u062f\u0647. \u0647\u0631 Channel \u06cc\u06a9 \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc \u062f\u0627\u062e\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0628\u06cc\u0646\u0647\u060c \u0635\u062f\u0627\u06cc \u0627\u0648\u0646 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647\u060c \u0648\u06cc\u0628\u0631\u0647\u200c\u0627\u0634 \u0631\u0648 \u0642\u0637\u0639 \u0628\u06a9\u0646\u0647\u060c Importance \u0631\u0648 \u067e\u0627\u06cc\u06cc\u0646 \u0628\u06cc\u0627\u0631\u0647 \u06cc\u0627 \u06a9\u0644 Channel \u0631\u0648 \u0628\u0628\u0646\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0633\u0647 \u0646\u0648\u0639 \u0627\u0639\u0644\u0627\u0646 \u062f\u0627\u0631\u0647. \u0646\u0648\u0639 \u0627\u0648\u0644 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647 \u0627\u0633\u062a\u060c \u0646\u0648\u0639 \u062f\u0648\u0645 \u0648\u0636\u0639\u06cc\u062a \u062b\u0628\u062a \u06cc\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u0647 \u0648 \u0646\u0648\u0639 \u0633\u0648\u0645 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0647\u0627 \u0648 \u062e\u0628\u0631\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a. \u0627\u0632 \u0646\u06af\u0627\u0647 Backend \u0647\u0631 \u0633\u0647 \u0641\u0642\u0637 Notification \u0647\u0633\u062a\u0646\u060c \u0627\u0645\u0627 \u0627\u0632 \u0646\u06af\u0627\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0631\u0632\u0634 \u06cc\u06a9\u0633\u0627\u0646\u06cc \u0646\u062f\u0627\u0631\u0646. \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u062f\u0644\u06cc\u0644 \u0627\u0635\u0644\u06cc \u0646\u0635\u0628 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0648\u062f\u0647\u060c \u067e\u0633 \u0627\u0647\u0645\u06cc\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0631\u0647. \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0647\u0645 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u06cc \u06a9\u0647 \u0645\u0646\u062a\u0638\u0631 \u0646\u062a\u06cc\u062c\u0647 \u0628\u0631\u0631\u0633\u06cc\u0647 \u0645\u0647\u0645\u0647\u060c \u0648\u0644\u06cc \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0639\u0645\u0648\u0645\u06cc \u0634\u0627\u06cc\u062f \u0627\u0635\u0644\u0627\u064b \u0636\u0631\u0648\u0631\u06cc \u0646\u0628\u0627\u0634\u0647. \u0627\u06af\u0631 \u0647\u0631 \u0633\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 \u06cc\u06a9 Channel \u0628\u0630\u0627\u0631\u06cc\u060c \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0631\u0641\u062a\u0627\u0631 \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0628\u0631\u0627\u0634\u0648\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u06a9\u0646\u0647. \u0627\u06af\u0631 Channel \u0631\u0648 \u06a9\u0627\u0645\u0644 \u0628\u0628\u0646\u062f\u0647\u060c \u062d\u062a\u06cc \u0627\u0639\u0644\u0627\u0646 \u0645\u0647\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0647\u0645 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u0631\u0647. \u0627\u06af\u0631 \u0628\u0627\u0632\u0634 \u0646\u06af\u0647 \u062f\u0627\u0631\u0647\u060c \u0628\u0627\u06cc\u062f \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062a\u0628\u0644\u06cc\u063a\u0627\u062a\u06cc \u0631\u0648 \u0647\u0645 \u062a\u062d\u0645\u0644 \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0633\u0624\u0627\u0644 \u062f\u0631\u0633\u062a \u0645\u0648\u0642\u0639 \u0637\u0631\u0627\u062d\u06cc Channel \u0627\u06cc\u0646 \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0686\u0646\u062f \u0646\u0648\u0639 Notification \u062f\u0627\u062e\u0644 \u06a9\u062f\u0645 \u062f\u0627\u0631\u0645\u061f \u0633\u0624\u0627\u0644 \u062f\u0631\u0633\u062a \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0628\u062e\u0648\u0627\u062f \u06a9\u062f\u0648\u0645 \u062f\u0633\u062a\u0647 \u0627\u0632 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0631\u0648 \u0645\u0633\u062a\u0642\u0644 \u0627\u0632 \u0628\u0642\u06cc\u0647 \u06a9\u0646\u062a\u0631\u0644 \u0628\u06a9\u0646\u0647\u061f \u0647\u0631\u062c\u0627 \u062c\u0648\u0627\u0628 \u0627\u06cc\u0646 \u0633\u0624\u0627\u0644 \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0627\u0634\u0647\u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0628\u0647 \u06cc\u06a9 Channel \u062c\u062f\u0627 \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u06cc. \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0646\u0648\u0639 \u0627\u0639\u0644\u0627\u0646 \u0645\u0639\u0646\u0627\u062f\u0627\u0631\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0646\u0647 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u06a9\u0646\u062a\u0631\u0644\u0634 \u0628\u06a9\u0646\u0647\u060c Channel \u062c\u062f\u0627 \u0628\u0633\u0627\u0632\u06cc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u062c\u0632\u0627\u06cc \u0627\u0635\u0644\u06cc \u06cc\u06a9 Notification Channel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 Channel \u062d\u062f\u0627\u0642\u0644 \u0633\u0647 \u0645\u0634\u062e\u0635\u0647 \u0645\u0647\u0645 \u062f\u0627\u0631\u0647: \u06cc\u06a9 <code>channelId<\/code>\u060c \u06cc\u06a9 \u0646\u0627\u0645 \u0642\u0627\u0628\u0644\u200c\u0645\u0634\u0627\u0647\u062f\u0647 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0648 \u06cc\u06a9 \u0633\u0637\u062d <code>importance<\/code>. \u0634\u0646\u0627\u0633\u0647 Channel \u0631\u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0646\u0627\u0645 Channel \u062f\u0627\u062e\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06af\u0648\u0634\u06cc \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u0634\u0646\u0627\u0633\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 <code>price_changes<\/code> \u0628\u0627\u0634\u0647 \u0648 \u0646\u0627\u0645 \u0642\u0627\u0628\u0644\u200c\u0646\u0645\u0627\u06cc\u0634 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u06cc\u0645\u062a. \u0627\u06cc\u0646 \u062f\u0648 \u0646\u0642\u0634 \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0631\u0646\u061b \u0634\u0646\u0627\u0633\u0647 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0641\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u060c \u0648\u0644\u06cc \u0646\u0627\u0645 \u0628\u062e\u0634\u06cc \u0627\u0632 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0634\u0646\u0627\u0633\u0647 Channel \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 Package \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u06a9\u062a\u0627 \u0628\u0627\u0634\u0647 \u0648 \u0628\u0647\u062a\u0631\u0647 \u0628\u0639\u062f \u0627\u0632 \u0627\u0646\u062a\u0634\u0627\u0631\u060c \u062a\u063a\u06cc\u06cc\u0631\u0634 \u0646\u062f\u06cc. \u0686\u0648\u0646 \u0627\u06af\u0631 \u0634\u0646\u0627\u0633\u0647 \u0631\u0648 \u0639\u0648\u0636 \u0628\u06a9\u0646\u06cc\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0648\u0646 \u0631\u0648 Channel \u062c\u062f\u06cc\u062f\u06cc \u062f\u0631 \u0646\u0638\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc Channel \u0642\u0628\u0644\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647\u060c \u0628\u0647 Channel \u062c\u062f\u06cc\u062f \u0645\u0646\u062a\u0642\u0644 \u0646\u0645\u06cc\u0634\u0646. \u0645\u062b\u0644\u0627\u064b \u06a9\u0627\u0631\u0628\u0631 Channel \u062a\u0628\u0644\u06cc\u063a\u0627\u062a \u0631\u0648 \u0628\u06cc\u200c\u0635\u062f\u0627 \u06a9\u0631\u062f\u0647\u060c \u0627\u0645\u0627 \u062a\u0648 \u062f\u0631 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0634\u0646\u0627\u0633\u0647 \u0631\u0648 \u0639\u0648\u0636 \u0645\u06cc\u200c\u06a9\u0646\u06cc \u0648 Channel \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u061b \u062d\u0627\u0644\u0627 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0638\u0627\u0647\u0631 \u0645\u06cc\u0634\u0646. \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0627\u0632 \u0646\u0638\u0631 \u0641\u0646\u06cc \u0634\u0627\u06cc\u062f \u062e\u0637\u0627 \u0646\u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u0627\u0632 \u0646\u0638\u0631 \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0641\u062a\u0627\u0631 \u0628\u062f\u06cc\u0647\u060c \u0686\u0648\u0646 \u0639\u0645\u0644\u0627\u064b \u0627\u0646\u062a\u062e\u0627\u0628 \u0642\u0628\u0644\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062f\u0648\u0631 \u0632\u062f\u06cc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0627\u0645 Channel \u0628\u0631\u0639\u06a9\u0633 \u0634\u0646\u0627\u0633\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u06a9\u0646\u0647. \u0627\u06af\u0631 \u0628\u0639\u062f\u0627\u064b \u0645\u062a\u0648\u062c\u0647 \u0634\u062f\u06cc \u0639\u0646\u0648\u0627\u0646 Price Updates \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0641\u0627\u0631\u0633\u06cc\u200c\u0632\u0628\u0627\u0646 \u0645\u0646\u0627\u0633\u0628 \u0646\u06cc\u0633\u062a\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0646\u0627\u0645 \u0646\u0645\u0627\u06cc\u0634\u06cc \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u06cc. \u062a\u0648\u0636\u06cc\u062d\u0627\u062a Channel \u0647\u0645 \u0642\u0627\u0628\u0644\u200c\u062a\u063a\u06cc\u06cc\u0631\u0647 \u0648 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u06af\u0647 \u0627\u06cc\u0646 Channel \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0634\u0627\u0645\u0644 \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u0631\u0641\u062a\u0627\u0631\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u0645\u062b\u0644 Importance \u0628\u0639\u062f \u0627\u0632 \u062b\u0628\u062a Channel \u062f\u06cc\u06af\u0647 \u0622\u0632\u0627\u062f\u0627\u0646\u0647 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u06cc\u0633\u062a\u0646. \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0635\u0631\u06cc\u062d\u0627\u064b \u0645\u06cc\u06af\u0646 \u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u062e\u062a Channel \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0631\u0641\u062a\u0627\u0631\u0647\u0627\u06cc \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u06cc\u060c \u0647\u0631\u0686\u0646\u062f \u0646\u0627\u0645 \u0648 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0647\u0645\u0686\u0646\u0627\u0646 \u0642\u0627\u0628\u0644\u200c\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0633\u0627\u062e\u062a Channel \u062f\u0631 Kotlin<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Channel \u0641\u0642\u0637 \u0631\u0648\u06cc Android 8 \u0648 \u0628\u0627\u0644\u0627\u062a\u0631 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u06a9\u062f \u0633\u0627\u062e\u062a\u0634 \u0628\u0627\u06cc\u062f \u0628\u0627 \u0628\u0631\u0631\u0633\u06cc \u0646\u0633\u062e\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u062c\u0631\u0627 \u0628\u0634\u0647. \u0631\u0648\u06cc \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc\u200c\u062a\u0631 \u06a9\u0644\u0627\u0633 <code>NotificationChannel<\/code> \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647 \u0648 \u0631\u0641\u062a\u0627\u0631 \u0627\u0639\u0644\u0627\u0646 \u0628\u0627 <code>priority<\/code> \u062e\u0648\u062f Notification \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc\u0634\u0647. \u0633\u0627\u062e\u062a \u06cc\u06a9 Channel \u0633\u0627\u062f\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>const val PRICE_ALERTS_CHANNEL_ID = \"price_alerts\"\n\nfun createPriceAlertsChannel(context: Context) {\n    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n        val channel = NotificationChannel(\n            PRICE_ALERTS_CHANNEL_ID,\n            \"\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u06cc\u0645\u062a\",\n            NotificationManager.IMPORTANCE_HIGH\n        ).apply {\n            description = \"\u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06a9\u0627\u0647\u0634 \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647\"\n        }\n\n        val notificationManager =\n            context.getSystemService(NotificationManager::class.java)\n\n        notificationManager.createNotificationChannel(channel)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">const<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> PRICE_ALERTS_CHANNEL_ID <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;price_alerts&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">createPriceAlertsChannel<\/span><span style=\"color: #24292E\">(context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (Build.VERSION.SDK_INT <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> Build.VERSION_CODES.O) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> channel <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">NotificationChannel<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            PRICE_ALERTS_CHANNEL_ID,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u06cc\u0645\u062a&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            NotificationManager.IMPORTANCE_HIGH<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ).<\/span><span style=\"color: #6F42C1\">apply<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            description <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06a9\u0627\u0647\u0634 \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> notificationManager <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            context.<\/span><span style=\"color: #6F42C1\">getSystemService<\/span><span style=\"color: #24292E\">(NotificationManager::<\/span><span style=\"color: #6F42C1\">class<\/span><span style=\"color: #24292E\">.java)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        notificationManager.<\/span><span style=\"color: #6F42C1\">createNotificationChannel<\/span><span style=\"color: #24292E\">(channel)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627 <code>PRICE_ALERTS_CHANNEL_ID<\/code> \u0634\u0646\u0627\u0633\u0647 \u0641\u0646\u06cc Channel\u0640\u0647. \u0639\u0646\u0648\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u06cc\u0645\u062a \u062f\u0627\u062e\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06af\u0648\u0634\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 <code>IMPORTANCE_HIGH<\/code> \u0631\u0641\u062a\u0627\u0631 \u0627\u0648\u0644\u06cc\u0647 Channel \u0631\u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0639\u062f Channel \u0631\u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 <code>NotificationManager<\/code> \u062f\u0627\u062e\u0644 \u0633\u06cc\u0633\u062a\u0645 \u062b\u0628\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062b\u0628\u062a Channel \u0628\u0627\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0646\u0645\u0627\u06cc\u0634 \u0627\u0648\u0644\u06cc\u0646 Notification \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u06a9\u0647 Android 8 \u06cc\u0627 \u0628\u0627\u0644\u0627\u062a\u0631 \u0631\u0648 \u0647\u062f\u0641 \u06af\u0631\u0641\u062a\u0647\u060c Notification \u0631\u0648 \u0628\u062f\u0648\u0646 Channel \u0645\u0639\u062a\u0628\u0631 \u0627\u0631\u0633\u0627\u0644 \u0628\u06a9\u0646\u0647\u060c \u0627\u0639\u0644\u0627\u0646 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0646\u0645\u06cc\u0634\u0647 \u0648 \u0633\u06cc\u0633\u062a\u0645 \u062e\u0637\u0627 \u062b\u0628\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0627\u062e\u062a Channel \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627\u06cc\u062f \u062f\u0631 \u0646\u0642\u0637\u0647\u200c\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647 \u06a9\u0647 \u0645\u0637\u0645\u0626\u0646 \u0628\u0627\u0634\u06cc\u0645 \u0642\u0628\u0644 \u0627\u0632 \u0627\u0648\u0644\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646 \u0627\u062c\u0631\u0627 \u0634\u062f\u0647. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0647\u0646\u06af\u0627\u0645 \u0634\u0631\u0648\u0639 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0627\u062e\u0644 \u06a9\u0644\u0627\u0633 <code>Application<\/code> \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647. \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 Notification \u0646\u06af\u0631\u0627\u0646 \u0628\u0627\u0634\u06cc \u06a9\u0647 Channel \u0627\u0632 \u0642\u0628\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u06cc\u0627 \u0646\u0647\u060c \u0686\u0648\u0646 \u0635\u062f\u0627 \u0632\u062f\u0646 \u062f\u0648\u0628\u0627\u0631\u0647 <code>createNotificationChannel()<\/code> \u0628\u0631\u0627\u06cc Channel \u0645\u0648\u062c\u0648\u062f \u0627\u0645\u0646\u0647 \u0648 \u062f\u0631 \u062d\u0627\u0644\u062a \u0639\u0627\u062f\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u0627\u0636\u0627\u0641\u0647\u200c\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u0645\u06cc\u062f\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc Channel\u0647\u0627\u06cc \u062b\u0627\u0628\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0647\u0631 \u0628\u0627\u0631 \u0647\u0646\u06af\u0627\u0645 \u0634\u0631\u0648\u0639 App \u062b\u0628\u062a \u0628\u06a9\u0646\u06cc\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0630\u062e\u06cc\u0631\u0647 Flag \u06cc\u0627 \u0628\u0631\u0631\u0633\u06cc \u062f\u0633\u062a\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class PriceBanApplication : Application() {\n\n    override fun onCreate() {\n        super.onCreate()\n\n        createNotificationChannels(this)\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">PriceBanApplication<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">Application<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onCreate<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #005CC5\">super<\/span><span style=\"color: #24292E\">.<\/span><span style=\"color: #6F42C1\">onCreate<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">createNotificationChannels<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">this<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun createNotificationChannels(context: Context) {\n    if (Build.VERSION.SDK_INT &lt; Build.VERSION_CODES.O) return\n\n    val channels = listOf(\n        NotificationChannel(\n            \"price_alerts\",\n            \"\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u06cc\u0645\u062a\",\n            NotificationManager.IMPORTANCE_HIGH\n        ).apply {\n            description = \"\u06a9\u0627\u0647\u0634 \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647\"\n        },\n\n        NotificationChannel(\n            \"business_status\",\n            \"\u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\",\n            NotificationManager.IMPORTANCE_DEFAULT\n        ).apply {\n            description = \"\u0646\u062a\u06cc\u062c\u0647 \u0628\u0631\u0631\u0633\u06cc \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062b\u0628\u062a\u200c\u0634\u062f\u0647\"\n        },\n\n        NotificationChannel(\n            \"general_updates\",\n            \"\u0627\u0637\u0644\u0627\u0639\u06cc\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc\",\n            NotificationManager.IMPORTANCE_LOW\n        ).apply {\n            description = \"\u062e\u0628\u0631\u0647\u0627\u060c \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0647\u0627 \u0648 \u0627\u0637\u0644\u0627\u0639\u06cc\u0647\u200c\u0647\u0627\u06cc \u063a\u06cc\u0631\u0636\u0631\u0648\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\"\n        }\n    )\n\n    val notificationManager =\n        context.getSystemService(NotificationManager::class.java)\n\n    notificationManager.createNotificationChannels(channels)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">createNotificationChannels<\/span><span style=\"color: #24292E\">(context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (Build.VERSION.SDK_INT <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> Build.VERSION_CODES.O) <\/span><span style=\"color: #D73A49\">return<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> channels <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">listOf<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">NotificationChannel<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;price_alerts&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u06cc\u0645\u062a&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            NotificationManager.IMPORTANCE_HIGH<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ).<\/span><span style=\"color: #6F42C1\">apply<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            description <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u06a9\u0627\u0647\u0634 \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        },<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">NotificationChannel<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;business_status&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;\u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            NotificationManager.IMPORTANCE_DEFAULT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ).<\/span><span style=\"color: #6F42C1\">apply<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            description <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u0646\u062a\u06cc\u062c\u0647 \u0628\u0631\u0631\u0633\u06cc \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062b\u0628\u062a\u200c\u0634\u062f\u0647&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        },<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">NotificationChannel<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;general_updates&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;\u0627\u0637\u0644\u0627\u0639\u06cc\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            NotificationManager.IMPORTANCE_LOW<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        ).<\/span><span style=\"color: #6F42C1\">apply<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            description <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u062e\u0628\u0631\u0647\u0627\u060c \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0647\u0627 \u0648 \u0627\u0637\u0644\u0627\u0639\u06cc\u0647\u200c\u0647\u0627\u06cc \u063a\u06cc\u0631\u0636\u0631\u0648\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> notificationManager <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        context.<\/span><span style=\"color: #6F42C1\">getSystemService<\/span><span style=\"color: #24292E\">(NotificationManager::<\/span><span style=\"color: #6F42C1\">class<\/span><span style=\"color: #24292E\">.java)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    notificationManager.<\/span><span style=\"color: #6F42C1\">createNotificationChannels<\/span><span style=\"color: #24292E\">(channels)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627 \u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0631 Channel \u0631\u0648 \u062c\u062f\u0627 \u062b\u0628\u062a \u0628\u06a9\u0646\u06cc\u0645\u060c \u06cc\u06a9 List \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645 \u0648 \u0647\u0645\u0647 \u0631\u0648 \u0628\u0627 <code>createNotificationChannels<\/code> \u062b\u0628\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. \u0627\u06cc\u0646 \u0645\u062f\u0644 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u062a\u0645\u06cc\u0632\u062a\u0631\u0647\u060c \u0686\u0648\u0646 Channel\u0647\u0627 \u06cc\u06a9\u062c\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u0634\u0646 \u0648 \u0633\u0627\u062e\u062a\u0627\u0631 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645 \u0648\u0627\u0636\u062d\u200c\u062a\u0631 \u0645\u06cc\u0634\u0647. \u0627\u0644\u0628\u062a\u0647 \u0628\u0647\u062a\u0631\u0647 \u0646\u0627\u0645\u200c\u0647\u0627 \u0648 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062f\u0627\u062e\u0644 <code>strings.xml<\/code> \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0646 \u062a\u0627 \u062a\u0631\u062c\u0645\u0647\u200c\u067e\u0630\u06cc\u0631 \u0628\u0627\u0634\u0646\u060c \u0686\u0648\u0646 \u0627\u06cc\u0646 \u0645\u062a\u0646\u200c\u0647\u0627 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Importance \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>importance<\/code> \u062a\u0639\u06cc\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647 Notification \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u06cc\u06a9 Channel \u062a\u0627 \u0686\u0647 \u0627\u0646\u062f\u0627\u0632\u0647 \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u0631\u0647 \u062a\u0648\u062c\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0642\u0637\u0639 \u0628\u06a9\u0646\u0647. \u062e\u06cc\u0644\u06cc\u200c\u0647\u0627 Importance \u0631\u0648 \u0641\u0642\u0637 \u0628\u0627 \u0635\u062f\u0627 \u062f\u0627\u0634\u062a\u0646 \u06cc\u0627 \u0646\u062f\u0627\u0634\u062a\u0646 \u06cc\u06a9\u06cc \u0645\u06cc\u200c\u062f\u0648\u0646\u0646\u060c \u0627\u0645\u0627 \u0645\u0648\u0636\u0648\u0639 \u06af\u0633\u062a\u0631\u062f\u0647\u200c\u062a\u0631\u0647. Importance \u0631\u0648\u06cc \u0645\u06cc\u0632\u0627\u0646 \u0628\u0631\u062c\u0633\u062a\u06af\u06cc \u0627\u0639\u0644\u0627\u0646\u060c \u0646\u0645\u0627\u06cc\u0634 \u0635\u062f\u0627\u060c \u0627\u062d\u062a\u0645\u0627\u0644 \u0638\u0627\u0647\u0631 \u0634\u062f\u0646 \u0628\u0647 \u0634\u06a9\u0644 Heads-up \u0648 \u062c\u0627\u06cc\u06af\u0627\u0647 \u06a9\u0644\u06cc \u0627\u0648\u0646 \u062f\u0631 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062a\u0623\u062b\u06cc\u0631 \u0645\u06cc\u200c\u0630\u0627\u0631\u0647. \u0627\u0632 Android 8 \u0628\u0647 \u0628\u0639\u062f \u0627\u06cc\u0646 \u0633\u0637\u062d \u062f\u0631 Channel \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u0634\u0647\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0631\u0648\u06cc Android 7.1 \u0648 \u067e\u0627\u06cc\u06cc\u0646\u200c\u062a\u0631 \u0628\u0627\u06cc\u062f <code>priority<\/code> \u0631\u0648 \u0631\u0648\u06cc \u062e\u0648\u062f Notification \u062a\u0646\u0638\u06cc\u0645 \u0628\u06a9\u0646\u06cc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0637\u062d <code>IMPORTANCE_HIGH<\/code> \u0628\u0631\u0627\u06cc \u0627\u062a\u0641\u0627\u0642\u200c\u0647\u0627\u06cc\u06cc \u0645\u0646\u0627\u0633\u0628\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0633\u0631\u06cc\u0639 \u0645\u062a\u0648\u062c\u0647\u200c\u0634\u0648\u0646 \u0628\u0634\u0647 \u0648 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0635\u062f\u0627 \u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u0631\u062c\u0633\u062a\u0647\u200c\u062a\u0631\u06cc \u062f\u0627\u0631\u0646. \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646  \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0647\u0634 \u0686\u0634\u0645\u06af\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0627\u06cc\u0646 \u06af\u0631\u0648\u0647 \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647\u060c \u0627\u0644\u0628\u062a\u0647 \u0641\u0642\u0637 \u0627\u06af\u0631 \u0627\u06cc\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u0627\u0631\u0632\u0634\u06cc \u0628\u0627\u0634\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647. <code>IMPORTANCE_DEFAULT<\/code> \u0628\u0631\u0627\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc\u06cc \u0645\u0646\u0627\u0633\u0628\u0647 \u06a9\u0647 \u0645\u0647\u0645 \u0647\u0633\u062a\u0646\u060c \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u06a9\u0627\u0631 \u0641\u0639\u0644\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 \u062c\u062f\u06cc \u0642\u0637\u0639 \u0628\u06a9\u0646\u0646\u061b \u0645\u062b\u0644\u0627\u064b \u0646\u062a\u06cc\u062c\u0647 \u0628\u0631\u0631\u0633\u06cc \u06cc\u06a9 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631. <code>IMPORTANCE_LOW<\/code> \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u062f\u0648\u0646 \u0635\u062f\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0645\u0646\u0627\u0633\u0628\u0647 \u06a9\u0647 \u0645\u0641\u06cc\u062f\u0646\u060c \u0648\u0644\u06cc \u0641\u0648\u0631\u06cc\u062a\u06cc \u0646\u062f\u0627\u0631\u0646\u061b \u0645\u062b\u0644 \u062e\u0628\u0631\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0628\u0631\u0646\u0627\u0645\u0647. <code>IMPORTANCE_MIN<\/code> \u0647\u0645 \u0628\u0631\u0627\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062e\u06cc\u0644\u06cc \u06a9\u0645\u200c\u0627\u0647\u0645\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u062d\u0636\u0648\u0631 \u0628\u0633\u06cc\u0627\u0631 \u0645\u062d\u062f\u0648\u062f\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u062e\u0637\u0631\u0646\u0627\u06a9 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0645\u0637\u0645\u0626\u0646 \u0634\u062f\u0646 \u0627\u0632 \u062f\u06cc\u062f\u0647 \u0634\u062f\u0646 \u0627\u0639\u0644\u0627\u0646\u060c \u0647\u0645\u0647 Channel\u0647\u0627 \u0631\u0648 <code>HIGH<\/code> \u062a\u0639\u0631\u06cc\u0641 \u0628\u06a9\u0646\u06cc. \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0627\u06cc\u062f \u062f\u0631 \u06a9\u0648\u062a\u0627\u0647\u200c\u0645\u062f\u062a \u062a\u0648\u062c\u0647 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0628\u06af\u06cc\u0631\u0647\u060c \u0627\u0645\u0627 \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0633\u0627\u0633 \u0645\u0632\u0627\u062d\u0645\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u06cc\u0627 Channel \u0631\u0648 \u0645\u06cc\u200c\u0628\u0646\u062f\u0647\u060c \u06cc\u0627 \u06a9\u0644 \u0645\u062c\u0648\u0632 \u0627\u0639\u0644\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0642\u0637\u0639 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0647\u0645\u06cc\u062a \u0632\u06cc\u0627\u062f \u0628\u0627\u06cc\u062f \u0627\u0632 \u0645\u0627\u0647\u06cc\u062a \u0648\u0627\u0642\u0639\u06cc \u0627\u062a\u0641\u0627\u0642 \u0628\u06cc\u0627\u062f\u060c \u0646\u0647 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647 \u062a\u06cc\u0645 \u0645\u062d\u0635\u0648\u0644 \u0628\u0647 \u062f\u06cc\u062f\u0647 \u0634\u062f\u0646. \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u062a\u0623\u06a9\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 Importance \u0628\u0627\u06cc\u062f \u0628\u0627 \u0627\u062d\u062a\u0631\u0627\u0645 \u0628\u0647 \u0632\u0645\u0627\u0646 \u0648 \u062a\u0648\u062c\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0634\u0647 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u063a\u06cc\u0631\u0645\u0647\u0645 \u0646\u0628\u0627\u06cc\u062f \u0628\u0647 \u0634\u06a9\u0644 \u0627\u0636\u0637\u0631\u0627\u0631\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 Importance \u062f\u0631 \u06a9\u062f \u0627\u062b\u0631 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u062c\u0627\u0647\u0627\u06cc\u06cc\u200c\u0633\u062a \u06a9\u0647 \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u0633\u0627\u0639\u062a\u200c\u0647\u0627 \u062f\u0631\u06af\u06cc\u0631\u0634 \u0645\u06cc\u0634\u0646. \u0641\u0631\u0636 \u06a9\u0646 \u0627\u0648\u0644 Channel \u0631\u0648 \u0628\u0627 <code>IMPORTANCE_LOW<\/code> \u0633\u0627\u062e\u062a\u06cc. \u0628\u0639\u062f \u0645\u062a\u0648\u062c\u0647 \u0645\u06cc\u0634\u06cc \u0628\u0627\u06cc\u062f \u0635\u062f\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0645\u0642\u062f\u0627\u0631\u0634 \u0631\u0648 \u0628\u0647 <code>IMPORTANCE_HIGH<\/code> \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u06cc. \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u060c \u0627\u0645\u0627 \u0627\u0639\u0644\u0627\u0646 \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u06cc\u200c\u0635\u062f\u0627\u0633\u062a. \u06a9\u062f \u0631\u0648 \u0686\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u060c Uninstall \u0648 Install \u0645\u06cc\u200c\u06a9\u0646\u06cc \u0648 \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc \u0628\u0639\u062f \u0627\u0632 \u0646\u0635\u0628 \u0645\u062c\u062f\u062f \u062f\u0631\u0633\u062a \u0634\u062f\u0647. \u062f\u0644\u06cc\u0644\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Channel \u0641\u0642\u0637 \u0628\u0627\u0631 \u0627\u0648\u0644 \u0628\u0627 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0628\u0639\u062f \u0627\u0632 \u0627\u0648\u0646\u060c Channel \u062f\u0627\u062e\u0644 \u0633\u06cc\u0633\u062a\u0645 \u062b\u0628\u062a \u0634\u062f\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u06cc\u06af\u0647 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Importance \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u0632\u0648\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0639\u0645\u062f\u06cc \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647\u060c \u0686\u0648\u0646 \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062e\u0648\u062f\u0634 Importance \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0628\u0627\u0634\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0633\u062a \u062f\u0631 \u0647\u0631 \u0627\u062c\u0631\u0627 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a Channel \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0639\u0645\u0627\u0644 \u0628\u06a9\u0646\u0647\u060c \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631 \u0647\u06cc\u0686 \u0627\u0631\u0632\u0634\u06cc \u0646\u062f\u0627\u0634\u062a. \u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u06cc\u06a9 Channel \u0631\u0648 \u0628\u06cc\u200c\u0635\u062f\u0627 \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0635\u0628\u062d \u0631\u0648\u0632 \u0628\u0639\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc <code>createNotificationChannel()<\/code> \u0635\u062f\u0627 \u0631\u0648 \u0631\u0648\u0634\u0646 \u0628\u06a9\u0646\u0647\u061b \u0627\u06cc\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u062e\u0644\u0627\u0641 \u0641\u0644\u0633\u0641\u0647 Channel \u0628\u0648\u062f. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0646 Channel\u060c \u06a9\u0627\u0631\u0628\u0631 \u0645\u0627\u0644\u06a9 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0631\u0641\u062a\u0627\u0631\u06cc \u0627\u0648\u0646\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Channel \u0631\u0648 \u0628\u0634\u0646\u0627\u0633\u0647 \u0648 \u0627\u0632\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0646\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0633\u0627\u0633\u06cc \u0631\u0641\u062a\u0627\u0631 \u06cc\u06a9 Channel \u0642\u062f\u06cc\u0645\u06cc\u060c \u0627\u0632 \u0646\u0638\u0631 \u0641\u0646\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc Channel \u062c\u062f\u06cc\u062f\u06cc \u0628\u0627 ID \u062a\u0627\u0632\u0647 \u0628\u0633\u0627\u0632\u06cc\u060c \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0631\u0627\u0647 \u0646\u0628\u0627\u06cc\u062f \u0628\u0647 \u0627\u0628\u0632\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u062f\u0648\u0631 \u0632\u062f\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0647. Channel \u062c\u062f\u06cc\u062f \u0641\u0642\u0637 \u0648\u0642\u062a\u06cc \u0645\u0646\u0637\u0642\u06cc\u0647 \u06a9\u0647 \u0645\u0627\u0647\u06cc\u062a \u0627\u0639\u0644\u0627\u0646 \u0648\u0627\u0642\u0639\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u06cc\u0627 \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u062c\u062f\u06cc\u062f \u0627\u0632 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u0642\u0628\u0644\u0627\u064b \u0647\u0645\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u062f\u0627\u062e\u0644 <code>product_updates<\/code> \u0628\u0648\u062f\u0646\u060c \u0627\u0645\u0627 \u062d\u0627\u0644\u0627 \u0642\u0627\u0628\u0644\u06cc\u062a \u0645\u0633\u062a\u0642\u0644\u06cc \u0628\u0647 \u0627\u0633\u0645 \u0647\u0634\u062f\u0627\u0631 \u0631\u0633\u06cc\u062f\u0646 \u0642\u06cc\u0645\u062a \u0628\u0647 \u0647\u062f\u0641 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647\u060c Channel \u062c\u062f\u06cc\u062f\u06cc \u0645\u062b\u0644 <code>target_price_alerts<\/code> \u0642\u0627\u0628\u0644\u200c\u062f\u0641\u0627\u0639\u0647. \u0648\u0644\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0635\u0631\u0641\u0627\u064b \u0628\u0631\u0627\u06cc \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u062f\u0646 \u0635\u062f\u0627\u06cc Channel \u062e\u0627\u0645\u0648\u0634\u200c\u0634\u062f\u0647 ID \u0631\u0648 \u0639\u0648\u0636 \u0628\u06a9\u0646\u06cc\u060c \u0637\u0631\u0627\u062d\u06cc \u063a\u06cc\u0631\u0627\u062e\u0644\u0627\u0642\u06cc \u0648 \u0622\u0632\u0627\u0631\u062f\u0647\u0646\u062f\u0647\u200c\u0627\u06cc\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Channel \u0648 Notification \u0686\u0647 \u0631\u0627\u0628\u0637\u0647\u200c\u0627\u06cc \u062f\u0627\u0631\u0646\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Channel \u062e\u0648\u062f\u0634 Notification \u0646\u06cc\u0633\u062a \u0648 \u0686\u06cc\u0632\u06cc \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0646\u0645\u06cc\u062f\u0647. Channel \u0641\u0642\u0637 \u0645\u062c\u0645\u0648\u0639\u0647\u200c\u0627\u06cc \u0627\u0632 \u0642\u0648\u0627\u0646\u06cc\u0646 \u0648 \u062a\u0631\u062c\u06cc\u062d\u0627\u062a \u0628\u0631\u0627\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc\u06cc\u200c\u0633\u062a \u06a9\u0647 \u0628\u0639\u062f\u0627\u064b \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0627\u0648\u0646 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0646. \u0648\u0642\u062a\u06cc Notification \u0631\u0648 \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u060c \u0628\u0627\u06cc\u062f <code>channelId<\/code> \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0628\u0647 <code>NotificationCompat.Builder<\/code> \u0628\u062f\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val notification = NotificationCompat.Builder(\n    context,\n    PRICE_ALERTS_CHANNEL_ID\n)\n    .setSmallIcon(R.drawable.ic_notification)\n    .setContentTitle(\"\u0642\u06cc\u0645\u062a \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\")\n    .setContentText(\"\u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647\u200c\u0627\u062a \u06f1\u06f5 \u062f\u0631\u0635\u062f \u06a9\u0645\u062a\u0631 \u0634\u062f\u0647\")\n    .setAutoCancel(true)\n    .build()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> notification <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> NotificationCompat.<\/span><span style=\"color: #6F42C1\">Builder<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    PRICE_ALERTS_CHANNEL_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setSmallIcon<\/span><span style=\"color: #24292E\">(R.drawable.ic_notification)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setContentTitle<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0642\u06cc\u0645\u062a \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setContentText<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647\u200c\u0627\u062a \u06f1\u06f5 \u062f\u0631\u0635\u062f \u06a9\u0645\u062a\u0631 \u0634\u062f\u0647&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setAutoCancel<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">true<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">build<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0631\u0648\u06cc Android 8 \u0628\u0647 \u0628\u0639\u062f\u060c \u0631\u0641\u062a\u0627\u0631 \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646 Notification \u0627\u0632 Channel \u0628\u0627 \u0634\u0646\u0627\u0633\u0647 <code>price_alerts<\/code> \u0645\u06cc\u0627\u062f. \u0627\u06af\u0631 Channel \u0631\u0648\u06cc \u062d\u0627\u0644\u062a \u0628\u06cc\u200c\u0635\u062f\u0627 \u0628\u0627\u0634\u0647\u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0635\u062f\u0627 \u06cc\u0627 Priority \u0628\u0627\u0644\u0627 \u0628\u0647 Builder \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u06a9\u0646\u0627\u0631 \u0628\u0632\u0646\u0647. \u0631\u0648\u06cc \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc\u200c\u062a\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u06a9\u0647 Channel \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647\u060c \u0628\u0627\u06cc\u062f Priority \u0631\u0648 \u0631\u0648\u06cc \u062e\u0648\u062f Notification \u0645\u0634\u062e\u0635 \u0628\u06a9\u0646\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val notification = NotificationCompat.Builder(\n    context,\n    PRICE_ALERTS_CHANNEL_ID\n)\n    .setSmallIcon(R.drawable.ic_notification)\n    .setContentTitle(\"\u0642\u06cc\u0645\u062a \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\")\n    .setContentText(\"\u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647\u200c\u0627\u062a \u06f1\u06f5 \u062f\u0631\u0635\u062f \u06a9\u0645\u062a\u0631 \u0634\u062f\u0647\")\n    .setPriority(NotificationCompat.PRIORITY_HIGH)\n    .setAutoCancel(true)\n    .build()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> notification <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> NotificationCompat.<\/span><span style=\"color: #6F42C1\">Builder<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    PRICE_ALERTS_CHANNEL_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setSmallIcon<\/span><span style=\"color: #24292E\">(R.drawable.ic_notification)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setContentTitle<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0642\u06cc\u0645\u062a \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setContentText<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0645\u0648\u0631\u062f\u0639\u0644\u0627\u0642\u0647\u200c\u0627\u062a \u06f1\u06f5 \u062f\u0631\u0635\u062f \u06a9\u0645\u062a\u0631 \u0634\u062f\u0647&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setPriority<\/span><span style=\"color: #24292E\">(NotificationCompat.PRIORITY_HIGH)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setAutoCancel<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">true<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">build<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u062c\u0648\u062f <code>channelId<\/code> \u062f\u0631 <code>NotificationCompat.Builder<\/code> \u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0645\u0634\u06a9\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0631\u0648\u06cc Android 8 \u0628\u0647 \u0628\u0639\u062f \u0628\u0627\u06cc\u062f Channel \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u0632 \u0642\u0628\u0644 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0647\u0645 Channel Importance \u0631\u0648 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u06cc \u0648 \u0647\u0645 Priority \u062e\u0648\u062f Notification \u0631\u0648 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc\u200c\u06a9\u0646\u06cc \u062a\u0627 \u0631\u0641\u062a\u0627\u0631 \u0645\u0646\u0627\u0633\u0628 \u0631\u0648\u06cc \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0642\u0628\u0644 \u0648 \u0628\u0639\u062f \u0627\u0632 Android 8 \u062d\u0641\u0638 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0635\u062f\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc\u060c \u0648\u06cc\u0628\u0631\u0647 \u0648 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a Channel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0648\u0642\u0639 \u0633\u0627\u062e\u062a Channel \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0631\u0641\u062a\u0627\u0631 \u0627\u0648\u0644\u06cc\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 \u0648\u06cc\u0628\u0631\u0647\u060c \u0635\u062f\u0627 \u0648 \u0646\u0645\u0627\u06cc\u0634 Badge \u0631\u0648 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0628\u062f\u06cc. \u0627\u0645\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627\u06cc\u062f \u06cc\u0627\u062f\u062a \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0641\u0642\u0637 \u0631\u0641\u062a\u0627\u0631 \u0627\u0648\u0644\u06cc\u0647\u200c\u0627\u0646 \u0648 \u0628\u0639\u062f \u0627\u0632 \u062b\u0628\u062a Channel\u060c \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647. \u0645\u062b\u0644\u0627\u064b \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0628\u0631\u0627\u06cc \u0647\u0634\u062f\u0627\u0631 \u0631\u0633\u06cc\u062f\u0646 \u0642\u06cc\u0645\u062a \u0628\u0647 \u0647\u062f\u0641 \u06cc\u06a9 \u0635\u062f\u0627\u06cc \u0645\u0634\u062e\u0635 \u062a\u0639\u0631\u06cc\u0641 \u0628\u06a9\u0646\u06cc\u060c \u0648\u0644\u06cc \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f\u0627\u064b Channel \u0631\u0648 \u0628\u06cc\u200c\u0635\u062f\u0627 \u06a9\u0631\u062f\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u062d\u0642 \u0646\u062f\u0627\u0631\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0635\u062f\u0627 \u0631\u0648 \u0641\u0639\u0627\u0644 \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun createTargetPriceChannel(context: Context) {\n    if (Build.VERSION.SDK_INT &lt; Build.VERSION_CODES.O) return\n\n    val soundUri = Uri.parse(\n        \"${ContentResolver.SCHEME_ANDROID_RESOURCE}:\/\/\" +\n            \"${context.packageName}\/${R.raw.price_alert}\"\n    )\n\n    val audioAttributes = AudioAttributes.Builder()\n        .setUsage(AudioAttributes.USAGE_NOTIFICATION)\n        .build()\n\n    val channel = NotificationChannel(\n        \"target_price_alerts\",\n        \"\u0631\u0633\u06cc\u062f\u0646 \u0642\u06cc\u0645\u062a \u0628\u0647 \u0647\u062f\u0641\",\n        NotificationManager.IMPORTANCE_HIGH\n    ).apply {\n        description = \"\u0648\u0642\u062a\u06cc \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0628\u0647 \u0645\u062d\u062f\u0648\u062f\u0647 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0645\u06cc\u200c\u0631\u0633\u0647\"\n        enableVibration(true)\n        setSound(soundUri, audioAttributes)\n        setShowBadge(true)\n    }\n\n    val manager = context.getSystemService(NotificationManager::class.java)\n    manager.createNotificationChannel(channel)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">createTargetPriceChannel<\/span><span style=\"color: #24292E\">(context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (Build.VERSION.SDK_INT <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> Build.VERSION_CODES.O) <\/span><span style=\"color: #D73A49\">return<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> soundUri <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> Uri.<\/span><span style=\"color: #6F42C1\">parse<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #032F62\">&quot;${ContentResolver.SCHEME_ANDROID_RESOURCE}:\/\/&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;${context.packageName}\/${R.raw.price_alert}&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> audioAttributes <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> AudioAttributes.<\/span><span style=\"color: #6F42C1\">Builder<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">setUsage<\/span><span style=\"color: #24292E\">(AudioAttributes.USAGE_NOTIFICATION)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">build<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> channel <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">NotificationChannel<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #032F62\">&quot;target_price_alerts&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #032F62\">&quot;\u0631\u0633\u06cc\u062f\u0646 \u0642\u06cc\u0645\u062a \u0628\u0647 \u0647\u062f\u0641&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        NotificationManager.IMPORTANCE_HIGH<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ).<\/span><span style=\"color: #6F42C1\">apply<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        description <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u0648\u0642\u062a\u06cc \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644 \u0628\u0647 \u0645\u062d\u062f\u0648\u062f\u0647 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0634\u062f\u0647 \u0645\u06cc\u200c\u0631\u0633\u0647&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">enableVibration<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">true<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">setSound<\/span><span style=\"color: #24292E\">(soundUri, audioAttributes)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">setShowBadge<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">true<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> manager <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> context.<\/span><span style=\"color: #6F42C1\">getSystemService<\/span><span style=\"color: #24292E\">(NotificationManager::<\/span><span style=\"color: #6F42C1\">class<\/span><span style=\"color: #24292E\">.java)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    manager.<\/span><span style=\"color: #6F42C1\">createNotificationChannel<\/span><span style=\"color: #24292E\">(channel)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u062f\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0627\u06cc\u062f \u0628\u0627 \u0627\u062d\u062a\u06cc\u0627\u0637 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647. \u0627\u06cc\u0646\u06a9\u0647 \u06cc\u06a9 \u0635\u062f\u0627\u06cc \u062e\u0627\u0635 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u062f \u062c\u0630\u0627\u0628\u0647\u060c \u0627\u0644\u0632\u0627\u0645\u0627\u064b \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0646\u06cc\u0633\u062a \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u0647 \u0647\u0631 \u0628\u0627\u0631 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0634\u0646\u0648\u0647. \u0645\u062e\u0635\u0648\u0635\u0627\u064b \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0637\u0648\u0644 \u0631\u0648\u0632 \u0686\u0646\u062f \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u062b\u0628\u062a \u0628\u06a9\u0646\u0647\u060c \u0635\u062f\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u0634\u0648\u0646\u062f\u0647 \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u0622\u0632\u0627\u0631\u062f\u0647\u0646\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 Channel\u0647\u0627\u06cc \u067e\u0631\u062a\u06a9\u0631\u0627\u0631 \u0631\u0641\u062a\u0627\u0631 \u0622\u0631\u0627\u0645\u200c\u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646 \u0648 \u0641\u0642\u0637 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u0627\u064b \u0645\u0647\u0645 \u0635\u062f\u0627\u06cc \u0628\u0631\u062c\u0633\u062a\u0647 \u0628\u06af\u06cc\u0631\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notification Channel \u0628\u0627 \u0645\u062c\u0648\u0632 \u0627\u0639\u0644\u0627\u0646 \u0641\u0631\u0642 \u062f\u0627\u0631\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 Android 13 \u0628\u0647 \u0628\u0639\u062f\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u0639\u0645\u0648\u0644\u06cc \u0628\u0647 \u0645\u062c\u0648\u0632 Runtime \u0628\u0627 \u0646\u0627\u0645 <code>POST_NOTIFICATIONS<\/code> \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u0647. \u0627\u06cc\u0646 \u0645\u062c\u0648\u0632 \u0628\u0627 Notification Channel \u062f\u0648 \u0645\u0641\u0647\u0648\u0645 \u062c\u062f\u0627\u0633\u062a. Permission \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0622\u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0633\u0637\u062d \u06a9\u0644\u06cc \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u0631\u0647 \u0627\u0639\u0644\u0627\u0646 \u0628\u0641\u0631\u0633\u062a\u0647 \u06cc\u0627 \u0646\u0647. Channel \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0647\u0631 \u062f\u0633\u062a\u0647 \u0627\u0632 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u062c\u0627\u0632 \u0686\u0647 \u0631\u0641\u062a\u0627\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646. \u06cc\u0639\u0646\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0647\u0645\u0647 Channel\u0647\u0627 \u0631\u0648\u0634\u0646 \u0628\u0627\u0634\u0646\u060c \u0627\u0645\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062c\u0648\u0632 \u06a9\u0644\u06cc \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0631\u062f \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u061b \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0627\u0639\u0644\u0627\u0646 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0646\u0645\u06cc\u0634\u0647. \u0628\u0631\u0639\u06a9\u0633\u060c \u0645\u0645\u06a9\u0646\u0647 \u0645\u062c\u0648\u0632 \u06a9\u0644\u06cc \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u06a9\u0627\u0631\u0628\u0631 Channel \u062a\u0628\u0644\u06cc\u063a\u0627\u062a \u0631\u0648 \u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647\u061b \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0628\u0642\u06cc\u0647 Channel\u0647\u0627 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646\u060c \u0648\u0644\u06cc \u062a\u0628\u0644\u06cc\u063a\u0627\u062a \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062c\u0648\u0632 \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 Manifest \u062a\u0639\u0631\u06cc\u0641 \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\" \/&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648 \u0631\u0648\u06cc Android 13 \u0628\u0647 \u0628\u0627\u0644\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0645\u0646\u0627\u0633\u0628 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0634\u0647. \u0632\u0645\u0627\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062e\u06cc\u0644\u06cc \u0645\u0647\u0645\u0647. \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0639\u062f \u0627\u0632 \u0627\u0648\u0644\u06cc\u0646 \u0627\u062c\u0631\u0627\u060c \u0628\u062f\u0648\u0646 \u062a\u0648\u0636\u06cc\u062d \u0647\u06cc\u0686 \u0627\u0631\u0632\u0634\u06cc\u060c Permission \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u06a9\u0646\u0647 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0646\u0631\u062e \u0631\u062f \u0634\u062f\u0646 \u0631\u0648 \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0628\u0631\u0647. \u0628\u0647\u062a\u0631\u0647 \u0627\u0648\u0644 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062a\u0648\u062c\u0647 \u0628\u0634\u0647 \u0627\u0639\u0644\u0627\u0646 \u0686\u0647 \u0633\u0648\u062f\u06cc \u0628\u0631\u0627\u0634 \u062f\u0627\u0631\u0647. \u0645\u062b\u0644\u0627\u064b \u0648\u0642\u062a\u06cc \u0627\u0648\u0644\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u06af\u0632\u06cc\u0646\u0647 \u0647\u0634\u062f\u0627\u0631 \u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a \u0631\u0648 \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0647\u0645\u0648\u0646\u200c\u062c\u0627 \u062a\u0648\u0636\u06cc\u062d \u0628\u062f\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639 \u062f\u0627\u062f\u0646 \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0628\u0647 \u0645\u062c\u0648\u0632 \u0627\u0639\u0644\u0627\u0646 \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u06cc. \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a Permission \u0628\u0639\u062f \u0627\u0632 \u0622\u0634\u0646\u0627 \u0634\u062f\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0642\u0627\u0628\u0644\u06cc\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 \u062f\u0631 \u06cc\u06a9 Context \u0645\u0639\u0646\u0627\u062f\u0627\u0631 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0632 \u06a9\u062c\u0627 \u0628\u0641\u0647\u0645\u06cc\u0645 \u06a9\u0627\u0631\u0628\u0631 Channel \u0631\u0648 \u0628\u0633\u062a\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Channel \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0648\u0634\u0646 \u0628\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0648\u0636\u0639\u06cc\u062a\u0634 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0628\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0628\u0631\u0627\u06cc \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0645\u0647\u0645\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a \u0647\u0634\u062f\u0627\u0631 \u0642\u06cc\u0645\u062a \u0631\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0647\u060c \u0627\u0645\u0627 Channel \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a \u0631\u0648 \u0627\u0632 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06af\u0648\u0634\u06cc \u0628\u0633\u062a\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a Backend \u0648 FCM \u0645\u0645\u06a9\u0646\u0647 \u062f\u0631\u0633\u062a \u06a9\u0627\u0631 \u0628\u06a9\u0646\u0646\u060c \u0648\u0644\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0647\u06cc\u0686 \u0627\u0639\u0644\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u0628\u06cc\u0646\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u06cc\u0686 \u062a\u0648\u0636\u06cc\u062d\u06cc \u0646\u062f\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0641\u06a9\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0634\u062f\u0627\u0631 \u062e\u0631\u0627\u0628 \u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc Channel \u0631\u0648 \u0627\u0632 <code>NotificationManager<\/code> \u0628\u06af\u06cc\u0631\u06cc \u0648 Importance \u0641\u0639\u0644\u06cc\u0634 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0628\u06a9\u0646\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun isPriceAlertsChannelEnabled(context: Context): Boolean {\n    if (Build.VERSION.SDK_INT &lt; Build.VERSION_CODES.O) {\n        return NotificationManagerCompat.from(context)\n            .areNotificationsEnabled()\n    }\n\n    val manager = context.getSystemService(NotificationManager::class.java)\n    val channel = manager.getNotificationChannel(PRICE_ALERTS_CHANNEL_ID)\n\n    return channel != null &amp;&amp;\n        channel.importance != NotificationManager.IMPORTANCE_NONE\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">isPriceAlertsChannelEnabled<\/span><span style=\"color: #24292E\">(context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">): <\/span><span style=\"color: #6F42C1\">Boolean<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (Build.VERSION.SDK_INT <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> Build.VERSION_CODES.O) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> NotificationManagerCompat.<\/span><span style=\"color: #6F42C1\">from<\/span><span style=\"color: #24292E\">(context)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            .<\/span><span style=\"color: #6F42C1\">areNotificationsEnabled<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> manager <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> context.<\/span><span style=\"color: #6F42C1\">getSystemService<\/span><span style=\"color: #24292E\">(NotificationManager::<\/span><span style=\"color: #6F42C1\">class<\/span><span style=\"color: #24292E\">.java)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> channel <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> manager.<\/span><span style=\"color: #6F42C1\">getNotificationChannel<\/span><span style=\"color: #24292E\">(PRICE_ALERTS_CHANNEL_ID)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> channel <\/span><span style=\"color: #D73A49\">!=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        channel.importance <\/span><span style=\"color: #D73A49\">!=<\/span><span style=\"color: #24292E\"> NotificationManager.IMPORTANCE_NONE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0628\u062a\u0647 \u0641\u0642\u0637 \u0628\u0631\u0631\u0633\u06cc Channel \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a\u060c \u0686\u0648\u0646 \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0644 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u062a\u0647 \u0634\u062f\u0647 \u0628\u0627\u0634\u0646. \u0628\u0647\u062a\u0631\u0647 \u0627\u0648\u0644 \u0648\u0636\u0639\u06cc\u062a \u06a9\u0644\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0648 \u0628\u0639\u062f \u0648\u0636\u0639\u06cc\u062a Channel \u062e\u0627\u0635 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0628\u06a9\u0646\u06cc. \u0627\u06af\u0631 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0628\u0633\u062a\u0647 \u0628\u0648\u062f\u0646\u060c \u0628\u0627\u06cc\u062f \u0628\u0627 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0645\u062d\u062a\u0631\u0645\u0627\u0646\u0647 \u062a\u0648\u0636\u06cc\u062d \u0628\u062f\u06cc \u06a9\u0647 \u0647\u0634\u062f\u0627\u0631\u0647\u0627 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0647\u0633\u062a\u0646 \u0648 \u06cc\u06a9 \u062f\u06a9\u0645\u0647 \u0628\u0631\u0627\u06cc \u0631\u0641\u062a\u0646 \u0628\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0631\u0627\u0626\u0647 \u0628\u062f\u06cc. \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0647\u0631 \u0628\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 \u0645\u06cc\u0634\u0647 \u0628\u0627 Dialog \u0627\u062c\u0628\u0627\u0631\u06cc \u0645\u0632\u0627\u062d\u0645\u0634 \u0628\u0634\u0647\u061b \u0628\u0647\u062a\u0631\u0647 \u0627\u06cc\u0646 \u0647\u0634\u062f\u0627\u0631 \u0641\u0642\u0637 \u062c\u0627\u06cc\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0639\u0644\u0627\u0646 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u0645\u0633\u062a\u0642\u06cc\u0645 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a Channel \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0627\u0632 Intent \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06a9\u0646\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun openPriceAlertsChannelSettings(context: Context) {\n    val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {\n        putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)\n        putExtra(Settings.EXTRA_CHANNEL_ID, PRICE_ALERTS_CHANNEL_ID)\n    }\n\n    context.startActivity(intent)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">openPriceAlertsChannelSettings<\/span><span style=\"color: #24292E\">(context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> intent <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Intent<\/span><span style=\"color: #24292E\">(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).<\/span><span style=\"color: #6F42C1\">apply<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">putExtra<\/span><span style=\"color: #24292E\">(Settings.EXTRA_APP_PACKAGE, context.packageName)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">putExtra<\/span><span style=\"color: #24292E\">(Settings.EXTRA_CHANNEL_ID, PRICE_ALERTS_CHANNEL_ID)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context.<\/span><span style=\"color: #6F42C1\">startActivity<\/span><span style=\"color: #24292E\">(intent)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0631\u0648\u06cc \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 Channel \u0646\u062f\u0627\u0631\u0646\u060c \u0628\u0627\u06cc\u062f \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0639\u0644\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0627\u0632 \u0628\u06a9\u0646\u06cc. \u0627\u06cc\u0646 \u062c\u0631\u06cc\u0627\u0646 \u0628\u0647\u062a\u0631\u0647 \u062f\u0627\u062e\u0644 \u06cc\u06a9 Helper \u062c\u062f\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0647 \u062a\u0627 UI \u0641\u0642\u0637 \u0628\u06af\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0639\u0644\u0627\u0646 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0646 \u0648 \u062f\u0631\u06af\u06cc\u0631 \u062a\u0641\u0627\u0648\u062a \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0646\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Channel Group \u0628\u0627 Notification Group \u06cc\u06a9\u06cc \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0648 \u0645\u0641\u0647\u0648\u0645 \u0628\u0627 \u0627\u0633\u0645 \u0634\u0628\u06cc\u0647 \u062f\u0627\u0631\u06cc\u0645 \u06a9\u0647 \u062e\u06cc\u0644\u06cc \u0631\u0627\u062d\u062a \u0628\u0627 \u0647\u0645 \u0642\u0627\u0637\u06cc \u0645\u06cc\u0634\u0646: <code>NotificationChannelGroup<\/code> \u0648 Notification Group. Channel Group \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0645\u0631\u062a\u0628 \u06a9\u0631\u062f\u0646 Channel\u0647\u0627 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u06cc\u0633\u062a\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u0686\u0646\u062f \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0628\u06a9\u0646\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc Channel\u0647\u0627\u06cc \u062d\u0633\u0627\u0628 \u0634\u062e\u0635\u06cc \u0648 \u06a9\u0627\u0631\u06cc \u0631\u0648 \u062f\u0631 \u062f\u0648 Channel Group \u062c\u062f\u0627 \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc. \u0627\u06cc\u0646 Group \u0631\u0648\u06cc \u0646\u062d\u0648\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062e\u0648\u062f Notification\u0647\u0627 \u062f\u0631 Notification Drawer \u0627\u062b\u0631\u06cc \u0646\u062f\u0627\u0631\u0647 \u0648 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0631\u0627\u06cc \u0646\u0638\u0645 \u062f\u0627\u062f\u0646 \u0628\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u0645\u06cc\u06af\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a Group \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0648 \u0633\u0627\u0632\u0645\u0627\u0646\u200c\u062f\u0647\u06cc\u0647\u060c \u0646\u0647 \u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0641\u062a\u0627\u0631 Channel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notification Group \u0628\u0631\u0639\u06a9\u0633\u060c \u0686\u0646\u062f Notification \u0631\u0648 \u062f\u0627\u062e\u0644 \u067e\u0646\u0644 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u062c\u0645\u0639 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u067e\u0646\u062c \u0645\u062d\u0635\u0648\u0644 \u0645\u062e\u062a\u0644\u0641 \u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a \u062f\u0627\u0634\u062a\u0646\u060c \u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u067e\u0646\u062c \u0627\u0639\u0644\u0627\u0646 \u067e\u0631\u0627\u06a9\u0646\u062f\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0632\u06cc\u0631 \u06cc\u06a9 Summary \u062c\u0645\u0639 \u0628\u06a9\u0646\u06cc. \u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0632 Android 7 \u0628\u0647 \u0628\u0639\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u0648 \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u0628\u0627 Channel Group \u0646\u062f\u0627\u0631\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0647\u0645\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062f\u0627\u062e\u0644 \u06cc\u06a9 Notification Group \u0627\u0632 \u06cc\u06a9 Channel \u0628\u06cc\u0627\u0646\u060c \u0627\u0645\u0627 \u0627\u06cc\u0646 \u062f\u0648 \u0645\u0641\u0647\u0648\u0645 \u0647\u062f\u0641 \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u062f\u0631 \u0634\u0631\u0648\u0639 \u0628\u0647 Channel Group \u0627\u062d\u062a\u06cc\u0627\u062c \u0646\u062f\u0627\u0631\u06cc\u0645\u060c \u0686\u0648\u0646 \u0686\u0646\u062f \u062d\u0633\u0627\u0628 \u0647\u0645\u200c\u0632\u0645\u0627\u0646 \u06cc\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u06cc\u0686\u06cc\u062f\u0647\u200c\u0627\u06cc \u0646\u062f\u0627\u0631\u06cc\u0645. \u0627\u0645\u0627 Notification Group \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc\u0647\u060c \u0686\u0648\u0646 \u0686\u0646\u062f \u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a \u0645\u0645\u06a9\u0646\u0647 \u067e\u0634\u062a \u0633\u0631 \u0647\u0645 \u0631\u062e \u0628\u062f\u0647. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u062e\u0648\u062f Notification Group \u0645\u0648\u0636\u0648\u0639 \u062c\u062f\u0627\u06af\u0627\u0646\u0647\u200c\u0627\u06cc\u0647 \u0648 \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0628\u0647 \u062e\u0627\u0637\u0631 \u0634\u0628\u0627\u0647\u062a \u0627\u0633\u0645\u0634 \u062f\u0627\u062e\u0644 \u0645\u0639\u0645\u0627\u0631\u06cc Channel \u0642\u0627\u0637\u06cc \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u06cc\u062f \u06cc\u06a9 Channel \u0628\u0633\u0627\u0632\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 \u0646\u0638\u0631 \u0641\u0646\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0648\u0633\u0648\u0633\u0647 \u0628\u0634\u06cc \u0628\u0631\u0627\u06cc \u0647\u0631 \u0645\u062d\u0635\u0648\u0644 \u06cc\u0627 \u0647\u0631 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 Channel \u062c\u062f\u0627 \u0628\u0633\u0627\u0632\u06cc \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0646\u062a\u0631\u0644 \u062e\u06cc\u0644\u06cc \u062f\u0642\u06cc\u0642\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0637\u0631\u0627\u062d\u06cc \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0634\u062a\u0628\u0627\u0647\u0647. \u062a\u0635\u0648\u0631 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0635\u062f \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0635\u062f Channel \u062f\u0627\u062e\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06af\u0648\u0634\u06cc \u0633\u0627\u062e\u062a\u0647. \u0635\u0641\u062d\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0647\u200c\u0647\u0645\u200c\u0631\u06cc\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0647\u06cc\u0686 \u062f\u0631\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u062a\u0639\u062f\u0627\u062f Channel \u0646\u062f\u0627\u0631\u0647 \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0648\u0646\u200c\u0647\u0627 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u063a\u06cc\u0631\u0645\u0645\u06a9\u0646 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Channel \u0628\u0627\u06cc\u062f \u0646\u0645\u0627\u06cc\u0646\u062f\u0647 \u06cc\u06a9 <strong>\u0646\u0648\u0639 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0648 \u0642\u0627\u0628\u0644\u200c\u0641\u0647\u0645 \u0627\u0632 \u0627\u0639\u0644\u0627\u0646<\/strong> \u0628\u0627\u0634\u0647\u060c \u0646\u0647 \u0647\u0631 \u0645\u0648\u062c\u0648\u062f\u06cc\u062a \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633. \u0645\u062b\u0644\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u06cc\u0645\u062a\u060c \u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0648 \u0627\u0637\u0644\u0627\u0639\u06cc\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u062f\u0633\u062a\u0647\u200c\u0647\u0627\u06cc \u0645\u0646\u0627\u0633\u0628\u06cc \u0647\u0633\u062a\u0646\u060c \u0686\u0648\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0639\u0646\u0627\u06cc \u0647\u0631\u06a9\u062f\u0648\u0645 \u0631\u0648 \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u0648 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0645\u0633\u062a\u0642\u0644\u06cc \u062f\u0631\u0628\u0627\u0631\u0647\u200c\u0634\u0648\u0646 \u0628\u06af\u06cc\u0631\u0647. \u0627\u0645\u0627 \u0627\u0639\u0644\u0627\u0646 \u0645\u062d\u0635\u0648\u0644 \u0634\u0645\u0627\u0631\u0647 \u06f8\u06f4\u06f2 Channel \u062e\u0648\u0628\u06cc \u0646\u06cc\u0633\u062a. \u062a\u0646\u0638\u06cc\u0645 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc \u06a9\u062f\u0648\u0645 \u0645\u062d\u0635\u0648\u0644 \u0647\u0634\u062f\u0627\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f\u060c \u0628\u0627\u06cc\u062f \u062f\u0627\u062e\u0644 \u062e\u0648\u062f \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0647\u060c \u0646\u0647 \u062f\u0627\u062e\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a Channel \u0627\u0646\u062f\u0631\u0648\u06cc\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0628\u062a\u0647 \u0628\u0639\u0636\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646 \u0628\u0631\u0627\u06cc Conversation\u0647\u0627\u06cc \u0645\u0647\u0645 Channel\u0647\u0627\u06cc \u062c\u062f\u0627 \u06cc\u0627 \u0633\u0627\u062e\u062a\u0627\u0631\u0647\u0627\u06cc \u0645\u062e\u0635\u0648\u0635 \u0645\u06a9\u0627\u0644\u0645\u0647 \u0645\u06cc\u200c\u0633\u0627\u0632\u0646\u060c \u0686\u0648\u0646 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0631\u0627\u06cc Conversation\u0647\u0627 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u0648\u06cc\u0698\u0647\u200c\u0627\u06cc \u062f\u0627\u0631\u0647. \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0642\u06cc\u0645\u062a\u060c \u0633\u0627\u062e\u062a Channel \u067e\u0648\u06cc\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0645\u062d\u0635\u0648\u0644 \u0628\u06cc\u0634\u062a\u0631 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062a\u0627 \u0627\u0631\u0632\u0634 \u0648\u0627\u0642\u0639\u06cc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062d\u0630\u0641 Channel \u0648 \u0645\u0634\u06a9\u0644\u0627\u062a\u0634<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u06cc\u06a9 Channel \u0631\u0648 \u0628\u0627 <code>deleteNotificationChannel()<\/code> \u062d\u0630\u0641 \u0628\u06a9\u0646\u06cc\u060c \u0627\u0645\u0627 \u062d\u0630\u0641 Channel \u0628\u0627\u06cc\u062f \u0628\u0627 \u062f\u0642\u062a \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647. \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u062a\u0639\u062f\u0627\u062f Channel\u0647\u0627\u06cc \u062d\u0630\u0641\u200c\u0634\u062f\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u062a\u0627 \u062c\u0644\u0648\u06cc \u0633\u0648\u0621\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0648 \u0633\u0627\u062e\u062a\u200c\u0648\u062d\u0630\u0641 \u0645\u062f\u0627\u0648\u0645 Channel\u0647\u0627 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647. \u0627\u06cc\u0646 \u06cc\u0639\u0646\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u062a\u0648\u0633\u0639\u0647\u060c \u0627\u06af\u0631 \u0645\u0631\u062a\u0628 ID\u0647\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc \u0648 \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u060c \u0645\u0645\u06a9\u0646\u0647 \u0639\u062f\u062f Channel\u0647\u0627\u06cc \u062d\u0630\u0641\u200c\u0634\u062f\u0647 \u062f\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0627\u0644\u0627 \u0628\u0631\u0647. \u0628\u0627 \u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 Data \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u0627 \u0646\u0635\u0628 \u0645\u062c\u062f\u062f \u0646\u0633\u062e\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0648\u0636\u0639\u06cc\u062a \u0631\u0648 \u0627\u0632 \u0646\u0648 \u0634\u0631\u0648\u0639 \u0628\u06a9\u0646\u06cc.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun deleteOldChannel(context: Context) {\n    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n        val manager = context.getSystemService(NotificationManager::class.java)\n        manager.deleteNotificationChannel(\"old_price_updates\")\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">deleteOldChannel<\/span><span style=\"color: #24292E\">(context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (Build.VERSION.SDK_INT <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> Build.VERSION_CODES.O) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> manager <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> context.<\/span><span style=\"color: #6F42C1\">getSystemService<\/span><span style=\"color: #24292E\">(NotificationManager::<\/span><span style=\"color: #6F42C1\">class<\/span><span style=\"color: #24292E\">.java)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        manager.<\/span><span style=\"color: #6F42C1\">deleteNotificationChannel<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;old_price_updates&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0630\u0641 Channel \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0648\u0642\u062a\u06cc \u0645\u0646\u0637\u0642\u06cc\u0647 \u06a9\u0647 \u06cc\u06a9 \u0642\u0627\u0628\u0644\u06cc\u062a \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0634\u0647 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u062d\u0630\u0641 \u0634\u062f\u0647 \u06cc\u0627 Channel \u0642\u062f\u06cc\u0645\u06cc \u0628\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u062c\u062f\u06cc\u062f \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0634\u062f\u0647. \u0627\u0645\u0627 \u0628\u0627\u06cc\u062f \u062d\u0648\u0627\u0633\u062a \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0627\u06af\u0631 \u0628\u0639\u062f\u0627\u064b \u062f\u0648\u0628\u0627\u0631\u0647 \u0647\u0645\u0648\u0646 ID \u0631\u0648 \u0628\u0633\u0627\u0632\u06cc\u060c \u0631\u0641\u062a\u0627\u0631 \u0648 \u062a\u0627\u0631\u06cc\u062e\u0686\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0645\u0645\u06a9\u0646\u0647 \u0686\u06cc\u0632\u06cc \u0646\u0628\u0627\u0634\u0647 \u06a9\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u06cc. \u0628\u0647\u062a\u0631\u0647 \u0627\u0632 \u0647\u0645\u0648\u0646 \u0627\u0628\u062a\u062f\u0627 ID\u0647\u0627 \u0631\u0648 \u0628\u0627 \u062f\u0642\u062a \u0637\u0631\u0627\u062d\u06cc \u0628\u06a9\u0646\u06cc \u0648 Channel\u0647\u0627 \u0631\u0648 \u0645\u062b\u0644 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u067e\u0627\u06cc\u062f\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u06cc Channel\u0647\u0627 \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u0641\u0639\u0644\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u0633\u0647 Channel \u0627\u0635\u0644\u06cc \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u062a\u0639\u0627\u062f\u0644 \u062e\u0648\u0628\u06cc \u0628\u06cc\u0646 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0627\u0631\u0628\u0631 \u0648 \u0633\u0627\u062f\u06af\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0646. Channel \u0627\u0648\u0644 <code>price_alerts<\/code> \u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0647\u0645 \u0642\u06cc\u0645\u062a \u0648 \u0631\u0633\u06cc\u062f\u0646 \u0642\u06cc\u0645\u062a \u0628\u0647 \u0645\u062d\u062f\u0648\u062f\u0647\u200c\u0627\u06cc\u0647 \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647. \u0627\u06cc\u0646 Channel \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Importance \u0646\u0633\u0628\u062a\u0627\u064b \u0628\u0627\u0644\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0686\u0648\u0646 \u0639\u0644\u062a \u0627\u0635\u0644\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0647\u0634\u062f\u0627\u0631\u0647\u0627 \u0647\u0645\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642\u0647. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u062d\u062a\u06cc \u0627\u06cc\u0646\u062c\u0627 \u0647\u0645 \u0646\u0628\u0627\u06cc\u062f \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u06a9\u200c\u062f\u0631\u0635\u062f\u06cc \u0628\u0627 \u0635\u062f\u0627\u06cc \u0628\u0644\u0646\u062f \u0627\u0639\u0644\u0627\u0645 \u0628\u0634\u0647\u061b \u0645\u0646\u0637\u0642 Backend \u06cc\u0627 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u0628\u06a9\u0646\u0647 \u0686\u0647 \u062a\u063a\u06cc\u06cc\u0631\u06cc \u0627\u0631\u0632\u0634 Notification \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Channel \u062f\u0648\u0645 <code>business_status<\/code> \u0628\u0631\u0627\u06cc \u0646\u062a\u06cc\u062c\u0647 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u062b\u0628\u062a\u060c \u062a\u0623\u06cc\u06cc\u062f \u06cc\u0627 \u0631\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u0647. \u0627\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0645\u0647\u0645\u0646\u060c \u0627\u0645\u0627 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0636\u0637\u0631\u0627\u0631\u06cc \u0646\u06cc\u0633\u062a\u0646\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 <code>IMPORTANCE_DEFAULT<\/code> \u0645\u0646\u0637\u0642\u06cc\u200c\u062a\u0631\u0647. Channel \u0633\u0648\u0645 <code>general_updates<\/code> \u0628\u0631\u0627\u06cc \u062e\u0628\u0631\u0647\u0627\u060c \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f\u060c \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0647\u0627 \u0648 \u0627\u0637\u0644\u0627\u0639\u06cc\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a \u0648 \u0628\u0647\u062a\u0631\u0647 <code>IMPORTANCE_LOW<\/code> \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u062a\u0627 \u0628\u062f\u0648\u0646 \u0645\u0632\u0627\u062d\u0645\u062a \u0632\u06cc\u0627\u062f \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u062d\u062a\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0627\u06cc\u0646 Channel \u0631\u0648 Opt-in \u0637\u0631\u0627\u062d\u06cc \u0628\u06a9\u0646\u06cc\u061b \u06cc\u0639\u0646\u06cc \u0641\u0642\u0637 \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062e\u0648\u062f\u0634 \u0639\u0644\u0627\u0642\u0647\u200c\u0627\u0634 \u0631\u0648 \u0627\u0639\u0644\u0627\u0645 \u06a9\u0631\u062f\u060c \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0628\u0631\u0627\u0634 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 Channel \u0686\u0647\u0627\u0631\u0645\u06cc \u0628\u0647 \u0627\u0633\u0645 <code>security_alerts<\/code> \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u0645\u0634\u06a9\u0648\u06a9\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0645\u0632 \u06cc\u0627 \u0627\u062a\u0641\u0627\u0642\u200c\u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u0627\u0636\u0627\u0641\u0647 \u0628\u0634\u0647. \u0627\u06cc\u0646 Channel \u0645\u0627\u0647\u06cc\u062a \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0631\u0647 \u0648 Importance \u0628\u0627\u0644\u0627\u062a\u0631 \u0628\u0631\u0627\u0634 \u0642\u0627\u0628\u0644\u200c\u062f\u0641\u0627\u0639\u0647. \u0646\u06a9\u062a\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Channel \u062c\u062f\u06cc\u062f \u0628\u0627\u06cc\u062f \u0628\u0631 \u0627\u0633\u0627\u0633 \u06cc\u06a9 \u0646\u06cc\u0627\u0632 \u0648\u0627\u0642\u0639\u06cc \u0648 \u0642\u0627\u0628\u0644\u200c\u0641\u0647\u0645 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647\u060c \u0646\u0647 \u0635\u0631\u0641\u0627\u064b \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u062a\u0639\u062f\u0627\u062f \u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0647\u062a\u0631 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0634\u0646\u0627\u0633\u0647 Channel \u0627\u0632 Backend \u0627\u0631\u0633\u0627\u0644 \u0646\u0634\u0647. Backend \u0628\u0627\u06cc\u062f Event \u0645\u0639\u0646\u0627\u062f\u0627\u0631 \u0628\u0641\u0631\u0633\u062a\u0647\u060c \u0645\u062b\u0644\u0627\u064b <code>PRICE_TARGET_REACHED<\/code> \u06cc\u0627 <code>BUSINESS_APPROVED<\/code>\u060c \u0648 \u062e\u0648\u062f \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647 \u0627\u06cc\u0646 Event \u0628\u0647 \u06a9\u062f\u0648\u0645 Channel \u062a\u0639\u0644\u0642 \u062f\u0627\u0631\u0647. \u0627\u06af\u0631 Backend \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b <code>channel_id<\/code> \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0631\u0648 \u062a\u0639\u06cc\u06cc\u0646 \u0628\u06a9\u0646\u0647\u060c \u062c\u0632\u0626\u06cc\u0627\u062a \u067e\u0644\u062a\u0641\u0631\u0645 \u0648\u0627\u0631\u062f \u0645\u0646\u0637\u0642 Backend \u0645\u06cc\u0634\u0647 \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc Android \u0633\u062e\u062a\u200c\u062a\u0631 \u0645\u06cc\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 \u062f\u0627\u062e\u0644 \u0627\u067e \u06cc\u06a9 Mapper \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0646\u0648\u0639 \u0631\u0648\u06cc\u062f\u0627\u062f \u0631\u0648 \u0628\u0647 Channel \u0645\u0646\u0627\u0633\u0628 \u062a\u0628\u062f\u06cc\u0644 \u0628\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>enum class NotificationEventType {\n    PRICE_CHANGED,\n    PRICE_TARGET_REACHED,\n    BUSINESS_APPROVED,\n    BUSINESS_REJECTED,\n    GENERAL_ANNOUNCEMENT,\n    SECURITY_ALERT\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">enum<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">NotificationEventType<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    PRICE_CHANGED,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    PRICE_TARGET_REACHED,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    BUSINESS_APPROVED,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    BUSINESS_REJECTED,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    GENERAL_ANNOUNCEMENT,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    SECURITY_ALERT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun NotificationEventType.channelId(): String {\n    return when (this) {\n        NotificationEventType.PRICE_CHANGED,\n        NotificationEventType.PRICE_TARGET_REACHED ->\n            \"price_alerts\"\n\n        NotificationEventType.BUSINESS_APPROVED,\n        NotificationEventType.BUSINESS_REJECTED ->\n            \"business_status\"\n\n        NotificationEventType.GENERAL_ANNOUNCEMENT ->\n            \"general_updates\"\n\n        NotificationEventType.SECURITY_ALERT ->\n            \"security_alerts\"\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">NotificationEventType<\/span><span style=\"color: #24292E\">.<\/span><span style=\"color: #6F42C1\">channelId<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">when<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #005CC5\">this<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        NotificationEventType.PRICE_CHANGED,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        NotificationEventType.PRICE_TARGET_REACHED <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;price_alerts&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        NotificationEventType.BUSINESS_APPROVED,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        NotificationEventType.BUSINESS_REJECTED <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;business_status&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        NotificationEventType.GENERAL_ANNOUNCEMENT <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;general_updates&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        NotificationEventType.SECURITY_ALERT <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #032F62\">&quot;security_alerts&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627 \u0627\u06cc\u0646 \u0637\u0631\u0627\u062d\u06cc\u060c Backend \u0641\u0642\u0637 \u0645\u06cc\u06af\u0647 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0627\u0641\u062a\u0627\u062f\u0647 \u0648 Android \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0627\u0639\u0644\u0627\u0646 \u0628\u0627\u06cc\u062f \u0627\u0632 \u06a9\u062f\u0648\u0645 Channel \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u0627\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0627\u06af\u0631 \u0628\u0639\u062f\u0627\u064b Channel\u0647\u0627 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u06cc\u060c \u0644\u0627\u0632\u0645 \u0646\u0628\u0627\u0634\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 Backend \u06cc\u0627 \u0646\u0633\u062e\u0647 iOS \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0647\u0645 \u062f\u0633\u062a\u06a9\u0627\u0631\u06cc \u0628\u06a9\u0646\u06cc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0646\u062f \u062e\u0637\u0627\u06cc \u0631\u0627\u06cc\u062c \u062f\u0631 Notification Channel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u062e\u0637\u0627\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 Channel \u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u06cc\u0627\u0645 FCM \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0642\u0639 \u06a9\u0627\u0631 \u0628\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u0627\u06af\u0631 \u0645\u0633\u06cc\u0631 \u0633\u0627\u062e\u062a Channel \u0627\u062c\u0631\u0627 \u0646\u0634\u0647 \u06cc\u0627 Notification \u0632\u0648\u062f\u062a\u0631 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647\u060c \u0627\u0639\u0644\u0627\u0646 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0646\u0645\u06cc\u0634\u0647. Channel\u0647\u0627\u06cc \u062b\u0627\u0628\u062a \u0628\u0647\u062a\u0631\u0647 \u0647\u0646\u06af\u0627\u0645 \u0634\u0631\u0648\u0639 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0646\u060c \u0646\u0647 \u062f\u0631 \u0622\u062e\u0631\u06cc\u0646 \u0644\u062d\u0638\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0637\u0627\u06cc \u062f\u0648\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633 Importance \u0631\u0648 \u062f\u0631 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u062f\u0647 \u0648 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647 Channel \u0645\u0648\u062c\u0648\u062f \u062a\u063a\u06cc\u06cc\u0631 \u0628\u06a9\u0646\u0647. \u0647\u0645\u0648\u0646\u200c\u0637\u0648\u0631 \u06a9\u0647 \u06af\u0641\u062a\u06cc\u0645\u060c \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0646\u0645\u06cc\u200c\u0627\u0641\u062a\u0647. \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u062c\u062f\u06cc\u062f \u0628\u0627\u06cc\u062f App Data \u0631\u0648 \u067e\u0627\u06a9 \u0628\u06a9\u0646\u06cc \u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0646\u0635\u0628 \u0628\u06a9\u0646\u06cc\u060c \u0627\u0645\u0627 \u062f\u0631 \u0645\u062d\u0635\u0648\u0644 \u0648\u0627\u0642\u0639\u06cc \u0646\u0628\u0627\u06cc\u062f \u0641\u0631\u0636 \u0628\u06a9\u0646\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0647\u0645 \u0646\u0635\u0628 \u062a\u0627\u0632\u0647 \u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0637\u0627\u06cc \u0633\u0648\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0647\u0645\u0647 Notification\u0647\u0627 \u062f\u0627\u062e\u0644 Channel \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0648\u0627\u062d\u062f \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0646. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0631\u0648 \u0633\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0648\u0644\u06cc \u062a\u0645\u0627\u0645 \u0647\u062f\u0641 Channel \u0631\u0648 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u200c\u0628\u0631\u0647\u060c \u0686\u0648\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u0632 \u0647\u0645 \u0646\u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u0648 \u063a\u06cc\u0631\u0645\u0647\u0645 \u0631\u0648 \u062c\u062f\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0637\u0627\u06cc \u0686\u0647\u0627\u0631\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 Notification \u06cc\u06a9 Channel \u062c\u062f\u06cc\u062f \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647. Channel \u0645\u0648\u062c\u0648\u062f\u06cc\u062a\u06cc \u067e\u0627\u06cc\u062f\u0627\u0631 \u0648 \u0628\u0644\u0646\u062f\u0645\u062f\u062a\u0647\u060c \u0646\u0647 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 \u067e\u06cc\u0627\u0645 \u062a\u0648\u0644\u06cc\u062f \u0648 \u062d\u0630\u0641 \u0628\u0634\u0647. \u062a\u0639\u062f\u0627\u062f \u0632\u06cc\u0627\u062f Channel \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0634\u0644\u0648\u063a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062e\u0631\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u0637\u0627\u06cc \u067e\u0646\u062c\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0641\u0642\u0637 \u0648\u0636\u0639\u06cc\u062a Permission \u06a9\u0644\u06cc \u0628\u0631\u0631\u0633\u06cc \u0628\u0634\u0647 \u0648 \u0648\u0636\u0639\u06cc\u062a Channel \u062e\u0627\u0635 \u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0633\u0637\u062d \u06a9\u0644\u06cc \u0645\u062c\u0627\u0632 \u0628\u0627\u0634\u0646\u060c \u0648\u0644\u06cc Channel \u0645\u0647\u0645\u06cc \u0645\u062b\u0644 <code>price_alerts<\/code> \u062e\u0627\u0645\u0648\u0634 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u062f\u0631 \u0635\u0641\u062d\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0647\u0634\u062f\u0627\u0631 \u0642\u06cc\u0645\u062a \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a \u0631\u0648 \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u06cc \u0648 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062a\u0648\u0636\u06cc\u062d \u0628\u062f\u06cc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Notification Channel \u0631\u0648 \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u06cc\u06a9 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0627\u062c\u0628\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 Notification \u062f\u0631 Android 8 \u0628\u0647 \u0628\u0639\u062f \u0628\u0628\u06cc\u0646\u06cc. Channel \u062f\u0631 \u0627\u0635\u0644 \u0645\u0631\u0632\u06cc \u0628\u06cc\u0646 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631\u0647. \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u0639 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0631\u0648 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u0631\u0627\u06cc \u0647\u0631 \u0646\u0648\u0639 \u06cc\u06a9 \u0631\u0641\u062a\u0627\u0631 \u0627\u0648\u0644\u06cc\u0647 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u062f\u0647 \u0648 \u0628\u0639\u062f \u06a9\u0646\u062a\u0631\u0644 \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062a\u062d\u0648\u06cc\u0644 \u0645\u06cc\u062f\u0647. \u0627\u0632 \u0644\u062d\u0638\u0647\u200c\u0627\u06cc \u06a9\u0647 Channel \u062b\u0628\u062a \u0634\u062f\u060c \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0635\u062f\u0627\u060c \u0648\u06cc\u0628\u0631\u0647\u060c Importance \u0648 \u062d\u062a\u06cc \u0641\u0639\u0627\u0644 \u06cc\u0627 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646\u0634 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0627\u06cc\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u062d\u062a\u0631\u0627\u0645 \u0628\u0630\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0637\u0631\u0627\u062d\u06cc \u062f\u0631\u0633\u062a Channel \u0627\u0632 \u0634\u0646\u0627\u062e\u062a \u0631\u0641\u062a\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0634\u0631\u0648\u0639 \u0645\u06cc\u0634\u0647\u060c \u0646\u0647 \u0627\u0632 \u0633\u0627\u062e\u062a\u0627\u0631 \u06a9\u0644\u0627\u0633\u200c\u0647\u0627 \u06cc\u0627 \u062c\u062f\u0648\u0644\u200c\u0647\u0627\u06cc Backend. \u0628\u0627\u06cc\u062f \u0628\u0628\u06cc\u0646\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u06a9\u062f\u0648\u0645 \u062f\u0633\u062a\u0647 \u0627\u0632 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0631\u0648 \u0645\u0633\u062a\u0642\u0644 \u0627\u0632 \u0628\u0642\u06cc\u0647 \u06a9\u0646\u062a\u0631\u0644 \u0628\u06a9\u0646\u0647. \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a\u060c \u0648\u0636\u0639\u06cc\u062a \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0648 \u0627\u0637\u0644\u0627\u0639\u06cc\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0633\u0647 \u0646\u06cc\u0627\u0632 \u0645\u062a\u0641\u0627\u0648\u062a\u0646 \u0648 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0627\u0648\u0646\u200c\u0647\u0627 \u062f\u0627\u062e\u0644 Channel\u0647\u0627\u06cc \u062c\u062f\u0627 \u062a\u0635\u0645\u06cc\u0645 \u0645\u0646\u0637\u0642\u06cc\u200c\u062a\u0631\u06cc\u0647. \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0627\u06cc\u0646 \u0637\u0631\u0627\u062d\u06cc \u0628\u0627\u06cc\u062f \u062a\u0641\u0627\u0648\u062a Channel \u0628\u0627 Permission\u060c Notification Group \u0648 Channel Group \u0631\u0648 \u0647\u0645 \u062f\u0642\u06cc\u0642 \u0628\u062f\u0648\u0646\u06cc \u062a\u0627 \u0647\u0631 \u0627\u0628\u0632\u0627\u0631 \u062f\u0631 \u062c\u0627\u06cc \u062f\u0631\u0633\u062a \u062e\u0648\u062f\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u062c\u0645\u0644\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647: <strong>Notification \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0631\u0641\u062a\u0627\u0631 Channel \u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0646 \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0647.<\/strong> \u0648\u0642\u062a\u06cc \u0627\u06cc\u0646 \u0627\u0635\u0644 \u0631\u0648 \u0642\u0628\u0648\u0644 \u0628\u06a9\u0646\u06cc\u060c \u062f\u06cc\u06af\u0647 \u062a\u0644\u0627\u0634 \u0646\u0645\u06cc\u200c\u06a9\u0646\u06cc \u0635\u062f\u0627\u06cc \u062e\u0627\u0645\u0648\u0634\u200c\u0634\u062f\u0647 \u0631\u0648 \u062f\u0648\u0631 \u0628\u0632\u0646\u06cc\u060c \u0647\u0645\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0631\u0648 \u0627\u0636\u0637\u0631\u0627\u0631\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0646\u0645\u06cc\u200c\u06a9\u0646\u06cc \u0648 \u0628\u0631\u0627\u06cc \u062c\u0644\u0628 \u062a\u0648\u062c\u0647 \u0628\u06cc\u0634\u062a\u0631\u060c \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0642\u0631\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u06cc. \u0646\u062a\u06cc\u062c\u0647 \u0647\u0645 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u0634 \u0646\u0647 \u0641\u0642\u0637 \u0627\u0632 \u0646\u0638\u0631 \u0641\u0646\u06cc \u062f\u0631\u0633\u062a \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646\u060c \u0628\u0644\u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u0631\u0632\u0634 \u0628\u0627\u0632 \u0645\u0648\u0646\u062f\u0646 \u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u0647\u0641\u062a\u0645<\/h3>\n\n\n\n<h1 class=\"wp-block-heading\">Deep Link<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Deep Link \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u0647 \u0645\u0634\u06a9\u0644\u06cc \u0631\u0648 \u062d\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0647\u0631 \u0648\u0642\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632 \u0645\u06cc\u200c\u0634\u062f\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 \u0646\u0642\u0637\u0647 \u0634\u0631\u0648\u0639 \u062e\u0648\u062f\u0634 \u0648\u0627\u0631\u062f\u0634 \u0645\u06cc\u200c\u0634\u062f\u06cc\u0645. \u06cc\u0639\u0646\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u0622\u06cc\u06a9\u0646 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u06cc\u200c\u0632\u062f\u060c \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc \u0628\u0627\u0632 \u0645\u06cc\u200c\u0634\u062f\u060c \u0628\u0639\u062f \u0627\u0632 \u0628\u06cc\u0646 \u0645\u0646\u0648\u0647\u0627 \u0648\u0627\u0631\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0645\u06cc\u200c\u0634\u062f\u060c \u0645\u062d\u0635\u0648\u0644 \u0645\u0648\u0631\u062f\u0646\u0638\u0631 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0631\u062f \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0628\u0647 \u0635\u0641\u062d\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0627\u0648\u0646 \u0645\u06cc\u200c\u0631\u0633\u06cc\u062f. \u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062e\u0648\u062f\u0634 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0627\u0632 \u0628\u06a9\u0646\u0647 \u0637\u0628\u06cc\u0639\u06cc \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u200c\u0631\u0633\u0647\u060c \u0627\u0645\u0627 \u0647\u0645\u06cc\u0634\u0647 \u0648\u0631\u0648\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0622\u06cc\u06a9\u0646 \u0627\u062a\u0641\u0627\u0642 \u0646\u0645\u06cc\u200c\u0627\u0641\u062a\u0647. \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u062a\u0644\u06af\u0631\u0627\u0645 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0628\u0632\u0646\u062f\u060c \u0627\u0632 \u06af\u0648\u06af\u0644 \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 \u06cc\u06a9 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0628\u0634\u0647\u060c \u0631\u0648\u06cc \u06cc\u06a9 Notification \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a \u06a9\u0644\u06cc\u06a9 \u0628\u06a9\u0646\u0647 \u06cc\u0627 \u0644\u06cc\u0646\u06a9\u06cc \u0631\u0648 \u0627\u0632 \u062f\u0648\u0633\u062a\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647. \u062f\u0631 \u062a\u0645\u0627\u0645 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u200c\u0647\u0627\u060c \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0642\u0628\u0644 \u0645\u06cc\u200c\u062f\u0648\u0646\u0647 \u062f\u0646\u0628\u0627\u0644 \u0686\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc\u06cc\u0647 \u0648 \u0645\u0646\u0637\u0642\u06cc \u0646\u06cc\u0633\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0648\u0646 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0632 \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc \u0648\u0627\u0631\u062f \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u0686\u0646\u062f\u0645\u0631\u062d\u0644\u0647\u200c\u0627\u06cc \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deep Link \u0628\u0631\u0627\u06cc \u062d\u0644 \u0647\u0645\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647 \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647. Deep Link \u0644\u06cc\u0646\u06a9\u06cc\u0647 \u06a9\u0647 \u0628\u0647 \u062c\u0627\u06cc \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u0635\u0631\u0641\u0650 \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06cc\u06a9 \u0645\u0642\u0635\u062f \u0645\u0634\u062e\u0635 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u0631\u0633\u0648\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0644\u06cc\u0646\u06a9\u06cc \u0645\u062b\u0644 <code>https:\/\/priceban.com\/products\/842<\/code> \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0628\u0627\u0632 \u0628\u06a9\u0646\u0647\u061b \u0628\u0627\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0627\u0632 \u0628\u06a9\u0646\u0647 \u0648 \u0645\u062d\u0635\u0648\u0644 \u0634\u0645\u0627\u0631\u0647 \u06f8\u06f4\u06f2 \u0631\u0648 \u0646\u0634\u0648\u0646 \u0628\u062f\u0647. \u0627\u0632 \u062f\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631\u060c \u0627\u06cc\u0646 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u0637\u0628\u06cc\u0639\u06cc \u0648 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0627\u0633\u062a. \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0645\u06cc\u200c\u0632\u0646\u0647 \u0648 \u0647\u0645\u0648\u0646 \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u067e\u0634\u062a \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631 \u0633\u0627\u062f\u0647 \u0686\u0646\u062f \u0644\u0627\u06cc\u0647 \u0645\u062e\u062a\u0644\u0641 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647: \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0627\u06cc\u062f \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u0647 \u0627\u06cc\u0646 \u0644\u06cc\u0646\u06a9 \u0628\u0647 \u06a9\u062f\u0648\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0631\u0628\u0648\u0637\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0622\u062f\u0631\u0633 \u0631\u0648 \u062a\u062c\u0632\u06cc\u0647 \u0628\u06a9\u0646\u0647\u060c \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0628\u06a9\u0646\u0647\u060c \u0648\u0636\u0639\u06cc\u062a \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0628\u06a9\u0646\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u06a9\u0646\u0647 \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a Back Stack \u0645\u0646\u0627\u0633\u0628\u06cc \u0628\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0646\u062f\u0631\u0648\u06cc\u062f Deep Link \u0631\u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0633\u06cc\u0633\u062a\u0645 <code>Intent<\/code> \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u06cc\u06a9 \u0644\u06cc\u0646\u06a9 \u0645\u06cc\u200c\u0632\u0646\u0647\u060c \u0633\u06cc\u0633\u062a\u0645 \u06cc\u06a9 Intent \u0645\u06cc\u200c\u0633\u0627\u0632\u0647 \u0648 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u0645\u06cc\u200c\u06af\u0631\u062f\u0647 \u06a9\u0647 \u0627\u0639\u0644\u0627\u0645 \u06a9\u0631\u062f\u0646 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0686\u0646\u06cc\u0646 \u0644\u06cc\u0646\u06a9\u06cc \u0631\u0648 \u062f\u0627\u0631\u0646. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Deep Link \u06cc\u06a9 \u0642\u0627\u0628\u0644\u06cc\u062a \u062c\u062f\u0627 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0646\u06cc\u0633\u062a\u060c \u0628\u0644\u06a9\u0647 \u06cc\u06a9\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u062f\u0647\u0627\u06cc \u0645\u0647\u0645 \u0647\u0645\u0648\u0646 \u0633\u06cc\u0633\u062a\u0645 Intent \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0647. \u0637\u0628\u0642 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0631\u0633\u0645\u06cc\u060c Deep Link \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0627\u0632 \u0645\u0631\u0648\u0631\u06af\u0631\u060c \u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u200c\u0648\u062c\u0648\u060c \u0634\u0628\u06a9\u0647\u200c\u0647\u0627\u06cc \u0627\u062c\u062a\u0645\u0627\u0639\u06cc\u060c Notification \u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0648\u0627\u0631\u062f \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0634\u062e\u0635\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deep Link \u0641\u0642\u0637 \u06cc\u06a9 \u0644\u06cc\u0646\u06a9 \u0646\u06cc\u0633\u062a\u061b \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u0648\u0631\u0648\u062f \u062c\u062f\u06cc\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 Deep Link \u0631\u0648 \u0641\u0642\u0637 \u0628\u0647 \u0686\u0634\u0645 \u06cc\u06a9 URL \u0628\u0628\u06cc\u0646\u06cc\u0645. \u062f\u0631 \u0648\u0627\u0642\u0639 URL \u0641\u0642\u0637 \u0622\u062f\u0631\u0633 \u0648\u0631\u0648\u062f\u06cc \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0647. \u0645\u0633\u0626\u0644\u0647 \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0628\u0647 \u0628\u0639\u062f \u0686\u0646\u062f \u0646\u0642\u0637\u0647 \u0648\u0631\u0648\u062f \u062f\u0627\u0631\u0647. \u0642\u0628\u0644\u0627\u064b \u0634\u0627\u06cc\u062f \u0641\u0631\u0636 \u0645\u06cc\u200c\u06a9\u0631\u062f\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u06cc\u0634\u0647 \u0627\u0632 \u0635\u0641\u062d\u0647 Splash \u06cc\u0627 Home \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u0634\u0647\u060c \u0627\u0645\u0627 \u062d\u0627\u0644\u0627 \u0645\u0645\u06a9\u0646\u0647 \u0627\u0648\u0644\u06cc\u0646 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0647 \u0635\u0641\u062d\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u062d\u0635\u0648\u0644\u060c \u0635\u0641\u062d\u0647 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u060c \u0646\u062a\u06cc\u062c\u0647 \u0633\u0641\u0627\u0631\u0634 \u06cc\u0627 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0647\u0634\u062f\u0627\u0631 \u0642\u06cc\u0645\u062a \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u062b\u0631 \u062c\u062f\u06cc \u0645\u06cc\u200c\u0630\u0627\u0631\u0647. \u0647\u0631 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 Deep Link \u0642\u0627\u0628\u0644\u200c\u062f\u0633\u062a\u0631\u0633\u06cc\u0647 \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0646\u0647 \u062a\u0627 \u062d\u062f \u0632\u06cc\u0627\u062f\u06cc \u0645\u0633\u062a\u0642\u0644 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u0635\u0641\u062d\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u0646\u0628\u0627\u06cc\u062f \u0641\u0631\u0636 \u0628\u06a9\u0646\u0647 \u06a9\u0647 \u062d\u062a\u0645\u0627\u064b \u06a9\u0627\u0631\u0628\u0631 \u0642\u0628\u0644\u0627\u064b \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 \u0644\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0634\u062f\u0647 \u0648 \u0622\u0628\u062c\u06a9\u062a \u06a9\u0627\u0645\u0644 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0627\u0632 \u0635\u0641\u062d\u0647 \u0642\u0628\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0647. Deep Link \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0627 \u06cc\u06a9 <code>productId<\/code> \u0628\u0627\u0632 \u0628\u06a9\u0646\u0647\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0647\u06cc\u0686 \u0635\u0641\u062d\u0647 \u0642\u0628\u0644\u06cc \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u0627\u06cc\u062f \u0628\u0627 \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644 \u06a9\u0627\u0631 \u0628\u06a9\u0646\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u0631\u0648 \u0627\u0632 Repository \u0628\u06af\u06cc\u0631\u0647 \u0648 \u0648\u0636\u0639\u06cc\u062a Loading\u060c Error \u0648 \u0645\u0648\u0641\u0642\u06cc\u062a \u0631\u0648 \u062e\u0648\u062f\u0634 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc Deep Link \u0645\u0647\u0645 \u0646\u06cc\u0633\u062a\u061b \u062f\u0631 \u0648\u0627\u0642\u0639 \u0646\u0634\u0648\u0646\u0647 \u0645\u0639\u0645\u0627\u0631\u06cc \u0633\u0627\u0644\u0645\u0647. \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0641\u0642\u0637 \u062f\u0631 \u0635\u0648\u0631\u062a\u06cc \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0635\u0641\u062d\u0647 \u0642\u0628\u0644\u06cc \u062d\u062a\u0645\u0627\u064b \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0631\u0648 \u0628\u0647\u0634 \u062a\u062d\u0648\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0628\u0647 \u0645\u0633\u06cc\u0631 \u0642\u0628\u0644\u06cc \u0648\u0627\u0628\u0633\u062a\u0647 \u0627\u0633\u062a. Deep Link \u0627\u06cc\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u067e\u0646\u0647\u0627\u0646 \u0631\u0648 \u0622\u0634\u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Deep Link \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0645\u0639\u0645\u0627\u0631\u06cc Navigation \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a State \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645 \u062a\u0645\u06cc\u0632\u062a\u0631 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0648\u0627\u0642\u0639\u06cc \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062d\u0635\u0648\u0644\u06cc \u0631\u0648 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0647 \u0648 \u0642\u06cc\u0645\u062a \u0627\u0648\u0646 \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0647. Backend \u06cc\u06a9 \u067e\u06cc\u0627\u0645 FCM \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 Notification \u0632\u06cc\u0631 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u06cc\u0645\u062a \u0647\u062f\u0641\u0648\u0646 Sony \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u0627\u0639\u0644\u0627\u0646 \u0645\u06cc\u200c\u0632\u0646\u0647. \u0627\u0646\u062a\u0638\u0627\u0631 \u0637\u0628\u06cc\u0639\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0635\u0641\u062d\u0647 \u0647\u0645\u0648\u0646 \u0647\u062f\u0641\u0648\u0646 \u0628\u0627\u0632 \u0628\u0634\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u062e\u0648\u062f\u0634 \u062f\u0648\u0628\u0627\u0631\u0647 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u067e\u06cc\u062f\u0627 \u0628\u06a9\u0646\u0647. \u067e\u0633 Notification \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0645\u0642\u0635\u062f \u0645\u0634\u062e\u0635 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u0645\u0642\u0635\u062f \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 \u0634\u06a9\u0644 \u06cc\u06a9 URI \u062a\u0639\u0631\u06cc\u0641 \u0628\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;priceban.com\/products\/842\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc Notification \u0645\u06cc\u200c\u0632\u0646\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u06cc\u0646 \u0622\u062f\u0631\u0633 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u062e\u0634 <code>products<\/code> \u0631\u0648 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0646\u0648\u0639 \u0645\u0642\u0635\u062f \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0648 \u0645\u0642\u062f\u0627\u0631 <code>842<\/code> \u0631\u0648 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0639\u062f Navigation \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0647 \u0635\u0641\u062d\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0633\u0646\u0627\u0631\u06cc\u0648 \u0645\u0645\u06a9\u0646\u0647 \u067e\u06cc\u0686\u06cc\u062f\u0647\u200c\u062a\u0631 \u0628\u0627\u0634\u0647. \u0634\u0627\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0647\u0646\u0648\u0632 \u0648\u0627\u0631\u062f \u062d\u0633\u0627\u0628 \u0646\u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0634\u0627\u06cc\u062f \u0645\u062d\u0635\u0648\u0644 \u062d\u0630\u0641 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0634\u0627\u06cc\u062f \u0644\u06cc\u0646\u06a9 \u0642\u062f\u06cc\u0645\u06cc \u0628\u0627\u0634\u0647. \u0634\u0627\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u0642\u0628\u0644 \u0628\u0627\u0632 \u0628\u0627\u0634\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0635\u0641\u062d\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0642\u0631\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Deep Link \u0641\u0642\u0637 <code>navigate(\"product\/842\")<\/code> \u0646\u06cc\u0633\u062a\u061b \u0628\u0627\u06cc\u062f \u0645\u062c\u0645\u0648\u0639\u0647\u200c\u0627\u06cc \u0627\u0632 \u062d\u0627\u0644\u062a\u200c\u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Custom Scheme \u0648 Web Link<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc Deep Link \u0631\u0648 \u0628\u0627 \u0686\u0646\u062f \u0646\u0648\u0639 \u0622\u062f\u0631\u0633 \u0628\u0633\u0627\u0632\u06cc. \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0648 \u0633\u0627\u062f\u0647\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 Scheme \u0627\u062e\u062a\u0635\u0627\u0635\u06cc\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>priceban:\/\/product\/842\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0647 \u062c\u0627\u06cc <code>https<\/code> \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0647 \u0648 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0627\u06cc\u0646 \u0622\u062f\u0631\u0633 \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 PriceBan\u0640\u0647. \u0628\u0639\u062f \u0627\u0632 \u0627\u0648\u0646 <code>product<\/code> \u0646\u0648\u0639 \u0645\u0642\u0635\u062f \u0648 <code>842<\/code> \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644\u0647. \u0627\u06cc\u0646 \u0645\u062f\u0644 \u0627\u0632 \u0646\u0638\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u0648 \u0628\u0631\u0627\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u062f\u0627\u062e\u0644\u06cc \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u060c \u062a\u0633\u062a\u060c Prototype \u06cc\u0627 \u0628\u0639\u0636\u06cc \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644\u200c\u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 Custom Scheme \u06cc\u06a9 \u0645\u0634\u06a9\u0644 \u0645\u0647\u0645 \u062f\u0627\u0631\u0647\u061b \u0645\u0627\u0644\u06a9\u06cc\u062a Scheme \u0642\u0627\u0628\u0644\u200c\u0627\u062b\u0628\u0627\u062a \u0646\u06cc\u0633\u062a. \u0647\u06cc\u0686\u200c\u0686\u06cc\u0632\u06cc \u062c\u0644\u0648\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u06cc\u06af\u0647 \u0631\u0648 \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u06a9\u0647 \u0627\u0648\u0646 \u0647\u0645 \u0627\u0639\u0644\u0627\u0645 \u0628\u06a9\u0646\u0647 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc <code>priceban:\/\/<\/code> \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0645\u0645\u06a9\u0646\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u0628\u067e\u0631\u0633\u0647 \u0644\u06cc\u0646\u06a9 \u0628\u0627 \u06a9\u062f\u0648\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632 \u0628\u0634\u0647 \u06cc\u0627 \u062d\u062a\u06cc \u062f\u0631 \u0628\u0639\u0636\u06cc \u0634\u0631\u0627\u06cc\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u06cc\u06af\u0631\u06cc \u062e\u0648\u062f\u0634 \u0631\u0648 \u0648\u0627\u0631\u062f \u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u0628\u06a9\u0646\u0647. Custom Scheme \u0647\u0645\u0686\u0646\u06cc\u0646 \u0631\u0648\u06cc \u062f\u0633\u062a\u06af\u0627\u0647\u06cc \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0635\u0628 \u0646\u06cc\u0633\u062a\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0647 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u0648\u0628 \u0642\u0627\u0628\u0644\u200c\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0631\u0648\u0634 \u062f\u0648\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Web Link\u0640\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;priceban.com\/products\/842\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0644\u06cc\u0646\u06a9 \u0627\u0632 <code>http<\/code> \u06cc\u0627 <code>https<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0645\u0632\u06cc\u062a\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062d\u062a\u06cc \u0627\u06af\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0635\u0628 \u0646\u0628\u0627\u0634\u0647\u060c \u0645\u0631\u0648\u0631\u06af\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0646\u0633\u062e\u0647 \u0648\u0628 \u0645\u062d\u0635\u0648\u0644 \u0631\u0648 \u0628\u0627\u0632 \u0628\u06a9\u0646\u0647. \u0627\u0645\u0627 \u0635\u0631\u0641\u0627\u064b \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 HTTPS \u0647\u0646\u0648\u0632 \u062b\u0627\u0628\u062a \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0648\u0627\u0642\u0639\u0627\u064b \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u062f\u0627\u0645\u0646\u0647 <code>priceban.com<\/code>&nbsp;\u0647\u0633\u062a. \u0686\u0646\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0647\u0645\u0648\u0646 \u0644\u06cc\u0646\u06a9 \u062b\u0628\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u0646 \u0648 \u0633\u06cc\u0633\u062a\u0645 \u0645\u062c\u0628\u0648\u0631 \u0628\u0634\u0647 \u0628\u06cc\u0646 \u0627\u0648\u0646\u200c\u0647\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 <strong>Android App Links<\/strong> \u0648\u0627\u0631\u062f \u0645\u06cc\u0634\u0647. App Link \u062f\u0631 \u0627\u0635\u0644 \u06cc\u06a9 Web Link \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647 \u0627\u0633\u062a. \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0627\u062e\u0644 Manifest \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u062f\u0627\u0645\u0646\u0647 \u0645\u0634\u062e\u0635\u06cc \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0648\u0628\u200c\u0633\u0627\u06cc\u062a \u0647\u0645 \u0628\u0627 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0645\u062e\u0635\u0648\u0635 \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u062c\u0627\u0632\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0627\u0648\u0646 \u062f\u0627\u0645\u0646\u0647 \u0631\u0648 \u062f\u0627\u0631\u0647. \u0628\u0639\u062f \u0627\u0632 \u062a\u0623\u06cc\u06cc\u062f\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0644\u06cc\u0646\u06a9 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632 \u0628\u06a9\u0646\u0647\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u067e\u0646\u062c\u0631\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u0628\u0631\u0627\u06cc \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0647 \u062f\u0627\u0645\u0646\u0647 \u062e\u0648\u062f\u062a \u062a\u0639\u0644\u0642 \u062f\u0627\u0631\u0646\u060c \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 App Links \u0631\u0648 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0646\u060c \u0686\u0648\u0646 \u0647\u0645 \u062a\u062c\u0631\u0628\u0647 \u0631\u0648\u0627\u0646\u200c\u062a\u0631\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0645 \u062c\u0644\u0648\u06cc \u062a\u0635\u0627\u062d\u0628 \u0644\u06cc\u0646\u06a9 \u062a\u0648\u0633\u0637 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u063a\u06cc\u0631\u0645\u062c\u0627\u0632 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a Deep Link\u060c Web Link \u0648 App Link<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0633\u0647 \u0627\u0635\u0637\u0644\u0627\u062d \u0634\u0628\u06cc\u0647 \u0647\u0645 \u0647\u0633\u062a\u0646\u060c \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0628\u0627 \u0647\u0645 \u06cc\u06a9\u06cc \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0646. Deep Link \u0645\u0641\u0647\u0648\u0645 \u06a9\u0644\u06cc\u0647\u061b \u06cc\u0639\u0646\u06cc \u0647\u0631 \u0644\u06cc\u0646\u06a9\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0647 \u0645\u0642\u0635\u062f \u0645\u0634\u062e\u0635\u06cc \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u062f\u0627\u06cc\u062a \u0628\u06a9\u0646\u0647. \u06cc\u06a9 \u0644\u06cc\u0646\u06a9 \u0628\u0627 Scheme \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u0645\u062b\u0644 <code>priceban:\/\/product\/842<\/code> \u0647\u0645 Deep Link \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Web Link \u0646\u0648\u0639\u06cc Deep Link\u0640\u0647 \u06a9\u0647 \u0627\u0632 <code>http<\/code> \u06cc\u0627 <code>https<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b <code>https:\/\/priceban.com\/products\/842<\/code> \u06cc\u06a9 Web Link\u0640\u0647. \u0627\u06cc\u0646 \u0644\u06cc\u0646\u06a9 \u0647\u0645 \u0628\u0631\u0627\u06cc \u0648\u0628 \u0645\u0639\u0646\u0627 \u062f\u0627\u0631\u0647 \u0648 \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u0648\u0633\u0637 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">App Link \u06cc\u06a9 Web Link \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647 \u0627\u0633\u062a. \u06cc\u0639\u0646\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 \u062f\u0627\u0645\u0646\u0647 \u0648 \u0627\u0645\u0636\u0627\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u0637\u0645\u0626\u0646 \u0634\u062f\u0647 \u06a9\u0647 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0648\u0627\u0642\u0639\u0627\u064b \u0645\u062c\u0627\u0632\u0647 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc <code>priceban.com<\/code> \u0631\u0648 \u0628\u0627\u0632 \u0628\u06a9\u0646\u0647. App Links \u0627\u0632 Android 6 \u0628\u0647 \u0628\u0639\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc\u0634\u0646 \u0648 \u0628\u0639\u062f \u0627\u0632 \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632 \u0628\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0631\u0627\u0628\u0637\u0647 \u0627\u06cc\u0646 \u0633\u0647 \u0645\u0641\u0647\u0648\u0645 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0627\u06cc\u0646 \u0634\u06a9\u0644\u06cc\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 App Link \u06cc\u06a9 Web Link \u0648 Deep Link\u0640\u0647\u060c \u0627\u0645\u0627 \u0647\u0631 Deep Link \u0627\u0644\u0632\u0627\u0645\u0627\u064b Web Link \u0646\u06cc\u0633\u062a \u0648 \u0647\u0631 Web Link \u0647\u0645 \u0627\u0644\u0632\u0627\u0645\u0627\u064b App Link \u062a\u0623\u06cc\u06cc\u062f\u0634\u062f\u0647 \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0637\u0631\u0627\u062d\u06cc URL \u0642\u0628\u0644 \u0627\u0632 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 Deep Link \u0627\u0635\u0644\u0627\u064b \u062f\u0627\u062e\u0644 Android Studio \u0627\u0646\u062c\u0627\u0645 \u0646\u0645\u06cc\u0634\u0647. \u0642\u0628\u0644 \u0627\u0632 \u0646\u0648\u0634\u062a\u0646 Manifest \u06cc\u0627 Navigation \u0628\u0627\u06cc\u062f \u0633\u0627\u062e\u062a\u0627\u0631 URL\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0637\u0631\u0627\u062d\u06cc \u0628\u06a9\u0646\u06cc. URL \u0628\u062e\u0634\u06cc \u0627\u0632 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0628\u0644\u0646\u062f\u0645\u062f\u062a \u0645\u062d\u0635\u0648\u0644\u0647. \u0645\u0645\u06a9\u0646\u0647 \u062f\u0627\u062e\u0644 \u067e\u06cc\u0627\u0645\u06a9\u060c \u0627\u06cc\u0645\u06cc\u0644\u060c \u0646\u062a\u0627\u06cc\u062c \u06af\u0648\u06af\u0644\u060c \u0634\u0628\u06a9\u0647\u200c\u0647\u0627\u06cc \u0627\u062c\u062a\u0645\u0627\u0639\u06cc \u0648 Notification\u0647\u0627 \u0645\u0646\u062a\u0634\u0631 \u0628\u0634\u0647 \u0648 \u062a\u0627 \u0633\u0627\u0644\u200c\u0647\u0627 \u0628\u0639\u062f \u0647\u0645 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0648\u06cc \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0627\u0648\u0646 \u06a9\u0644\u06cc\u06a9 \u0628\u06a9\u0646\u0646. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0628\u0627\u06cc\u062f \u0645\u062b\u0644 \u06cc\u06a9 Route \u0645\u0648\u0642\u062a \u062f\u0627\u062e\u0644\u06cc \u0628\u0627\u0647\u0627\u0634 \u0628\u0631\u062e\u0648\u0631\u062f \u0628\u06a9\u0646\u06cc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc\u0645 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u0634\u0628\u06cc\u0647 \u0627\u06cc\u0646 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>https:\/\/priceban.com\/products\/842\nhttps:\/\/priceban.com\/businesses\/51\nhttps:\/\/priceban.com\/alerts\/179\nhttps:\/\/priceban.com\/search?q=headphone\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">https:<\/span><span style=\"color: #6A737D\">\/\/priceban.com\/products\/842<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">https:<\/span><span style=\"color: #6A737D\">\/\/priceban.com\/businesses\/51<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">https:<\/span><span style=\"color: #6A737D\">\/\/priceban.com\/alerts\/179<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">https:<\/span><span style=\"color: #6A737D\">\/\/priceban.com\/search?q=headphone<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 URL\u0647\u0627 \u0647\u0645 \u0628\u0631\u0627\u06cc \u0627\u0646\u0633\u0627\u0646 \u0642\u0627\u0628\u0644\u200c\u0641\u0647\u0645 \u0647\u0633\u062a\u0646\u060c \u0647\u0645 \u0645\u06cc\u0634\u0647 \u0631\u0648\u06cc \u0648\u0628 \u0628\u0631\u0627\u0634\u0648\u0646 \u0635\u0641\u062d\u0647 \u0633\u0627\u062e\u062a \u0648 \u0647\u0645 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0645\u0642\u0635\u062f \u0645\u0646\u0627\u0633\u0628 \u062a\u0628\u062f\u06cc\u0644\u0634\u0648\u0646 \u06a9\u0631\u062f. \u0628\u0647\u062a\u0631\u0647 URL \u0631\u0648 \u0628\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0641\u0639\u0644\u06cc \u06a9\u0644\u0627\u0633\u200c\u0647\u0627 \u06cc\u0627 \u0646\u0627\u0645 Screen\u0647\u0627 \u06af\u0631\u0647 \u0646\u0632\u0646\u06cc. \u0634\u0627\u06cc\u062f \u0627\u0645\u0631\u0648\u0632 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u062f\u0631 \u06a9\u062f <code>ProductDetailScreen<\/code> \u0646\u0627\u0645 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0641\u0631\u062f\u0627 \u0627\u0633\u0645\u0634 \u0639\u0648\u0636 \u0628\u0634\u0647\u060c \u0627\u0645\u0627 URL \u0639\u0645\u0648\u0645\u06cc \u0646\u0628\u0627\u06cc\u062f \u0628\u0627 \u0647\u0631 Refactor \u062a\u063a\u06cc\u06cc\u0631 \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u0634\u0646\u0627\u0633\u0647\u200c\u0647\u0627\u06cc\u06cc \u062f\u0627\u062e\u0644 URL \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0646 \u06a9\u0647 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0628\u0627\u0634\u0646. \u0645\u062b\u0644\u0627\u064b \u0634\u0645\u0627\u0631\u0647 \u0631\u062f\u06cc\u0641 \u0645\u0648\u0642\u062a\u06cc \u06cc\u0627 Index \u06cc\u06a9 List \u06af\u0632\u06cc\u0646\u0647 \u062e\u0648\u0628\u06cc \u0646\u06cc\u0633\u062a. \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u06cc\u062f \u062f\u0631 Backend \u067e\u0627\u06cc\u062f\u0627\u0631 \u0628\u0645\u0648\u0646\u0647 \u0648 \u062d\u062a\u06cc \u0628\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0639\u0646\u0648\u0627\u0646 \u06cc\u0627 \u062f\u0633\u062a\u0647 \u0645\u062d\u0635\u0648\u0644 \u0639\u0648\u0636 \u0646\u0634\u0647. \u0628\u0639\u0636\u06cc \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627 \u0627\u0632 Slug \u062e\u0648\u0627\u0646\u0627 \u0647\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;priceban.com\/products\/sony-wh-1000xm5\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Slug \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u0648 SEO \u0645\u0646\u0627\u0633\u0628\u0647\u060c \u0627\u0645\u0627 \u0627\u06af\u0647 \u0627\u062d\u062a\u0645\u0627\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0627\u0645 \u0645\u062d\u0635\u0648\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c \u0628\u0647\u062a\u0631\u0647 \u06cc\u06a9 ID \u067e\u0627\u06cc\u062f\u0627\u0631 \u0647\u0645 \u062f\u0631 \u0633\u0627\u062e\u062a\u0627\u0631 Backend \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc. \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u0645\u062d\u062a\u0648\u0627 \u0641\u0642\u0637 \u0628\u0647 \u06cc\u06a9 \u0645\u062a\u0646 \u0642\u0627\u0628\u0644\u200c\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0639\u0631\u06cc\u0641 Intent Filter \u062f\u0631 Manifest<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u062f\u0648\u0646\u0647 MainActivity \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u06a9\u0646\u0647\u060c \u0628\u0627\u06cc\u062f \u06cc\u06a9 <code>intent-filter<\/code> \u062f\u0627\u062e\u0644 Manifest \u062a\u0639\u0631\u06cc\u0641 \u0628\u0634\u0647. \u0646\u0645\u0648\u0646\u0647 \u0633\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc App Link \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;activity\n    android:name=\".MainActivity\"\n    android:exported=\"true\">\n\n    &lt;intent-filter android:autoVerify=\"true\">\n        &lt;action android:name=\"android.intent.action.VIEW\" \/>\n\n        &lt;category android:name=\"android.intent.category.DEFAULT\" \/>\n        &lt;category android:name=\"android.intent.category.BROWSABLE\" \/>\n\n        &lt;data\n            android:scheme=\"https\"\n            android:host=\"priceban.com\"\n            android:pathPrefix=\"\/products\" \/>\n    &lt;\/intent-filter>\n\n&lt;\/activity>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">activity<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;.MainActivity&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    android:<\/span><span style=\"color: #6F42C1\">exported<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;true&quot;<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">intent<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">filter android:<\/span><span style=\"color: #6F42C1\">autoVerify<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;true&quot;<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">action android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;android.intent.action.VIEW&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">\/&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">category android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;android.intent.category.DEFAULT&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">category android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;android.intent.category.BROWSABLE&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">\/&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">&lt;data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            android:<\/span><span style=\"color: #6F42C1\">scheme<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;https&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            android:<\/span><span style=\"color: #6F42C1\">host<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;priceban.com&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            android:<\/span><span style=\"color: #6F42C1\">pathPrefix<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;\/products&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">&lt;\/<\/span><span style=\"color: #24292E\">intent<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">filter<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">&lt;\/<\/span><span style=\"color: #24292E\">activity<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>VIEW<\/code> \u06cc\u0639\u0646\u06cc \u0627\u06cc\u0646 Activity \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc\u06cc \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647. <code>BROWSABLE<\/code> \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u0644\u06cc\u0646\u06a9 \u0627\u0632 \u0645\u062d\u06cc\u0637\u06cc \u062e\u0627\u0631\u062c \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u0645\u062b\u0644 \u0645\u0631\u0648\u0631\u06af\u0631 \u06cc\u0627 \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646\u060c \u0648\u0627\u0631\u062f Activity \u0628\u0634\u0647. <code>DEFAULT<\/code> \u0647\u0645 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 Intent \u0628\u062a\u0648\u0646\u0647 \u0628\u0647 \u0634\u06a9\u0644 \u0639\u0627\u062f\u06cc \u062a\u0648\u0633\u0637 \u0633\u06cc\u0633\u062a\u0645 Resolve \u0628\u0634\u0647. \u0628\u062e\u0634 <code>data<\/code> \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0686\u0647 URL\u0647\u0627\u06cc\u06cc \u0628\u0627 \u0627\u06cc\u0646 \u0641\u06cc\u0644\u062a\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u0646. \u0627\u06cc\u0646\u062c\u0627 \u0641\u0642\u0637 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 Scheme \u0627\u0648\u0646\u200c\u0647\u0627 <code>https<\/code>\u060c \u062f\u0627\u0645\u0646\u0647 \u0627\u0648\u0646\u200c\u0647\u0627 priceban<code>.com<\/code> \u0648 \u0645\u0633\u06cc\u0631\u0634\u0648\u0646 \u0628\u0627 <code>\/products<\/code> \u0634\u0631\u0648\u0639 \u0645\u06cc\u0634\u0647 \u0648\u0627\u0631\u062f \u0627\u06cc\u0646 Activity \u0645\u06cc\u0634\u0646. \u0633\u0627\u062e\u062a\u0627\u0631 \u0631\u0633\u0645\u06cc App Links \u0647\u0645 \u0628\u0631 \u067e\u0627\u06cc\u0647 \u0647\u0645\u06cc\u0646 Intent Filter \u0648 \u0648\u06cc\u0698\u06af\u06cc <code>android:autoVerify=\"true\"<\/code> \u0628\u0646\u0627 \u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u06cc\u0698\u06af\u06cc <code>autoVerify<\/code> \u0627\u0632 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 \u062f\u0627\u0645\u0646\u0647 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0628\u06a9\u0646\u0647. \u0635\u0631\u0641 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u06a9\u0627\u0641\u06cc \u0646\u06cc\u0633\u062a\u061b \u0628\u0627\u06cc\u062f \u0633\u0645\u062a \u0648\u0628\u200c\u0633\u0627\u06cc\u062a \u0647\u0645 \u0641\u0627\u06cc\u0644 \u062a\u0623\u06cc\u06cc\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0627\u06af\u0647 \u062a\u0623\u06cc\u06cc\u062f \u0645\u0648\u0641\u0642 \u0646\u0634\u0647\u060c \u0644\u06cc\u0646\u06a9 \u0645\u0645\u06a9\u0646\u0647 \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 Web Link \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0634\u0647\u060c \u0627\u0645\u0627 \u062a\u062c\u0631\u0628\u0647 \u0628\u0627\u0632 \u0634\u062f\u0646 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0648 \u0642\u0627\u0628\u0644\u200c\u0627\u0639\u062a\u0645\u0627\u062f App Link \u0631\u0648 \u0646\u062e\u0648\u0627\u0647\u06cc \u062f\u0627\u0634\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">assetlinks.json\u061b \u0627\u062b\u0628\u0627\u062a \u0645\u0627\u0644\u06a9\u06cc\u062a \u062f\u0627\u0645\u0646\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f App Link\u060c \u0628\u0627\u06cc\u062f \u0641\u0627\u06cc\u0644\u06cc \u0628\u0647 \u0627\u0633\u0645 <code>assetlinks.json<\/code> \u0631\u0648\u06cc \u062f\u0627\u0645\u0646\u0647 \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647. \u0645\u062d\u0644 \u0627\u0648\u0646 \u0628\u0627\u06cc\u062f \u062f\u0642\u06cc\u0642\u0627\u064b \u0627\u06cc\u0646 \u0645\u0633\u06cc\u0631 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;priceban.com\/.well-known\/assetlinks.json\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u06cc \u0628\u0627 Package Name \u0645\u0634\u062e\u0635 \u0648 \u0627\u0645\u0636\u0627\u06cc \u0645\u0634\u062e\u0635 \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u0631\u0647 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0627\u06cc\u0646 \u062f\u0627\u0645\u0646\u0647 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u06a9\u0646\u0647. \u0646\u0645\u0648\u0646\u0647 \u06a9\u0644\u06cc \u0641\u0627\u06cc\u0644 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>[\n  {\n    \"relation\": &#91;\n      \"delegate_permission\/common.handle_all_urls\"\n    &#93;,\n    \"target\": {\n      \"namespace\": \"android_app\",\n      \"package_name\": \"com.priceban.app\",\n      \"sha256_cert_fingerprints\": &#91;\n        \"AA:BB:CC:DD:EE:FF\"\n      &#93;\n    }\n  }\n]\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;relation&quot;<\/span><span style=\"color: #24292E\">: &#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #032F62\">&quot;delegate_permission\/common.handle_all_urls&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    &#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #032F62\">&quot;target&quot;<\/span><span style=\"color: #24292E\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #032F62\">&quot;namespace&quot;<\/span><span style=\"color: #24292E\">: <\/span><span style=\"color: #032F62\">&quot;android_app&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #032F62\">&quot;package_name&quot;<\/span><span style=\"color: #24292E\">: <\/span><span style=\"color: #032F62\">&quot;com.priceban.app&quot;<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #032F62\">&quot;sha256_cert_fingerprints&quot;<\/span><span style=\"color: #24292E\">: &#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #032F62\">&quot;AA:BB:CC:DD:EE:FF&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      &#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">]<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>package_name<\/code> \u0628\u0627\u06cc\u062f \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0627 Application ID \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u06a9\u06cc \u0628\u0627\u0634\u0647. <code>sha256_cert_fingerprints<\/code> \u0647\u0645 \u0627\u062b\u0631 \u0627\u0646\u06af\u0634\u062a Certificate\u06cc\u0647 \u06a9\u0647 \u0646\u0633\u062e\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0647\u0627\u0634 Sign \u0634\u062f\u0647. \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u0648\u0642\u0639 \u0646\u0635\u0628 \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0627\u06cc\u0644 \u0633\u0627\u06cc\u062a \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0622\u06cc\u0627 Package \u0648 \u0627\u0645\u0636\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0639\u0644\u0627\u0645\u200c\u0634\u062f\u0647 \u062f\u0631 \u062f\u0627\u0645\u0646\u0647 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u0646 \u06cc\u0627 \u0646\u0647. \u0627\u06af\u0647 \u0645\u0637\u0627\u0628\u0642\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0631\u062a\u0628\u0627\u0637 \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc\u0634\u0647 \u0648 \u0633\u06cc\u0633\u062a\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u062f\u0627\u0645\u0646\u0647 \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u067e\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9\u06cc \u0627\u0632 \u062e\u0637\u0627\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u062a\u0641\u0627\u0648\u062a \u0627\u0645\u0636\u0627\u06cc Debug \u0648 Release\u0640\u0647. \u0646\u0633\u062e\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0632 Android Studio \u0646\u0635\u0628 \u0645\u06cc\u200c\u06a9\u0646\u06cc \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627 Debug Certificate \u0627\u0645\u0636\u0627 \u0634\u062f\u0647\u060c \u0627\u0645\u0627 \u0646\u0633\u062e\u0647 Play Store \u0645\u0645\u06a9\u0646\u0647 \u0627\u0645\u0636\u0627\u06cc \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0627\u06af\u0647 \u0641\u0642\u0637 Fingerprint \u0646\u0633\u062e\u0647 Debug \u0631\u0648 \u062f\u0631 \u0641\u0627\u06cc\u0644 \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc\u060c \u0646\u0633\u062e\u0647 \u0645\u0646\u062a\u0634\u0631\u0634\u062f\u0647 \u062a\u0623\u06cc\u06cc\u062f \u0646\u0645\u06cc\u0634\u0647. \u0628\u0631\u0639\u06a9\u0633\u060c \u0627\u06af\u0647 \u0641\u0642\u0637 \u0627\u0645\u0636\u0627\u06cc Release \u062f\u0627\u062e\u0644 \u0641\u0627\u06cc\u0644 \u0628\u0627\u0634\u0647\u060c \u062a\u0633\u062a \u0645\u062d\u0644\u06cc \u0646\u0633\u062e\u0647 Debug \u0645\u0645\u06a9\u0646\u0647 \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u0647. \u0641\u0627\u06cc\u0644 <code>assetlinks.json<\/code> \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0686\u0646\u062f Fingerprint \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0645\u0627 \u0628\u0627\u06cc\u062f \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u062f\u0648\u0646\u06cc \u0647\u0631 \u0646\u0633\u062e\u0647 \u0628\u0627 \u0686\u0647 Certificate\u0627\u06cc \u0627\u0645\u0636\u0627 \u0634\u062f\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u06af\u0631\u0641\u062a\u0646 \u062f\u0627\u062f\u0647 Deep Link \u0627\u0632 Intent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0644\u06cc\u0646\u06a9 \u0628\u0627\u0639\u062b \u0628\u0627\u0632 \u0634\u062f\u0646 Activity \u0645\u06cc\u0634\u0647\u060c URI \u062f\u0627\u062e\u0644 <code>Intent.data<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u062f\u0631 \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u06cc\u0646 \u062d\u0627\u0644\u062a \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0627\u0648\u0646 \u0631\u0648 \u062f\u0627\u062e\u0644 Activity \u0628\u062e\u0648\u0646\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class MainActivity : ComponentActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        val deepLinkUri = intent?.data\n\n        setContent {\n            PriceBanApp(\n                initialDeepLink = deepLinkUri\n            )\n        }\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">MainActivity<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">ComponentActivity<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onCreate<\/span><span style=\"color: #24292E\">(savedInstanceState: <\/span><span style=\"color: #6F42C1\">Bundle<\/span><span style=\"color: #24292E\">?) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #005CC5\">super<\/span><span style=\"color: #24292E\">.<\/span><span style=\"color: #6F42C1\">onCreate<\/span><span style=\"color: #24292E\">(savedInstanceState)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> deepLinkUri <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> intent?.<\/span><span style=\"color: #D73A49\">data<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">setContent<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #6F42C1\">PriceBanApp<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                initialDeepLink <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> deepLinkUri<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u0644\u06cc\u0646\u06a9 \u0632\u06cc\u0631 \u0628\u0627\u0632 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;priceban.com\/products\/842\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0642\u062f\u0627\u0631 <code>deepLinkUri<\/code> \u06cc\u06a9 <code>Uri<\/code> \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u0634 \u0631\u0648 \u0628\u062e\u0648\u0646\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val host = deepLinkUri?.host\nval pathSegments = deepLinkUri?.pathSegments\n\nval section = pathSegments?.getOrNull(0)\nval productId = pathSegments?.getOrNull(1)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> host <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> deepLinkUri?.host<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> pathSegments <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> deepLinkUri?.pathSegments<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> section <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> pathSegments?.<\/span><span style=\"color: #6F42C1\">getOrNull<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> productId <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> pathSegments?.<\/span><span style=\"color: #6F42C1\">getOrNull<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0645\u0642\u062f\u0627\u0631 <code>section<\/code> \u0628\u0631\u0627\u0628\u0631 <code>products<\/code> \u0648 \u0645\u0642\u062f\u0627\u0631 <code>productId<\/code> \u0628\u0631\u0627\u0628\u0631 <code>842<\/code> \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u062f\u0631 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0648\u0627\u0642\u0639\u06cc \u0628\u0647\u062a\u0631\u0647 \u0627\u06cc\u0646 Parsing \u0645\u0633\u062a\u0642\u06cc\u0645 \u062f\u0627\u062e\u0644 Activity \u067e\u062e\u0634 \u0646\u0634\u0647. Activity \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0647\u0631 \u0646\u0648\u0639 \u0644\u06cc\u0646\u06a9 \u0686\u0646\u062f\u06cc\u0646 <code>if<\/code> \u0648 <code>when<\/code> \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 \u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u0645\u0633\u062a\u0642\u0644 Deep Link \u0631\u0648 \u0628\u0647 \u06cc\u06a9 \u0645\u0642\u0635\u062f \u062f\u0627\u062e\u0644\u06cc \u0642\u0627\u0628\u0644\u200c\u0641\u0647\u0645 \u062a\u0628\u062f\u06cc\u0644 \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sealed interface DeepLinkDestination {\n\n    data class Product(\n        val productId: Long\n    ) : DeepLinkDestination\n\n    data class Business(\n        val businessId: Long\n    ) : DeepLinkDestination\n\n    data class Search(\n        val query: String\n    ) : DeepLinkDestination\n\n    data object Unsupported : DeepLinkDestination\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">sealed<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">interface<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">DeepLinkDestination<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Product<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> productId: <\/span><span style=\"color: #6F42C1\">Long<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) : <\/span><span style=\"color: #6F42C1\">DeepLinkDestination<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Business<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> businessId: <\/span><span style=\"color: #6F42C1\">Long<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) : <\/span><span style=\"color: #6F42C1\">DeepLinkDestination<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Search<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> query: <\/span><span style=\"color: #6F42C1\">String<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) : <\/span><span style=\"color: #6F42C1\">DeepLinkDestination<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">object<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Unsupported<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">DeepLinkDestination<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u06cc\u06a9 Parser \u0645\u0633\u0626\u0648\u0644 \u062a\u0628\u062f\u06cc\u0644 URI \u0628\u0647 \u0627\u06cc\u0646 \u0645\u062f\u0644\u200c\u0647\u0627 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>fun parseDeepLink(uri: Uri): DeepLinkDestination {\n    val segments = uri.pathSegments\n\n    return when (segments.firstOrNull()) {\n        \"products\" -> {\n            val id = segments.getOrNull(1)?.toLongOrNull()\n\n            if (id != null) {\n                DeepLinkDestination.Product(id)\n            } else {\n                DeepLinkDestination.Unsupported\n            }\n        }\n\n        \"businesses\" -> {\n            val id = segments.getOrNull(1)?.toLongOrNull()\n\n            if (id != null) {\n                DeepLinkDestination.Business(id)\n            } else {\n                DeepLinkDestination.Unsupported\n            }\n        }\n\n        \"search\" -> {\n            val query = uri.getQueryParameter(\"q\")\n\n            if (!query.isNullOrBlank()) {\n                DeepLinkDestination.Search(query)\n            } else {\n                DeepLinkDestination.Unsupported\n            }\n        }\n\n        else -> DeepLinkDestination.Unsupported\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">parseDeepLink<\/span><span style=\"color: #24292E\">(uri: <\/span><span style=\"color: #6F42C1\">Uri<\/span><span style=\"color: #24292E\">): <\/span><span style=\"color: #6F42C1\">DeepLinkDestination<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> segments <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> uri.pathSegments<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">when<\/span><span style=\"color: #24292E\"> (segments.<\/span><span style=\"color: #6F42C1\">firstOrNull<\/span><span style=\"color: #24292E\">()) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #032F62\">&quot;products&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> id <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> segments.<\/span><span style=\"color: #6F42C1\">getOrNull<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">)?.<\/span><span style=\"color: #6F42C1\">toLongOrNull<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (id <\/span><span style=\"color: #D73A49\">!=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                DeepLinkDestination.<\/span><span style=\"color: #6F42C1\">Product<\/span><span style=\"color: #24292E\">(id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            } <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                DeepLinkDestination.Unsupported<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #032F62\">&quot;businesses&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> id <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> segments.<\/span><span style=\"color: #6F42C1\">getOrNull<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">)?.<\/span><span style=\"color: #6F42C1\">toLongOrNull<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (id <\/span><span style=\"color: #D73A49\">!=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                DeepLinkDestination.<\/span><span style=\"color: #6F42C1\">Business<\/span><span style=\"color: #24292E\">(id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            } <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                DeepLinkDestination.Unsupported<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #032F62\">&quot;search&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> query <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> uri.<\/span><span style=\"color: #6F42C1\">getQueryParameter<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;q&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #D73A49\">!<\/span><span style=\"color: #24292E\">query.<\/span><span style=\"color: #6F42C1\">isNullOrBlank<\/span><span style=\"color: #24292E\">()) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                DeepLinkDestination.<\/span><span style=\"color: #6F42C1\">Search<\/span><span style=\"color: #24292E\">(query)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            } <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">                DeepLinkDestination.Unsupported<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">-&gt;<\/span><span style=\"color: #24292E\"> DeepLinkDestination.Unsupported<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0632\u06cc\u062a \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Navigation \u0628\u0627 URL \u062e\u0627\u0645 \u06a9\u0627\u0631 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647. URI \u0627\u0628\u062a\u062f\u0627 \u0648\u0627\u0631\u062f \u06cc\u06a9 \u0645\u0631\u0632 \u0645\u0634\u062e\u0635 \u0645\u06cc\u0634\u0647\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0645\u06cc\u0634\u0647 \u0648 \u0628\u0639\u062f \u0628\u0647 \u0645\u062f\u0644 \u062f\u0627\u062e\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0647\u0645 \u0627\u0645\u0646\u06cc\u062a \u0631\u0648 \u0628\u0647\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0647\u0645 \u062a\u0633\u062a\u200c\u067e\u0630\u06cc\u0631\u06cc \u0631\u0648 \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0628\u0631\u0647 \u0648 \u0647\u0645 \u0627\u062c\u0627\u0632\u0647 \u0646\u0645\u06cc\u062f\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a URL \u062f\u0631 \u062a\u0645\u0627\u0645 Screen\u0647\u0627 \u067e\u062e\u0634 \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deep Link \u062f\u0631 Navigation Compose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Navigation Compose \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 Deep Link \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0631\u0627\u06cc \u06cc\u06a9 Destination \u062a\u0639\u0631\u06cc\u0641 \u0628\u06a9\u0646\u06cc. \u062f\u0631 \u0645\u062f\u0644 Type-safe \u062c\u062f\u06cc\u062f\u062a\u0631 \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0645\u0642\u0635\u062f \u0631\u0648 \u0628\u0627 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 Serializable \u062a\u0639\u0631\u06cc\u0641 \u0628\u06a9\u0646\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@Serializable\ndata class ProductDetail(\n    val productId: Long\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">@Serializable<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">ProductDetail<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> productId: <\/span><span style=\"color: #6F42C1\">Long<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u062f\u0627\u062e\u0644 <code>NavHost<\/code> \u0645\u0642\u0635\u062f \u0631\u0648 \u0647\u0645\u0631\u0627\u0647 \u0628\u0627 Deep Link \u0645\u0639\u0631\u0641\u06cc \u0628\u06a9\u0646\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composable&lt;ProductDetail>(\n    deepLinks = listOf(\n        navDeepLink&lt;ProductDetail>(\n            basePath = \"https:\/\/priceban.com\/products\"\n        )\n    )\n) { backStackEntry ->\n\n    val destination = backStackEntry.toRoute&lt;ProductDetail>()\n\n    ProductDetailScreen(\n        productId = destination.productId\n    )\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">composable<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductDetail<\/span><span style=\"color: #24292E\">&gt;(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    deepLinks <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">listOf<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">navDeepLink<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductDetail<\/span><span style=\"color: #24292E\">&gt;(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            basePath <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;https:\/\/priceban.com\/products&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) { backStackEntry <\/span><span style=\"color: #D73A49\">-&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> destination <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> backStackEntry.<\/span><span style=\"color: #6F42C1\">toRoute<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">ProductDetail<\/span><span style=\"color: #24292E\">&gt;()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">ProductDetailScreen<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        productId <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> destination.productId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u062f\u0647 \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u0644\u06af\u0648\u06cc URL \u0628\u0627 \u0645\u0642\u0635\u062f Navigation \u0645\u0631\u062a\u0628\u0637 \u0645\u06cc\u0634\u0647 \u0648 \u0648\u0642\u062a\u06cc Intent \u0645\u0646\u0627\u0633\u0628 \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u062f\u060c Navigation \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Argument\u0647\u0627 \u0631\u0648 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0628\u06a9\u0646\u0647 \u0648 Destination \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0648 \u0628\u0627\u0632 \u0628\u06a9\u0646\u0647. \u0645\u0633\u062a\u0646\u062f\u0627\u062a Navigation Compose \u0647\u0645 Deep Link\u0647\u0627\u06cc implicit \u0631\u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062a\u0639\u0631\u06cc\u0641 <code>deepLinks<\/code> \u0631\u0648\u06cc \u0645\u0642\u0635\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0646. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0644\u06cc\u0646\u06a9 \u0627\u0632 \u0628\u06cc\u0631\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0627\u0631\u062f \u0628\u0634\u0647\u060c \u0647\u0645\u0686\u0646\u0627\u0646 Intent Filter \u062f\u0631 Manifest \u0644\u0627\u0632\u0645\u0647\u061b \u062a\u0639\u0631\u06cc\u0641 Deep Link \u062f\u0627\u062e\u0644 NavHost \u0628\u0647 \u062a\u0646\u0647\u0627\u06cc\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062f\u0631 \u0633\u0637\u062d \u0633\u06cc\u0633\u062a\u0645 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 Handler \u0644\u06cc\u0646\u06a9 \u062b\u0628\u062a \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0628\u0639\u0636\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627 \u062a\u06cc\u0645 \u062a\u0631\u062c\u06cc\u062d \u0645\u06cc\u062f\u0647 Intent \u0631\u0648 \u062e\u0648\u062f\u0634 Parse \u0628\u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f Navigation \u0631\u0648 \u062f\u0633\u062a\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u06a9\u0646\u062a\u0631\u0644 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0648\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a\u060c Analytics\u060c Migration \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627 \u0645\u06cc\u062f\u0647. \u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u0633\u0627\u062f\u0647\u060c \u0627\u062a\u0635\u0627\u0644 \u0645\u0633\u062a\u0642\u06cc\u0645 Deep Link \u0628\u0647 Destination \u0631\u0627\u062d\u062a\u200c\u062a\u0631\u0647. \u0647\u06cc\u0686\u200c\u06a9\u062f\u0648\u0645 \u0630\u0627\u062a\u0627\u064b \u0647\u0645\u06cc\u0634\u0647 \u0628\u0647\u062a\u0631 \u0646\u06cc\u0633\u062a\u0646\u061b \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0647 \u0645\u06cc\u0632\u0627\u0646 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc Flow \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cold Start \u0648 Warm Start<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Deep Link \u0647\u0645\u06cc\u0634\u0647 \u062f\u0631 \u06cc\u06a9 \u0648\u0636\u0639\u06cc\u062a \u06cc\u06a9\u0633\u0627\u0646 \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u06cc\u0634\u0647. \u06af\u0627\u0647\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0633\u062a\u0647 \u0627\u0633\u062a \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u06a9\u0644\u06cc\u06a9 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0627\u0648\u0646 \u0631\u0648 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0647 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0645\u0639\u0645\u0648\u0644\u0627\u064b Cold Start \u0645\u06cc\u06af\u06cc\u0645. \u062f\u0631 \u0627\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a Activity \u0627\u0632 \u0627\u0648\u0644 \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647\u060c Dependency\u0647\u0627 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u06cc\u0634\u0646\u060c \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0622\u0645\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647\u060c Session \u06a9\u0627\u0631\u0628\u0631 \u062e\u0648\u0627\u0646\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0628\u0639\u062f \u0628\u0627\u06cc\u062f \u0645\u0642\u0635\u062f Deep Link \u0628\u0627\u0632 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u062a \u062f\u0648\u0645 \u0632\u0645\u0627\u0646\u06cc\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u0642\u0628\u0644 \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u06cc\u0627 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0628\u0627\u0632\u0647. \u062d\u0627\u0644\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 Notification \u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u06cc\u06af\u0647 \u0631\u0648\u06cc \u06cc\u06a9 \u0644\u06cc\u0646\u06a9 \u0645\u06cc\u200c\u0632\u0646\u0647 \u0648 \u0647\u0645\u0648\u0646 Activity \u062f\u0648\u0628\u0627\u0631\u0647 Intent \u062a\u0627\u0632\u0647\u200c\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0633\u062a\u0647 \u0628\u0647 <code>launchMode<\/code> \u0648 \u0648\u0636\u0639\u06cc\u062a Task\u060c \u0645\u0645\u06a9\u0646\u0647 Activity \u062c\u062f\u06cc\u062f \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647 \u06cc\u0627 Intent \u0627\u0632 \u0637\u0631\u06cc\u0642 <code>onNewIntent()<\/code> \u0628\u0647 Activity \u0645\u0648\u062c\u0648\u062f \u0628\u0631\u0633\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u062e\u06cc\u0644\u06cc \u0645\u0647\u0645\u0647\u060c \u0686\u0648\u0646 \u0627\u06af\u0647 \u0641\u0642\u0637 <code>intent.data<\/code> \u0631\u0648 \u062f\u0627\u062e\u0644 <code>onCreate()<\/code> \u0628\u062e\u0648\u0646\u06cc\u060c \u0634\u0627\u06cc\u062f Deep Link \u062f\u0631 Cold Start \u062f\u0631\u0633\u062a \u06a9\u0627\u0631 \u0628\u06a9\u0646\u0647 \u0648\u0644\u06cc \u062f\u0631 \u062d\u0627\u0644\u062a\u06cc \u06a9\u0647 Activity \u0627\u0632 \u0642\u0628\u0644 \u0628\u0627\u0632\u0647\u060c Intent \u062c\u062f\u06cc\u062f \u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647. \u0648\u0642\u062a\u06cc \u0627\u0632 Navigation \u0628\u0627 launch mode \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u060c \u0628\u062e\u0634 \u0632\u06cc\u0627\u062f\u06cc \u0627\u0632 \u0645\u062f\u06cc\u0631\u06cc\u062a Deep Link \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647. \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u062a\u0627 \u062c\u0627\u06cc \u0645\u0645\u06a9\u0646 <code>launchMode=\"standard\"<\/code> \u062d\u0641\u0638 \u0628\u0634\u0647. \u0627\u06af\u0647 \u0627\u0632 \u062d\u0627\u0644\u062a\u06cc \u0645\u062b\u0644 <code>singleTop<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06a9\u0646\u06cc \u0648 Activity \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647\u060c \u0628\u0627\u06cc\u062f Intent \u062a\u0627\u0632\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 <code>onNewIntent()<\/code> \u0628\u0647 Navigation \u062a\u062d\u0648\u06cc\u0644 \u0628\u062f\u06cc. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0645\u0648\u0646\u0647 \u0633\u0627\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>override fun onNewIntent(intent: Intent) {\n    super.onNewIntent(intent)\n\n    setIntent(intent)\n    navController.handleDeepLink(intent)\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onNewIntent<\/span><span style=\"color: #24292E\">(intent: <\/span><span style=\"color: #6F42C1\">Intent<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #005CC5\">super<\/span><span style=\"color: #24292E\">.<\/span><span style=\"color: #6F42C1\">onNewIntent<\/span><span style=\"color: #24292E\">(intent)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">setIntent<\/span><span style=\"color: #24292E\">(intent)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    navController.<\/span><span style=\"color: #6F42C1\">handleDeepLink<\/span><span style=\"color: #24292E\">(intent)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0628\u062a\u0647 \u0645\u062d\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc <code>navController<\/code> \u062f\u0631 Compose \u0628\u0627\u06cc\u062f \u0628\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0627\u0634\u0647 \u0648 \u0646\u0628\u0627\u06cc\u062f \u0635\u0631\u0641\u0627\u064b \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc Activity \u06cc\u06a9 Reference \u0646\u0627\u0645\u0637\u0645\u0626\u0646 \u0628\u0633\u0627\u0632\u06cc. \u0646\u06a9\u062a\u0647 \u0645\u0641\u0647\u0648\u0645\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0647\u0631 Deep Link \u06cc\u06a9 Event \u062c\u062f\u06cc\u062f\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0647\u0645 Intent \u0627\u0648\u0644\u06cc\u0647 \u0648 \u0647\u0645 Intent\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deep Link \u0648 \u0648\u0636\u0639\u06cc\u062a \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0644\u06cc\u0646\u06a9 \u0632\u06cc\u0631 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>https:\/\/priceban.com\/alerts\/179\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">https:<\/span><span style=\"color: #6A737D\">\/\/priceban.com\/alerts\/179<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0635\u0641\u062d\u0647 \u0647\u0634\u062f\u0627\u0631 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f\u0634\u062f\u0647 \u0642\u0627\u0628\u0644\u200c\u0646\u0645\u0627\u06cc\u0634\u0647. \u0627\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 Login \u0646\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0646\u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645 \u0635\u0641\u062d\u0647 \u0647\u0634\u062f\u0627\u0631 \u0628\u0627\u0632 \u0628\u0634\u0647 \u0648 \u0646\u0628\u0627\u06cc\u062f \u0647\u0645 \u0645\u0642\u0635\u062f \u0644\u06cc\u0646\u06a9 \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0634\u0647 \u0627\u0632 \u062f\u0633\u062a \u0628\u0631\u0647. Flow \u062f\u0631\u0633\u062a \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0642\u0635\u062f \u0645\u0648\u0631\u062f\u0646\u0638\u0631 \u0631\u0648 \u0645\u0648\u0642\u062a\u0627\u064b \u0646\u06af\u0647 \u062f\u0627\u0631\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0648\u0627\u0631\u062f \u0641\u0631\u0622\u06cc\u0646\u062f Login \u0628\u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0645\u0648\u0641\u0642\u060c \u0647\u0645\u0648\u0646 \u0645\u0642\u0635\u062f \u0627\u0635\u0644\u06cc \u0631\u0648 \u0628\u0627\u0632 \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0645\u0641\u0647\u0648\u0645 \u0631\u0648 \u0645\u06cc\u0634\u0647 Pending Destination \u06cc\u0627 Deferred Navigation \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a. Deep Link \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u06af\u0647 \u0645\u0642\u0635\u062f \u0646\u0647\u0627\u06cc\u06cc \u06a9\u062c\u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0642\u0628\u0644 \u0627\u0632 \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 \u0627\u0648\u0646 \u0645\u0642\u0635\u062f \u0686\u0646\u062f \u0634\u0631\u0637 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0628\u06a9\u0646\u0647. \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a\u060c \u062a\u06a9\u0645\u06cc\u0644 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644\u060c \u067e\u0630\u06cc\u0631\u0634 \u0642\u0648\u0627\u0646\u06cc\u0646 \u062c\u062f\u06cc\u062f \u06cc\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0641\u0639\u0627\u0644 \u0646\u0645\u0648\u0646\u0647\u200c\u0647\u0627\u06cc\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0634\u0631\u0637\u200c\u0647\u0627 \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0639\u0645\u0627\u0631\u06cc \u0646\u0627\u0645\u0646\u0627\u0633\u0628 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Screen \u0645\u0642\u0635\u062f \u062e\u0648\u062f\u0634 \u0646\u0627\u06af\u0647\u0627\u0646 \u062a\u0634\u062e\u06cc\u0635 \u0628\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 Login \u0646\u06cc\u0633\u062a \u0648 \u0645\u0633\u062a\u0642\u06cc\u0645 <code>navigate(\"login\")<\/code> \u0628\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f Navigation \u0631\u0648 \u067e\u0631\u0627\u06a9\u0646\u062f\u0647 \u0648 \u063a\u06cc\u0631\u0642\u0627\u0628\u0644\u200c\u067e\u06cc\u0634\u200c\u0628\u06cc\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0647\u062a\u0631\u0647 \u06cc\u06a9 Coordinator \u06cc\u0627 \u0644\u0627\u06cc\u0647 \u0645\u0631\u06a9\u0632\u06cc \u0648\u0631\u0648\u062f Deep Link \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0628\u06a9\u0646\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sealed interface DeepLinkResolution {\n\n    data class Open(\n        val destination: DeepLinkDestination\n    ) : DeepLinkResolution\n\n    data class RequireLogin(\n        val pendingDestination: DeepLinkDestination\n    ) : DeepLinkResolution\n\n    data object Invalid : DeepLinkResolution\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">sealed<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">interface<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">DeepLinkResolution<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Open<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> destination: <\/span><span style=\"color: #6F42C1\">DeepLinkDestination<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) : <\/span><span style=\"color: #6F42C1\">DeepLinkResolution<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">RequireLogin<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> pendingDestination: <\/span><span style=\"color: #6F42C1\">DeepLinkDestination<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) : <\/span><span style=\"color: #6F42C1\">DeepLinkResolution<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">data<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">object<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Invalid<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">DeepLinkResolution<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 Login\u060c \u0645\u0642\u0635\u062f \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0645\u0635\u0631\u0641 \u0645\u06cc\u0634\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u062c\u0627\u06cc Home \u0628\u0647 \u0647\u0645\u0648\u0646 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u0645\u06cc\u0631\u0647 \u06a9\u0647 \u0627\u0632 \u0627\u0648\u0644 \u0642\u0635\u062f \u062f\u06cc\u062f\u0646\u0634 \u0631\u0648 \u062f\u0627\u0634\u062a\u0647. \u0627\u06cc\u0646 \u062c\u0632\u0626\u06cc\u0627\u062a \u0634\u0627\u06cc\u062f \u06a9\u0648\u0686\u06a9 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u0647\u060c \u0648\u0644\u06cc \u062a\u0641\u0627\u0648\u062a \u06cc\u06a9 Deep Link \u0648\u0627\u0642\u0639\u06cc \u0628\u0627 \u06cc\u06a9 \u0644\u06cc\u0646\u06a9 \u0646\u0635\u0641\u0647\u200c\u06a9\u0627\u0631\u0647 \u0647\u0645\u06cc\u0646\u200c\u062c\u0627\u0633\u062a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Back Stack \u0628\u0639\u062f \u0627\u0632 Deep Link<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u062a\u0644\u06af\u0631\u0627\u0645 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0648\u0627\u0631\u062f \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644 \u0634\u062f\u0647. \u062d\u0627\u0644\u0627 \u062f\u06a9\u0645\u0647 Back \u0631\u0648 \u0645\u06cc\u200c\u0632\u0646\u0647. \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0628\u0627\u06cc\u062f \u0628\u06cc\u0641\u062a\u0647\u061f \u0622\u06cc\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 \u062a\u0644\u06af\u0631\u0627\u0645 \u0628\u0631\u06af\u0631\u062f\u0647 \u06cc\u0627 \u062f\u0627\u062e\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0647 \u0635\u0641\u062d\u0647 \u0644\u06cc\u0633\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0631\u0633\u0647\u061f \u062c\u0648\u0627\u0628 \u0647\u0645\u06cc\u0634\u0647 \u06cc\u06a9\u0633\u0627\u0646 \u0646\u06cc\u0633\u062a \u0648 \u0628\u0647 \u0646\u0648\u0639 Deep Link \u0648 \u0637\u0631\u0627\u062d\u06cc \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0628\u06cc\u0631\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0627\u0631\u062f \u06cc\u06a9 \u0645\u0642\u0635\u062f \u0634\u062f\u0647\u060c \u0631\u0641\u062a\u0627\u0631 \u0637\u0628\u06cc\u0639\u06cc Back \u062f\u0631 \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0642\u0628\u0644\u06cc \u0628\u0631\u06af\u0631\u062f\u0647. \u0686\u0648\u0646 \u062f\u0631 \u0648\u0627\u0642\u0639 \u0645\u0633\u06cc\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u0646 \u0628\u0648\u062f\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0644\u06af\u0631\u0627\u0645 \u2190 \u0644\u06cc\u0646\u06a9 \u0645\u062d\u0635\u0648\u0644 \u2190 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0686\u0646\u062f \u0635\u0641\u062d\u0647 \u0633\u0627\u062e\u062a\u06af\u06cc \u062f\u0627\u062e\u0644 Back Stack \u0645\u0645\u06a9\u0646\u0647 \u0628\u0627\u0639\u062b \u0628\u0634\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062d\u0633 \u0628\u06a9\u0646\u0647 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u06af\u06cc\u0631 \u0627\u0641\u062a\u0627\u062f\u0647. \u0627\u0645\u0627 \u062f\u0631 \u0628\u0639\u0636\u06cc Flow\u0647\u0627 \u0645\u0646\u0637\u0642\u06cc\u0647 \u06cc\u06a9 \u0633\u0644\u0633\u0644\u0647\u200c\u0645\u0631\u0627\u062a\u0628 \u062f\u0627\u062e\u0644\u06cc \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u0648\u0642\u062a\u06cc Notification \u062f\u0627\u062e\u0644\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0635\u0641\u062d\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0633\u0641\u0627\u0631\u0634 \u0631\u0648 \u0628\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0634\u0627\u06cc\u062f Back \u0628\u0627\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0628\u0647 \u0644\u06cc\u0633\u062a \u0633\u0641\u0627\u0631\u0634\u200c\u0647\u0627 \u0648 \u0628\u0639\u062f Home \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Navigation \u0628\u0631\u0627\u06cc Explicit Deep Link \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 Back Stack \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0633\u0627\u062e\u062a\u0627\u0631 Navigation Graph \u0628\u0633\u0627\u0632\u0647. \u0637\u0628\u0642 \u0645\u0633\u062a\u0646\u062f\u0627\u062a\u060c \u0648\u0642\u062a\u06cc \u06cc\u06a9 Explicit Deep Link \u0627\u0632 \u0637\u0631\u06cc\u0642 <code>PendingIntent<\/code> \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647\u060c \u0645\u0642\u0635\u062f\u0647\u0627\u06cc \u0634\u0631\u0648\u0639 Graph\u0647\u0627\u06cc \u0648\u0627\u0644\u062f \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0628\u0647 Back Stack \u0627\u0636\u0627\u0641\u0647 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Back Stack \u0631\u0648 \u0622\u06af\u0627\u0647\u0627\u0646\u0647 \u0637\u0631\u0627\u062d\u06cc \u0628\u06a9\u0646\u06cc. Deep Link \u0641\u0642\u0637 \u062f\u0631\u0628\u0627\u0631\u0647 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647 \u0646\u06cc\u0633\u062a\u061b \u062f\u0631\u0628\u0627\u0631\u0647 \u0645\u0633\u06cc\u0631\u06cc \u0647\u0645 \u0647\u0633\u062a \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f \u0627\u0632 \u0628\u0627\u0632 \u0634\u062f\u0646 \u0635\u0641\u062d\u0647 \u0637\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deep Link \u0627\u0632 Notification<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062f\u0631\u0633 Notification \u062f\u06cc\u062f\u06cc\u0645 \u06a9\u0647 \u0628\u0627 <code>PendingIntent<\/code> \u0645\u06cc\u0634\u0647 \u0645\u0634\u062e\u0635 \u06a9\u0631\u062f \u06a9\u0644\u06cc\u06a9 \u0631\u0648\u06cc \u0627\u0639\u0644\u0627\u0646 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u062a\u0645\u06cc\u0632 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Notification \u0628\u0647 \u062c\u0627\u06cc \u062f\u0627\u0646\u0633\u062a\u0646 Route \u062f\u0627\u062e\u0644\u06cc Navigation\u060c \u06cc\u06a9 Deep Link \u0645\u0639\u0646\u0627\u062f\u0627\u0631 \u0628\u0633\u0627\u0632\u0647. \u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val deepLinkIntent = Intent(\n    Intent.ACTION_VIEW,\n    Uri.parse(\"https:\/\/priceban.com\/products\/$productId\"),\n    context,\n    MainActivity::class.java\n)\n\nval pendingIntent = PendingIntent.getActivity(\n    context,\n    productId.toInt(),\n    deepLinkIntent,\n    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> deepLinkIntent <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">Intent<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    Intent.ACTION_VIEW,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    Uri.<\/span><span style=\"color: #6F42C1\">parse<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;https:\/\/priceban.com\/products\/<\/span><span style=\"color: #005CC5\">$productId<\/span><span style=\"color: #032F62\">&quot;<\/span><span style=\"color: #24292E\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    MainActivity::<\/span><span style=\"color: #6F42C1\">class<\/span><span style=\"color: #24292E\">.java<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> pendingIntent <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> PendingIntent.<\/span><span style=\"color: #6F42C1\">getActivity<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    productId.<\/span><span style=\"color: #6F42C1\">toInt<\/span><span style=\"color: #24292E\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    deepLinkIntent,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f PendingIntent \u0631\u0648\u06cc Notification \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val notification = NotificationCompat.Builder(\n    context,\n    PRICE_ALERTS_CHANNEL_ID\n)\n    .setSmallIcon(R.drawable.ic_notification)\n    .setContentTitle(\"\u0642\u06cc\u0645\u062a \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\")\n    .setContentText(\"\u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 \u0642\u06cc\u0645\u062a \u062c\u062f\u06cc\u062f \u0644\u0645\u0633 \u06a9\u0646\")\n    .setContentIntent(pendingIntent)\n    .setAutoCancel(true)\n    .build()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> notification <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> NotificationCompat.<\/span><span style=\"color: #6F42C1\">Builder<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    PRICE_ALERTS_CHANNEL_ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setSmallIcon<\/span><span style=\"color: #24292E\">(R.drawable.ic_notification)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setContentTitle<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0642\u06cc\u0645\u062a \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setContentText<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 \u0642\u06cc\u0645\u062a \u062c\u062f\u06cc\u062f \u0644\u0645\u0633 \u06a9\u0646&quot;<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setContentIntent<\/span><span style=\"color: #24292E\">(pendingIntent)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">setAutoCancel<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">true<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">build<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0632\u06cc\u062a \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062a\u0645\u0627\u0645 \u0648\u0631\u0648\u062f\u06cc\u200c\u0647\u0627 \u06cc\u06a9 \u0632\u0628\u0627\u0646 \u0645\u0634\u062a\u0631\u06a9 \u062f\u0627\u0631\u0646. \u0644\u06cc\u0646\u06a9 \u062f\u0627\u062e\u0644 \u062a\u0644\u06af\u0631\u0627\u0645\u060c \u0627\u06cc\u0645\u06cc\u0644\u060c \u0648\u0628\u200c\u0633\u0627\u06cc\u062a \u0648 Notification \u0647\u0645\u06af\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0627\u0632 \u0647\u0645\u0648\u0646 URL \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06a9\u0646\u0646. \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645 \u0641\u0642\u0637 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0628\u0631\u0627\u06cc Parse \u0648 Resolve \u06a9\u0631\u062f\u0646 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627 \u062f\u0627\u0631\u0647. \u0627\u06cc\u0646 \u062e\u06cc\u0644\u06cc \u0628\u0647\u062a\u0631 \u0627\u0632 \u062d\u0627\u0644\u062a\u06cc\u0647 \u06a9\u0647 Notification \u06cc\u06a9 Route \u062f\u0627\u062e\u0644\u06cc\u060c \u0648\u0628\u200c\u0633\u0627\u06cc\u062a \u06cc\u06a9 URL \u0645\u062a\u0641\u0627\u0648\u062a \u0648 FCM \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 Key \u067e\u0631\u0627\u06a9\u0646\u062f\u0647 \u0628\u0641\u0631\u0633\u062a\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 Backend \u0628\u0647\u062a\u0631\u0647 \u0641\u0642\u0637 URL \u06cc\u0627 Event \u0645\u0639\u0646\u0627\u062f\u0627\u0631 \u0628\u0641\u0631\u0633\u062a\u0647 \u0648 \u0646\u0628\u0627\u06cc\u062f \u0627\u0633\u0645 Composable \u06cc\u0627 Route \u062f\u0627\u062e\u0644\u06cc Android \u0631\u0648 \u0628\u062f\u0648\u0646\u0647. \u0639\u0628\u0627\u0631\u062a\u06cc \u0645\u062b\u0644 <code>product_detail\/842<\/code> \u06cc\u06a9 \u062c\u0632\u0626\u06cc\u0627\u062a \u062f\u0627\u062e\u0644\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u0647\u060c \u0627\u0645\u0627 <code>https:\/\/priceban.com\/products\/842<\/code> \u0628\u062e\u0634\u06cc \u0627\u0632 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0639\u0645\u0648\u0645\u06cc \u0645\u062d\u0635\u0648\u0644\u0647 \u0648 \u0646\u0633\u062e\u0647 \u0648\u0628\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0648 \u062d\u062a\u06cc iOS \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0645\u0639\u0646\u0627\u06cc \u0645\u0634\u062a\u0631\u06a9\u06cc \u0627\u0632\u0634 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0645\u0646\u06cc\u062a\u061b \u0647\u06cc\u0686\u200c\u0648\u0642\u062a \u062f\u0627\u062f\u0647 Deep Link \u0631\u0648 \u0642\u0627\u0628\u0644\u200c\u0627\u0639\u062a\u0645\u0627\u062f \u0641\u0631\u0636 \u0646\u06a9\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Deep Link \u0627\u0632 \u0628\u06cc\u0631\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0627\u0631\u062f \u0645\u06cc\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0647\u0631 \u0645\u0642\u062f\u0627\u0631\u06cc \u06a9\u0647 \u062f\u0627\u062e\u0644\u0634 \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0647 \u0628\u0627\u06cc\u062f \u0648\u0631\u0648\u062f\u06cc \u063a\u06cc\u0631\u0642\u0627\u0628\u0644\u200c\u0627\u0639\u062a\u0645\u0627\u062f \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647. \u06a9\u0627\u0631\u0628\u0631 \u06cc\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062e\u0631\u0628 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0647\u0631 URI\u0627\u06cc \u0628\u0633\u0627\u0632\u0647 \u0648 Activity \u062a\u0648 \u0631\u0648 \u0628\u0627 \u0627\u0648\u0646 \u0627\u062c\u0631\u0627 \u0628\u06a9\u0646\u0647. \u0627\u06af\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0642\u0637 \u0627\u0646\u062a\u0638\u0627\u0631 <code>productId=842<\/code> \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u0645\u0642\u0627\u062f\u06cc\u0631 \u062e\u0627\u0644\u06cc\u060c \u0645\u0646\u0641\u06cc\u060c \u0628\u0633\u06cc\u0627\u0631 \u0628\u0632\u0631\u06af \u06cc\u0627 \u0645\u062a\u0646 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06cc\u0639\u0646\u06cc \u0628\u0627\u06cc\u062f \u0647\u0645\u0647 Argument\u0647\u0627 Parse \u0648 Validate \u0628\u0634\u0646. <code>toLong()<\/code> \u0645\u0645\u06a9\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 Crash \u0628\u06a9\u0646\u0647\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 <code>toLongOrNull()<\/code> \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0647 \u0644\u06cc\u0646\u06a9 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u0631\u0648 \u06a9\u0646\u062a\u0631\u0644 \u0628\u06a9\u0646\u06cc. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0646\u0628\u0627\u06cc\u062f \u0641\u0642\u0637 \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u06a9\u0647 \u0644\u06cc\u0646\u06a9 \u0634\u0646\u0627\u0633\u0647 \u06cc\u06a9 \u0633\u0641\u0627\u0631\u0634 \u0631\u0648 \u062f\u0627\u0631\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0633\u0641\u0627\u0631\u0634 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc. Backend \u0628\u0627\u06cc\u062f \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0631\u0631\u0633\u06cc \u0628\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062c\u0627\u0631\u06cc \u0627\u062c\u0627\u0632\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0627\u0648\u0646 \u0633\u0641\u0627\u0631\u0634 \u0631\u0648 \u062f\u0627\u0631\u0647 \u06cc\u0627 \u0646\u0647. Deep Link \u0646\u0628\u0627\u06cc\u062f \u0647\u06cc\u0686 \u0642\u0627\u0646\u0648\u0646 Permission \u06cc\u0627 Authorization \u0631\u0648 \u062f\u0648\u0631 \u0628\u0632\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u062d\u0633\u0627\u0633 \u0647\u0645 \u0646\u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646 \u0636\u0631\u0648\u0631\u062a \u062f\u0627\u062e\u0644 URL \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0646. URL \u0645\u0645\u06a9\u0646\u0647 \u062f\u0627\u062e\u0644 History \u0645\u0631\u0648\u0631\u06af\u0631\u060c Log\u060c Analytics\u060c Clipboard \u06cc\u0627 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647. Token \u0648\u0631\u0648\u062f\u060c \u0631\u0645\u0632 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0628\u0644\u0646\u062f\u0645\u062f\u062a \u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0631\u0645\u0627\u0646\u0647 \u0646\u0628\u0627\u06cc\u062f \u0645\u062b\u0644 \u06cc\u06a9 Argument \u0639\u0627\u062f\u06cc \u062f\u0631 Deep Link \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647. \u062d\u062a\u06cc \u062f\u0631 Flow\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u062a\u0623\u06cc\u06cc\u062f \u0627\u06cc\u0645\u06cc\u0644 \u06cc\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0631\u0645\u0632\u060c Token \u0628\u0627\u06cc\u062f \u06a9\u0648\u062a\u0627\u0647\u200c\u0639\u0645\u0631\u060c \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0648 \u062f\u0631 Backend \u0642\u0627\u0628\u0644\u200c\u0627\u0628\u0637\u0627\u0644 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0644\u06cc\u0646\u06a9 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u06cc\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc \u062d\u0630\u0641\u200c\u0634\u062f\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u062a\u06cc \u06cc\u06a9 Deep Link \u06a9\u0627\u0645\u0644\u0627\u064b \u0645\u0639\u062a\u0628\u0631 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc\u06cc \u0627\u0634\u0627\u0631\u0647 \u0628\u06a9\u0646\u0647 \u06a9\u0647 \u062f\u06cc\u06af\u0647 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647. \u0645\u062b\u0644\u0627\u064b \u0645\u062d\u0635\u0648\u0644 \u062d\u0630\u0641 \u0634\u062f\u0647\u060c \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u063a\u06cc\u0631\u0641\u0639\u0627\u0644 \u0634\u062f\u0647 \u06cc\u0627 \u0647\u0634\u062f\u0627\u0631 \u0645\u0631\u0628\u0648\u0637\u0647 \u0645\u0646\u0642\u0636\u06cc \u0634\u062f\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0646\u0628\u0627\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 Crash \u0628\u06a9\u0646\u0647 \u06cc\u0627 \u0631\u0648\u06cc Loading \u0628\u06cc\u200c\u0646\u0647\u0627\u06cc\u062a \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0635\u0641\u062d\u0647 \u0645\u0642\u0635\u062f \u0628\u0627\u06cc\u062f \u0648\u0636\u0639\u06cc\u062a \u0645\u062d\u062a\u0648\u0627 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f \u0631\u0648 \u0645\u062b\u0644 \u06cc\u06a9 \u062d\u0627\u0644\u062a \u0637\u0628\u06cc\u0639\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u06a9\u0646\u0647. \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u062a\u0648\u0636\u06cc\u062d \u0628\u062f\u06cc \u0627\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644 \u062f\u06cc\u06af\u0647 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u06cc\u0633\u062a \u0648 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0631\u0641\u062a\u0646 \u0628\u0647 \u062c\u0633\u062a\u200c\u0648\u062c\u0648 \u06cc\u0627 \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc \u0627\u0631\u0627\u0626\u0647 \u0628\u062f\u06cc. \u0641\u0631\u0642 \u0632\u06cc\u0627\u062f\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u0628\u06cc\u0646 \u06cc\u06a9 \u0644\u06cc\u0646\u06a9 Syntax \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u0648 \u0644\u06cc\u0646\u06a9\u06cc \u06a9\u0647 \u0627\u0632 \u0646\u0638\u0631 \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0631\u0633\u062a\u0647 \u0648\u0644\u06cc \u0645\u062d\u062a\u0648\u0627\u06cc \u067e\u0634\u062a \u0627\u0648\u0646 \u062d\u0630\u0641 \u0634\u062f\u0647. \u0627\u0648\u0644\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0642\u0628\u0644 \u0627\u0632 Navigation \u0631\u062f \u0628\u0634\u0647\u060c \u0627\u0645\u0627 \u062f\u0648\u0645\u06cc \u0628\u0627\u06cc\u062f \u0627\u0632 Backend \u067e\u0627\u0633\u062e \u0645\u0646\u0627\u0633\u0628 \u0628\u06af\u06cc\u0631\u0647 \u0648 UI \u0645\u0634\u062e\u0635\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0631\u0648 \u062c\u062f\u06cc \u0628\u06af\u06cc\u0631\u06cc. \u0641\u0631\u0636 \u06a9\u0646 \u0646\u0633\u062e\u0647 \u0627\u0648\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627 \u0631\u0648 \u0628\u0627 <code>\/product\/842<\/code> \u0645\u0646\u062a\u0634\u0631 \u06a9\u0631\u062f\u0647 \u0648 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0627\u0632 <code>\/products\/842<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u0645\u0645\u06a9\u0646\u0647 \u0647\u0646\u0648\u0632 \u062f\u0627\u062e\u0644 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0648 \u0633\u0627\u06cc\u062a\u200c\u0647\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646. Parser \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0631\u0627\u06cc \u0645\u062f\u062a\u06cc \u0647\u0631 \u062f\u0648 \u0633\u0627\u062e\u062a\u0627\u0631 \u0631\u0648 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0628\u06a9\u0646\u0647 \u0648 \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0628\u0647 \u06cc\u06a9 Destination \u062f\u0627\u062e\u0644\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0628\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0634\u0628\u06cc\u0647 Migration \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633\u0647\u061b URL \u0639\u0645\u0648\u0645\u06cc \u0647\u0645 Contract \u062f\u0627\u0631\u0647 \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0634 \u0628\u062f\u0648\u0646 \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0639\u0642\u0628\u200c\u0631\u0648 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0642\u062f\u06cc\u0645\u06cc \u0631\u0648 \u062e\u0631\u0627\u0628 \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deep Link \u0646\u0628\u0627\u06cc\u062f \u0645\u0646\u0637\u0642 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062f\u0648\u0631 \u0628\u0632\u0646\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u0648\u0633\u0648\u0633\u0647 \u0628\u0634\u06cc \u0628\u0631\u0627\u06cc \u0647\u0631 \u0644\u06cc\u0646\u06a9 \u0645\u0633\u062a\u0642\u06cc\u0645 \u06cc\u06a9 Screen \u0628\u0627\u0632 \u0628\u06a9\u0646\u06cc \u0648 \u062a\u0645\u0627\u0645 \u0628\u0631\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc \u0645\u0639\u0645\u0648\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u06a9\u0646\u0627\u0631 \u0628\u0630\u0627\u0631\u06cc. \u0627\u0645\u0627 Deep Link \u0641\u0642\u0637 \u06cc\u06a9 \u0645\u0633\u06cc\u0631 Navigation \u0645\u062a\u0641\u0627\u0648\u062a\u0647\u060c \u0646\u0647 \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u0648\u06cc\u0698\u0647 \u0628\u0631\u0627\u06cc \u062f\u0648\u0631 \u0632\u062f\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc. \u0635\u0641\u062d\u0647 \u0645\u062d\u0635\u0648\u0644 \u0628\u0627\u06cc\u062f \u0647\u0645\u0648\u0646 ViewModel\u060c Repository \u0648 Use Case \u0645\u0639\u0645\u0648\u0644 \u0631\u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06a9\u0646\u0647. \u062a\u0646\u0647\u0627 \u062a\u0641\u0627\u0648\u062a \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0634\u0646\u0627\u0633\u0647 \u0645\u062d\u0635\u0648\u0644 \u0627\u0632 Deep Link \u0627\u0648\u0645\u062f\u0647\u060c \u0646\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u06a9 \u0631\u0648\u06cc \u0644\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 Deep Link \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0628\u0647 \u0647\u0645\u0648\u0646 \u0645\u062f\u0644 Destination \u062a\u0628\u062f\u06cc\u0644 \u0628\u0634\u0647 \u06a9\u0647 Navigation \u062f\u0627\u062e\u0644\u06cc \u0647\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u06a9\u0644\u06cc\u06a9 \u062f\u0627\u062e\u0644 \u0644\u06cc\u0633\u062a \u0648 \u0644\u06cc\u0646\u06a9 \u062e\u0627\u0631\u062c\u06cc \u0647\u0631 \u062f\u0648 \u0628\u0627\u06cc\u062f \u0628\u0647 <code>ProductDetail(productId)<\/code> \u0628\u0631\u0633\u0646. \u0627\u06af\u0647 \u062f\u0648 \u0645\u0633\u06cc\u0631 \u062c\u062f\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062f\u0648 \u062d\u0627\u0644\u062a \u0628\u0633\u0627\u0632\u06cc\u060c \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f \u0631\u0641\u062a\u0627\u0631\u0647\u0627 \u0645\u062a\u0641\u0627\u0648\u062a \u0645\u06cc\u0634\u0646\u061b \u06cc\u06a9\u06cc Authentication \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u06cc\u06af\u0631\u06cc \u0646\u0647\u060c \u06cc\u06a9\u06cc Analytics \u062b\u0628\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u06cc\u06af\u0631\u06cc \u0646\u0647\u060c \u06cc\u06a9\u06cc Error State \u062f\u0627\u0631\u0647 \u0648 \u062f\u06cc\u06af\u0631\u06cc Crash \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deep Link \u0628\u0627\u06cc\u062f \u0648\u0627\u0631\u062f \u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u0648\u062c\u0648\u062f \u0628\u0634\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u06cc\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u0648\u0627\u0632\u06cc \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0627\u0648\u0646 \u0628\u0633\u0627\u0632\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062a\u0633\u062a Deep Link \u0628\u0627 ADB<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0646\u062a\u0638\u0631 \u0646\u0628\u0627\u0634 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062a\u0633\u062a \u06cc\u06a9 \u0644\u06cc\u0646\u06a9 \u0631\u0648 \u062f\u0627\u062e\u0644 \u062a\u0644\u06af\u0631\u0627\u0645 \u0628\u0641\u0631\u0633\u062a\u06cc. \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc \u0628\u0627 ADB \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b Intent \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0648 \u0627\u062c\u0631\u0627 \u0628\u06a9\u0646\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>adb shell am start \\\n  -a android.intent.action.VIEW \\\n  -c android.intent.category.BROWSABLE \\\n  -d \"https:\/\/priceban.com\/products\/842\"\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">adb shell am start \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">a android.intent.action.VIEW \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">c android.intent.category.BROWSABLE \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">d <\/span><span style=\"color: #032F62\">&quot;https:\/\/priceban.com\/products\/842&quot;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u0645\u0648\u0646 \u06a9\u0627\u0631\u06cc \u0631\u0648 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u06a9\u0644\u06cc\u06a9 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647. \u0628\u0627\u06cc\u062f \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0631\u0648 \u062a\u0633\u062a \u0628\u06a9\u0646\u06cc: \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0633\u062a\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632\u060c \u06a9\u0627\u0631\u0628\u0631 Login\u200c\u0634\u062f\u0647\u060c \u06a9\u0627\u0631\u0628\u0631 \u0645\u0647\u0645\u0627\u0646\u060c \u0634\u0646\u0627\u0633\u0647 \u0645\u0639\u062a\u0628\u0631\u060c \u0634\u0646\u0627\u0633\u0647 \u0646\u0627\u0645\u0639\u062a\u0628\u0631\u060c \u0645\u062d\u062a\u0648\u0627\u06cc \u062d\u0630\u0641\u200c\u0634\u062f\u0647 \u0648 \u0644\u06cc\u0646\u06a9 \u062f\u0627\u0631\u0627\u06cc Query Parameter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0648\u0636\u0639\u06cc\u062a \u062a\u0623\u06cc\u06cc\u062f App Links \u0631\u0648\u06cc Android 12 \u0628\u0647 \u0628\u0627\u0644\u0627 \u0647\u0645 \u0645\u06cc\u0634\u0647 \u0641\u0631\u0622\u06cc\u0646\u062f Verification \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f \u0648 \u0646\u062a\u06cc\u062c\u0647 \u062f\u0627\u0645\u0646\u0647\u200c\u0647\u0627 \u0631\u0648 \u062f\u06cc\u062f:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>adb shell pm verify-app-links \\\n  --re-verify com.priceban.app\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">adb shell pm verify<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">app<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">links \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">--<\/span><span style=\"color: #24292E\">re<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">verify com.priceban.app<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>adb shell pm get-app-links \\\n  com.priceban.app\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">adb shell pm <\/span><span style=\"color: #D73A49\">get-<\/span><span style=\"color: #24292E\">app<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">links \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  com.priceban.app<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0627\u0645\u0646\u0647\u200c\u0627\u06cc \u06a9\u0647 \u062f\u0631\u0633\u062a \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647 \u0628\u0627\u0634\u0647 \u0628\u0627\u06cc\u062f \u0648\u0636\u0639\u06cc\u062a <code>verified<\/code> \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0631\u0633\u0645\u06cc \u062a\u0623\u06a9\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u0646 \u06a9\u0647 Verification \u063a\u06cc\u0631\u0647\u0645\u200c\u0632\u0645\u0627\u0646\u0647 \u0648 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0645\u062f\u062a\u06cc \u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u062a\u0627 \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0622\u0645\u0627\u062f\u0647 \u0628\u0634\u0647. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u06cc Deep Link \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0647\u062a\u0631\u0647 Deep Link \u0631\u0648 \u062f\u0631 \u0686\u0646\u062f \u0644\u0627\u06cc\u0647 \u062c\u062f\u0627 \u0637\u0631\u0627\u062d\u06cc \u0628\u06a9\u0646\u06cc\u0645. \u062f\u0631 \u0627\u0648\u0644\u06cc\u0646 \u0644\u0627\u06cc\u0647\u060c \u0633\u06cc\u0633\u062a\u0645 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0647 \u06a9\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 Manifest \u062a\u0634\u062e\u06cc\u0635 \u0645\u06cc\u062f\u0647 \u0686\u0647 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc\u06cc \u0628\u0627\u06cc\u062f \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0634\u0646. \u0627\u06cc\u0646 \u0644\u0627\u06cc\u0647 \u0641\u0642\u0637 \u062f\u0631\u0628\u0627\u0631\u0647 Scheme\u060c Host \u0648 Path\u0647\u0627\u06cc \u06a9\u0644\u06cc \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0644\u0627\u06cc\u0647 \u062f\u0648\u0645\u060c \u06cc\u06a9 <code>DeepLinkParser<\/code> \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u06a9\u0647 URI \u062e\u0627\u0645 \u0631\u0648 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0648 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 \u06cc\u06a9 \u0645\u062f\u0644 \u062f\u0627\u062e\u0644\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 Parser \u0646\u0628\u0627\u06cc\u062f Navigation \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647 \u0648 \u0646\u0628\u0627\u06cc\u062f ViewModel \u0628\u0633\u0627\u0632\u0647. \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0648\u0631\u0648\u062f\u06cc \u0631\u0648 \u0628\u062e\u0648\u0646\u0647\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0628\u06a9\u0646\u0647 \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0645\u0639\u0646\u0627\u062f\u0627\u0631 \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0644\u0627\u06cc\u0647 \u0633\u0648\u0645\u060c \u06cc\u06a9 <code>DeepLinkResolver<\/code> \u06cc\u0627 Coordinator \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0622\u06cc\u0627 \u0645\u0642\u0635\u062f \u0642\u0627\u0628\u0644\u200c\u0628\u0627\u0632 \u0634\u062f\u0646\u0647 \u06cc\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0627\u0648\u0646 \u0634\u0631\u0637 \u062f\u06cc\u06af\u0631\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0645\u062b\u0644\u0627\u064b \u0622\u06cc\u0627 Login \u0644\u0627\u0632\u0645\u0647\u061f \u0622\u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u06cc\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0641\u0639\u0627\u0644 \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u06a9\u0646\u0647\u061f \u0622\u06cc\u0627 \u0644\u06cc\u0646\u06a9 \u0646\u06cc\u0627\u0632 \u0628\u0647 Migration \u062f\u0627\u0631\u0647\u061f \u0622\u06cc\u0627 \u0645\u0642\u0635\u062f \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f\u062a\u0631\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0644\u0627\u06cc\u0647 \u0686\u0647\u0627\u0631\u0645\u060c Navigation \u0645\u0642\u0635\u062f \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0628\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0635\u0641\u062d\u0647 \u0645\u0642\u0635\u062f \u0641\u0642\u0637 \u0634\u0646\u0627\u0633\u0647\u200c\u0647\u0627 \u0648 Argument\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648\u0627\u0642\u0639\u06cc \u0631\u0648 \u0627\u0632 Repository \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062c\u0631\u06cc\u0627\u0646 \u06a9\u0644\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">URI \u0648\u0631\u0648\u062f\u06cc \u2192 Parse \u2192 Validate \u2192 \u0628\u0631\u0631\u0633\u06cc Session \u0648 \u0642\u0648\u0627\u0646\u06cc\u0646 \u2192 \u062a\u0628\u062f\u06cc\u0644 \u0628\u0647 Destination \u2192 Navigation \u2192 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 Backend<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u062a\u0633\u062a \u0647\u0631 \u0628\u062e\u0634 \u0631\u0627\u062d\u062a\u200c\u062a\u0631 \u0628\u0627\u0634\u0647. \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc Parser \u0631\u0648 \u0628\u0627 \u062f\u0647\u200c\u0647\u0627 URL \u0645\u062e\u062a\u0644\u0641 Unit Test \u0628\u06a9\u0646\u06cc\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 Compose \u06cc\u0627 Activity \u0627\u062c\u0631\u0627 \u0628\u0634\u0647. \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc Resolver \u0631\u0648 \u0628\u0627 \u062d\u0627\u0644\u062a\u200c\u0647\u0627\u06cc Login \u0648 Logout \u062a\u0633\u062a \u0628\u06a9\u0646\u06cc \u0648 Navigation \u0647\u0645 \u0641\u0642\u0637 \u0645\u0642\u0635\u062f \u0646\u0647\u0627\u06cc\u06cc \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0646\u062f \u0627\u0634\u062a\u0628\u0627\u0647 \u0631\u0627\u06cc\u062c<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644\u06cc\u0646 \u0627\u0634\u062a\u0628\u0627\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0641\u0642\u0637 \u062d\u0627\u0644\u062a Cold Start \u062a\u0633\u062a \u0628\u0634\u0647. \u0644\u06cc\u0646\u06a9 \u0648\u0642\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u062a\u0647 \u0627\u0633\u062a \u062f\u0631\u0633\u062a \u0628\u0627\u0632 \u0645\u06cc\u0634\u0647\u060c \u0627\u0645\u0627 \u0648\u0642\u062a\u06cc Activity \u0627\u0632 \u0642\u0628\u0644 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u0633\u062a Intent \u062c\u062f\u06cc\u062f \u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0647\u0645\u06cc\u0634\u0647 \u062d\u0627\u0644\u062a Warm Start \u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0686\u0646\u062f \u0644\u06cc\u0646\u06a9 \u067e\u0634\u062a \u0633\u0631 \u0647\u0645 \u0631\u0648 \u0647\u0645 \u062a\u0633\u062a \u0628\u06a9\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u062f\u0648\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0622\u0628\u062c\u06a9\u062a \u06a9\u0627\u0645\u0644 \u0631\u0648 \u062f\u0627\u062e\u0644 URL \u06cc\u0627 Intent \u0642\u0631\u0627\u0631 \u0628\u062f\u06cc. Deep Link \u0628\u0647\u062a\u0631\u0647 \u0641\u0642\u0637 \u0634\u0646\u0627\u0633\u0647 \u067e\u0627\u06cc\u062f\u0627\u0631 \u0645\u0642\u0635\u062f \u0631\u0648 \u062d\u0645\u0644 \u0628\u06a9\u0646\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0645\u0644 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u06cc\u0639\u0646\u06cc Repository \u0648 Backend \u06af\u0631\u0641\u062a\u0647 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u0633\u0648\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 URL \u0639\u0645\u0648\u0645\u06cc \u0631\u0648 \u0628\u0647 Route \u062f\u0627\u062e\u0644\u06cc Compose \u06af\u0631\u0647 \u0628\u0632\u0646\u06cc. Route \u0645\u0645\u06a9\u0646\u0647 \u0628\u0627 Refactor \u062a\u063a\u06cc\u06cc\u0631 \u0628\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 URL \u0639\u0645\u0648\u0645\u06cc \u0628\u0627\u06cc\u062f \u067e\u0627\u06cc\u062f\u0627\u0631 \u0628\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u0686\u0647\u0627\u0631\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Custom Scheme \u0631\u0648 \u0628\u0631\u0627\u06cc \u062f\u0627\u0645\u0646\u0647\u200c\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06a9\u0646\u06cc \u06a9\u0647 \u062e\u0648\u062f\u062a \u0645\u0627\u0644\u06a9\u0634\u06cc. \u0628\u0631\u0627\u06cc \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0648\u0628\u200c\u0633\u0627\u06cc\u062a \u0631\u0633\u0645\u06cc\u060c App Links \u062a\u062c\u0631\u0628\u0647 \u0627\u0645\u0646\u200c\u062a\u0631 \u0648 \u062d\u0631\u0641\u0647\u200c\u0627\u06cc\u200c\u062a\u0631\u06cc \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u067e\u0646\u062c\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Deep Link \u0631\u0648 \u0645\u0633\u0627\u0648\u06cc Navigation \u0628\u062f\u0648\u0646 \u0634\u0631\u0637 \u0628\u0628\u06cc\u0646\u06cc. Login\u060c Permission\u060c \u0645\u0648\u062c\u0648\u062f \u0628\u0648\u062f\u0646 \u0645\u062d\u062a\u0648\u0627 \u0648 \u0645\u062c\u0627\u0632 \u0628\u0648\u062f\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0627\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u0634\u0634\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0644\u06cc\u0646\u06a9 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0639\u062b Crash \u0628\u0634\u0647. \u0647\u0631 Argument \u062e\u0627\u0631\u062c\u06cc \u0628\u0627\u06cc\u062f \u0628\u0627 \u062d\u0627\u0644\u062a \u0627\u0645\u0646 Parse \u0648 Validate \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u0647\u0641\u062a\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Back Stack \u0631\u0648 \u062a\u0635\u0627\u062f\u0641\u06cc \u0631\u0647\u0627 \u0628\u06a9\u0646\u06cc. \u0631\u0641\u062a\u0627\u0631 \u062f\u06a9\u0645\u0647 Back \u0628\u0639\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0627\u0632 Deep Link \u0628\u0627\u06cc\u062f \u0645\u062b\u0644 \u0628\u062e\u0634\u06cc \u0627\u0632 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0637\u0631\u0627\u062d\u06cc \u0648 \u062a\u0633\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Deep Link \u0641\u0642\u0637 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u06cc\u0633\u062a. Deep Link \u06cc\u06a9 \u0648\u0631\u0648\u062f\u06cc \u0645\u0633\u062a\u0642\u0644 \u0628\u0647 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a. \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 Notification\u060c \u0648\u0628\u200c\u0633\u0627\u06cc\u062a\u060c \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646 \u06cc\u0627 \u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u200c\u0648\u062c\u0648 \u0648\u0627\u0631\u062f \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u06cc\u0634\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u0647\u06cc\u0686\u200c\u06a9\u062f\u0648\u0645 \u0627\u0632 \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc \u0642\u0628\u0644\u06cc \u0631\u0648 \u0646\u062f\u06cc\u062f\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645 \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0633\u062a\u0647 \u06cc\u0627 \u0627\u0632 \u0642\u0628\u0644 \u0628\u0627\u0632 \u0628\u0627\u0634\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0647\u0631 \u0645\u0642\u0635\u062f Deep Link \u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u0644\u060c \u0642\u0627\u0628\u0644\u200c\u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0648 \u0633\u0627\u0632\u06af\u0627\u0631 \u0628\u0627 \u0648\u0636\u0639\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0628\u0631\u0646\u0627\u0645\u0647 \u0637\u0631\u0627\u062d\u06cc \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0647\u062a\u0631\u0647 \u0627\u0632 URL\u0647\u0627\u06cc HTTPS \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06a9\u0646\u06cc\u0645 \u0648 \u0628\u0627 Android App Links \u0645\u0627\u0644\u06a9\u06cc\u062a \u062f\u0627\u0645\u0646\u0647 \u0631\u0648 \u062a\u0623\u06cc\u06cc\u062f \u0628\u06a9\u0646\u06cc\u0645. Intent Filter \u0641\u0642\u0637 \u0644\u06cc\u0646\u06a9 \u0631\u0648 \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061b \u0628\u0639\u062f \u0627\u0632 \u0627\u0648\u0646 Parser \u0628\u0627\u06cc\u062f URI \u0631\u0648 \u0628\u0647 \u0645\u062f\u0644 \u062f\u0627\u062e\u0644\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0628\u06a9\u0646\u0647\u060c Resolver \u0628\u0627\u06cc\u062f \u0648\u0636\u0639\u06cc\u062a Login \u0648 \u0642\u0648\u0627\u0646\u06cc\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u0628\u06a9\u0646\u0647 \u0648 Navigation \u0628\u0627\u06cc\u062f \u0645\u0642\u0635\u062f \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0628\u0627 Back Stack \u062f\u0631\u0633\u062a \u0628\u0627\u0632 \u0628\u06a9\u0646\u0647. \u0635\u0641\u062d\u0647 \u0645\u0642\u0635\u062f \u0647\u0645 \u0646\u0628\u0627\u06cc\u062f \u0628\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 \u0644\u06cc\u0646\u06a9 \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u0627\u0645\u0644 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0628\u0627\u06cc\u062f \u062f\u0627\u062f\u0647 \u0648\u0627\u0642\u0639\u06cc \u0631\u0648 \u0627\u0632 Backend \u06cc\u0627 Repository \u062f\u0631\u06cc\u0627\u0641\u062a \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u062c\u0645\u0644\u0647 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646\u0647: <strong>Deep Link \u06cc\u06a9 \u0645\u06cc\u0627\u0646\u200c\u0628\u0631 \u0633\u0627\u062f\u0647 \u0628\u0647 Screen \u0646\u06cc\u0633\u062a\u061b \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u06a9\u0627\u0645\u0644 \u0648\u0631\u0648\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a.<\/strong> \u0648\u0642\u062a\u06cc \u0628\u0627 \u0627\u06cc\u0646 \u062f\u06cc\u062f \u0637\u0631\u0627\u062d\u06cc \u0628\u0634\u0647\u060c \u0644\u06cc\u0646\u06a9 \u062f\u0627\u062e\u0644 Notification\u060c \u0633\u0627\u06cc\u062a\u060c \u062a\u0644\u06af\u0631\u0627\u0645 \u0648 \u0627\u06cc\u0645\u06cc\u0644 \u0647\u0645\u06af\u06cc \u0628\u0647 \u06cc\u06a9 \u062a\u062c\u0631\u0628\u0647 \u0645\u0646\u0633\u062c\u0645 \u0645\u06cc\u200c\u0631\u0633\u0646. \u0627\u0645\u0627 \u0627\u06af\u0647 \u0641\u0642\u0637 \u0628\u0647 \u0634\u06a9\u0644 \u0686\u0646\u062f \u062e\u0637 Route \u0648 Manifest \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0628\u0634\u0647\u060c \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f \u0628\u0627 \u0645\u0634\u06a9\u0644\u0627\u062a\u06cc \u0645\u062b\u0644 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u062e\u0631\u0627\u0628\u060c \u0635\u0641\u062d\u0647\u200c\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u060c Back Stack \u0646\u0627\u0645\u0646\u0638\u0645\u060c \u062f\u0648\u0631 \u0632\u062f\u0646 Login \u0648 \u062a\u0641\u0627\u0648\u062a \u0631\u0641\u062a\u0627\u0631 \u062f\u0631 \u062d\u0627\u0644\u062a \u0628\u0627\u0632 \u0648 \u0628\u0633\u062a\u0647 \u0628\u0648\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648\u0628\u0647\u200c\u0631\u0648 \u0645\u06cc\u0634\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u0647\u0634\u062a\u0645<\/h3>\n\n\n\n<h1 class=\"wp-block-heading\">Badge<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Badge \u0627\u0635\u0644\u0627\u064b \u0686\u06cc\u0647 \u0648 \u0686\u0631\u0627 \u0628\u0647 \u0648\u062c\u0648\u062f \u0627\u0648\u0645\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0647\u0631 \u0648\u0642\u062a \u062f\u0631\u0628\u0627\u0631\u0647 Notification \u0635\u062d\u0628\u062a \u0645\u06cc\u200c\u06a9\u0631\u062f\u06cc\u0645\u060c \u0647\u0645\u06cc\u0634\u0647 \u0641\u0631\u0636\u0645\u0648\u0646 \u0627\u06cc\u0646 \u0628\u0648\u062f \u06a9\u0647 \u0647\u062f\u0641 \u0627\u0639\u0644\u0627\u0646 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0647\u0645\u0648\u0646 \u0644\u062d\u0638\u0647 \u062a\u0648\u062c\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u062c\u0644\u0628 \u0628\u06a9\u0646\u0647. \u06cc\u0639\u0646\u06cc \u06af\u0648\u0634\u06cc \u0635\u062f\u0627 \u0645\u06cc\u062f\u0647\u060c \u0648\u06cc\u0628\u0631\u0647 \u0645\u06cc\u0632\u0646\u0647 \u06cc\u0627 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0638\u0627\u0647\u0631 \u0645\u06cc\u0634\u0647. \u0627\u0645\u0627 \u0647\u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0646\u0645\u06cc\u0641\u062a\u0647. \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06af\u0648\u0634\u06cc \u0631\u0648 \u0631\u0648\u06cc \u062d\u0627\u0644\u062a \u0628\u06cc\u200c\u0635\u062f\u0627 \u06af\u0630\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 Notification \u0631\u0648 \u0631\u062f \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0627\u0635\u0644\u0627\u064b \u062f\u0631 \u0627\u0648\u0646 \u0644\u062d\u0638\u0647 \u0628\u0647 \u06af\u0648\u0634\u06cc \u0646\u06af\u0627\u0647 \u0646\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 Badge \u0648\u0627\u0631\u062f \u0645\u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Badge \u0647\u0645\u0648\u0646 \u0639\u062f\u062f \u06cc\u0627 \u0646\u0642\u0637\u0647 \u06a9\u0648\u0686\u06cc\u06a9\u06cc \u0647\u0633\u062a \u06a9\u0647 \u0631\u0648\u06cc \u0622\u06cc\u06a9\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u06af\u0647 \u062f\u0627\u062e\u0644 \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u062a\u0641\u0627\u0642 \u062c\u062f\u06cc\u062f\u06cc \u0627\u0641\u062a\u0627\u062f\u0647 \u06a9\u0647 \u0647\u0646\u0648\u0632 \u0628\u0647\u0634 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0646\u06a9\u0631\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u06a9\u0646\u0627\u0631 \u0622\u06cc\u06a9\u0646 Gmail \u0639\u062f\u062f \u06f1\u06f2 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647 \u06cc\u0627 \u06a9\u0646\u0627\u0631 Telegram \u0639\u062f\u062f \u06f3. \u0627\u06cc\u0646 \u0639\u062f\u062f \u062e\u0648\u062f\u0634 Notification \u0646\u06cc\u0633\u062a\u061b \u0641\u0642\u0637 \u06cc\u06a9 \u06cc\u0627\u062f\u0622\u0648\u0631\u06cc\u0647 \u06a9\u0647 \u0645\u06cc\u06af\u0647 \u0647\u0646\u0648\u0632 \u0686\u0646\u062f \u0645\u0648\u0631\u062f \u0628\u0627\u0642\u06cc \u0645\u0648\u0646\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0639\u0628\u0627\u0631\u062a \u062f\u06cc\u06af\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Notification \u062a\u0648\u062c\u0647 \u0644\u062d\u0638\u0647\u200c\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/li>\n\n\n\n<li>Badge \u06cc\u0627\u062f\u0622\u0648\u0631\u06cc \u0628\u0644\u0646\u062f\u0645\u062f\u062a\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u062e\u06cc\u0644\u06cc \u0645\u0647\u0645\u0647\u060c \u0686\u0648\u0646 \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u0641\u06a9\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646 Badge \u0641\u0642\u0637 \u06cc\u06a9 \u0638\u0627\u0647\u0631 \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc\u0647\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u0632 \u0646\u0638\u0631 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0646\u0642\u0634 \u06a9\u0627\u0645\u0644\u0627\u064b \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Badge \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 Notification \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 Badge \u0631\u0648 \u0628\u062e\u0634\u06cc \u0627\u0632 Notification \u0628\u062f\u0648\u0646\u06cc\u0645. \u062f\u0631 \u0648\u0627\u0642\u0639 Badge \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 <strong>Launcher<\/strong> \u06af\u0648\u0634\u06cc\u0647\u060c \u0646\u0647 Notification. \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0641\u0642\u0637 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u0631\u0648 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 Launcher \u0642\u0631\u0627\u0631 \u0645\u06cc\u062f\u0647 \u0648 \u0627\u06cc\u0646 \u062e\u0648\u062f Launcher\u0640\u0647 \u06a9\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 Badge \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647 \u06cc\u0627 \u0646\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0645\u0645\u06a9\u0646\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0633\u0627\u0645\u0633\u0648\u0646\u06af Badge \u0639\u062f\u062f\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647.<\/li>\n\n\n\n<li>\u0631\u0648\u06cc Pixel \u0641\u0642\u0637 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u06a9\u0648\u0686\u06a9 \u062f\u06cc\u062f\u0647 \u0628\u0634\u0647.<\/li>\n\n\n\n<li>\u0631\u0648\u06cc \u0628\u0639\u0636\u06cc Launcher\u0647\u0627 \u0627\u0635\u0644\u0627\u064b Badge \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0641\u0631\u0636 \u0628\u06a9\u0646\u0647 \u06a9\u0647 \u0647\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9 Badge \u0645\u0634\u0627\u0628\u0647 \u0645\u06cc\u200c\u0628\u06cc\u0646\u0646. \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u06cc\u06a9\u06cc \u0627\u0632 \u062a\u0641\u0627\u0648\u062a\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0627 iOS \u0647\u0645 \u0647\u0633\u062a. \u062f\u0631 iOS \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062a\u0639\u062f\u0627\u062f Badge \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0631\u0641\u062a\u0627\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0648 Launcher \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Badge \u0627\u0632 \u06a9\u062c\u0627 \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u0627\u062a\u0641\u0627\u0642 \u062c\u062f\u06cc\u062f\u06cc \u0627\u0641\u062a\u0627\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06a9\u062b\u0631 \u06af\u0648\u0634\u06cc\u200c\u0647\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u06cc\u060c Badge \u0628\u0631 \u0627\u0633\u0627\u0633 Notification\u0647\u0627\u06cc \u0641\u0639\u0627\u0644 \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0633\u0647 Notification \u0641\u0639\u0627\u0644 \u062f\u0627\u0631\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a \u0644\u067e\u200c\u062a\u0627\u067e<\/li>\n\n\n\n<li>\u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a \u0647\u062f\u0641\u0648\u0646<\/li>\n\n\n\n<li>\u062a\u0623\u06cc\u06cc\u062f \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0627\u06cc\u0646 Notification\u0647\u0627 \u067e\u0627\u06a9 \u0646\u0634\u0646\u060c Launcher \u0645\u0645\u06a9\u0646\u0647 Badge \u0631\u0648 \u0628\u0631\u0627\u0628\u0631 \u06f3 \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u06cc\u06a9\u06cc \u0627\u0632 Notification\u0647\u0627 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0646\u0647 \u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0648\u0646 Notification \u0631\u0648 Cancel \u0628\u06a9\u0646\u0647\u060c Badge \u0647\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u067e\u0633 \u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0642\u0639 \u062e\u0648\u062f\u062a Badge \u0631\u0648 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0645\u06cc\u062f\u06cc. \u062a\u0648 \u0641\u0642\u0637 Notification\u0647\u0627 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc \u0648 Launcher \u0646\u062a\u06cc\u062c\u0647 \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 Badge \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0647\u0631 Notification \u0646\u0628\u0627\u06cc\u062f Badge \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u062f\u0627\u062e\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u062f\u0648 \u0646\u0648\u0639 \u0627\u0639\u0644\u0627\u0646 \u062f\u0627\u0631\u06cc\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0627\u0648\u0644:<\/strong><br>\u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a \u0645\u062d\u0635\u0648\u0644\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0646\u0628\u0627\u0644\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u062f\u0648\u0645:<\/strong><br>\u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646\u062a\u0634\u0631 \u0634\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0622\u06cc\u0627 \u0647\u0631 \u062f\u0648 \u0628\u0627\u06cc\u062f Badge \u0627\u06cc\u062c\u0627\u062f \u0628\u06a9\u0646\u0646\u061f \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0646\u0647. \u0627\u06af\u0631 \u0647\u0631 Notification \u0628\u0627\u0639\u062b Badge \u0628\u0634\u0647\u060c \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f \u0647\u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u0639\u062f\u062f \u0631\u0648\u06cc \u0622\u06cc\u06a9\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 Badge \u0627\u0631\u0632\u0634 \u062e\u0648\u062f\u0634 \u0631\u0648 \u0627\u0632 \u062f\u0633\u062a \u0645\u06cc\u062f\u0647. Badge \u0628\u0647\u062a\u0631\u0647 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0686\u06cc\u0632\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647 \u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0631\u0633\u06cc\u062f\u06af\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u0631\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0647\u0634\u062f\u0627\u0631 \u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a<\/li>\n\n\n\n<li>\u067e\u06cc\u0627\u0645 \u062c\u062f\u06cc\u062f<\/li>\n\n\n\n<li>\u0633\u0641\u0627\u0631\u0634 \u062c\u062f\u06cc\u062f<\/li>\n\n\n\n<li>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0623\u06cc\u06cc\u062f<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u062e\u0628\u0631\u0647\u0627<\/li>\n\n\n\n<li>\u062a\u0628\u0644\u06cc\u063a\u0627\u062a<\/li>\n\n\n\n<li>\u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0647\u0627<\/li>\n\n\n\n<li>\u0627\u0637\u0644\u0627\u0639\u06cc\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0646\u0628\u0627\u06cc\u062f Badge \u0627\u06cc\u062c\u0627\u062f \u0628\u06a9\u0646\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0631\u062a\u0628\u0627\u0637 Badge \u0628\u0627 Notification Channel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062f\u0631\u0633 \u0642\u0628\u0644 \u06af\u0641\u062a\u06cc\u0645 \u0647\u0631 Notification \u062f\u0627\u062e\u0644 \u06cc\u06a9 Channel \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647. \u06cc\u06a9\u06cc \u0627\u0632 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0647\u0631 Channel \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0622\u06cc\u0627 Notification\u0647\u0627\u06cc \u0627\u06cc\u0646 Channel \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u0631\u0646 Badge \u0627\u06cc\u062c\u0627\u062f \u0628\u06a9\u0646\u0646 \u06cc\u0627 \u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0628\u0631\u0627\u06cc Channel \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u06cc\u0645\u062a:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>channel.setShowBadge(true)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">channel.<\/span><span style=\"color: #6F42C1\">setShowBadge<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">true<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627\u06cc \u062a\u0628\u0644\u06cc\u063a\u0627\u062a\u06cc:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>channel.setShowBadge(false)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">channel.<\/span><span style=\"color: #6F42C1\">setShowBadge<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0641\u0642\u0637 Notification\u0647\u0627\u06cc \u0645\u0647\u0645 \u0648\u0627\u0631\u062f \u0634\u0645\u0627\u0631\u0634 Badge \u0628\u0634\u0646. \u062f\u0642\u062a \u06a9\u0646 \u06a9\u0647 \u0627\u06cc\u0646 \u0641\u0642\u0637 \u0631\u0641\u062a\u0627\u0631 \u0627\u0648\u0644\u06cc\u0647 Channel \u0647\u0633\u062a. \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u0686\u0646\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u062f\u0627\u062e\u0644 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06af\u0648\u0634\u06cc Badge \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0627\u0648\u0646 Channel \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Badge \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 Notification \u0646\u06cc\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u0641\u06a9\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0627\u06af\u0631 Badge \u062f\u0627\u0631\u06cc\u0645\u060c \u062f\u06cc\u06af\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a Notification \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u06cc\u0645. \u0627\u06cc\u0646 \u0646\u06af\u0627\u0647 \u0627\u0634\u062a\u0628\u0627\u0647\u0647. Badge \u0647\u06cc\u0686 \u062a\u0648\u0636\u06cc\u062d\u06cc \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u06cc\u062f\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0646\u0627\u0631 \u0622\u06cc\u06a9\u0646 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0639\u062f\u062f \u06f2 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 \u0639\u062f\u062f \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u06cc\u06af\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u06a9\u062f\u0648\u0645 \u0645\u062d\u0635\u0648\u0644 \u0627\u0631\u0632\u0648\u0646 \u0634\u062f\u0647.<\/li>\n\n\n\n<li>\u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0627\u0641\u062a\u0627\u062f\u0647.<\/li>\n\n\n\n<li>\u0627\u0635\u0644\u0627\u064b \u0645\u0648\u0636\u0648\u0639 \u0686\u06cc\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Badge \u0641\u0642\u0637 \u0645\u06cc\u06af\u0647: &#8220;\u062f\u0648 \u0627\u062a\u0641\u0627\u0642 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u06a9\u0647 \u0647\u0646\u0648\u0632 \u0628\u0631\u0631\u0633\u06cc\u0634\u0648\u0646 \u0646\u06a9\u0631\u062f\u06cc.&#8221; \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Badge \u0645\u06a9\u0645\u0644 Notification\u0640\u0647\u060c \u0646\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0627\u0648\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Badge \u0647\u0645\u06cc\u0634\u06af\u06cc\u061b \u06cc\u06a9 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u062f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0628\u062f\u062a\u0631\u06cc\u0646 \u062a\u062c\u0631\u0628\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0647\u0645\u06cc\u0634\u0647 \u06cc\u06a9 Badge \u0631\u0648\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647. \u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f \u0627\u0632 \u0645\u062f\u062a\u06cc \u062f\u06cc\u06af\u0647 \u0627\u0635\u0644\u0627\u064b \u0628\u0647\u0634 \u062a\u0648\u062c\u0647 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0641\u0631\u0636 \u06a9\u0646 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0647\u0645\u06cc\u0634\u0647 \u0639\u062f\u062f \u06f1 \u0631\u0648\u06cc \u0622\u06cc\u06a9\u0646\u0634 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0686\u0648\u0646 \u06cc\u06a9 Notification \u0642\u062f\u06cc\u0645\u06cc \u0647\u06cc\u0686\u200c\u0648\u0642\u062a \u067e\u0627\u06a9 \u0646\u0634\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0686\u0646\u062f \u0631\u0648\u0632 \u06a9\u0627\u0631\u0628\u0631 \u062f\u06cc\u06af\u0647 \u0627\u06cc\u0646 Badge \u0631\u0648 \u0646\u0645\u06cc\u200c\u0628\u06cc\u0646\u0647. \u0627\u06cc\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u0647\u0645\u0648\u0646 \u0627\u062a\u0641\u0627\u0642\u06cc\u0647 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0647\u0634\u062f\u0627\u0631\u0647\u0627\u06cc \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0647\u0645 \u0631\u062e \u0645\u06cc\u062f\u0647. \u0647\u0631 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0647\u0645\u06cc\u0634\u0647 \u062d\u0636\u0648\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u06a9\u0645\u200c\u06a9\u0645 \u0646\u0627\u0645\u0631\u0626\u06cc \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0647 \u0632\u0645\u0627\u0646\u06cc Badge \u0628\u0627\u06cc\u062f \u067e\u0627\u06a9 \u0628\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0633\u0624\u0627\u0644 \u062c\u0648\u0627\u0628 \u0648\u0627\u062d\u062f\u06cc \u0646\u062f\u0627\u0631\u0647 \u0648 \u0628\u0647 \u0645\u0646\u0637\u0642 \u0645\u062d\u0635\u0648\u0644 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647. \u0645\u062b\u0644\u0627\u064b \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0627\u06af\u0631 Notification \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a \u0631\u0648 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u0632 \u06a9\u0631\u062f\u060c \u0645\u0646\u0637\u0642\u06cc\u0647 \u06a9\u0647 \u0627\u0648\u0646 Notification \u062d\u0630\u0641 \u0628\u0634\u0647 \u0648 Badge \u0647\u0645 \u06a9\u0627\u0647\u0634 \u067e\u06cc\u062f\u0627 \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0627\u06af\u0631 \u0641\u0642\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0631\u062f \u0648 \u0627\u0635\u0644\u0627\u064b \u0635\u0641\u062d\u0647 \u0647\u0634\u062f\u0627\u0631\u0647\u0627 \u0631\u0648 \u0646\u062f\u06cc\u062f\u060c \u0634\u0627\u06cc\u062f \u0647\u0646\u0648\u0632 Badge \u0628\u0627\u06cc\u062f \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0627\u0648\u0644 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc: &#8220;\u06a9\u0627\u0631\u0628\u0631 \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0631\u0627 \u0631\u0633\u06cc\u062f\u06af\u06cc\u200c\u0634\u062f\u0647 \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u200c\u06a9\u0646\u062f\u061f&#8221; \u0628\u0639\u062f \u0628\u0631 \u0627\u0633\u0627\u0633 \u0647\u0645\u0648\u0646 Notification\u0647\u0627 \u0631\u0627 Cancel \u06a9\u0646\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Badge \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u06cc\u0645 \u0628\u0631\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0637\u0631\u0627\u062d\u06cc \u0645\u0646\u0627\u0633\u0628\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645\u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0641\u0642\u0637 Channel \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0647\u0634\u062f\u0627\u0631\u0647\u0627\u06cc \u0642\u06cc\u0645\u062a Badge \u062e\u0648\u0627\u0647\u062f \u062f\u0627\u0634\u062a.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Price Alerts\n\u2713 Badge\n\nBusiness Status\n\u2713 Badge\n\nGeneral Updates\n\u2717 Badge\n\nPromotions\n\u2717 Badge\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #24292E\">Price Alerts<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\u2713 Badge<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">Business Status<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\u2713 Badge<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">General Updates<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\u2717 Badge<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">Promotions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\u2717 Badge<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0637\u0631\u0627\u062d\u06cc \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0647\u0631 \u0639\u062f\u062f\u06cc \u06a9\u0647 \u0631\u0648\u06cc \u0622\u06cc\u06a9\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647\u060c \u0648\u0627\u0642\u0639\u0627\u064b \u0645\u0639\u0646\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u0647\u0646\u0648\u0632 \u06cc\u06a9 \u0627\u062a\u0641\u0627\u0642 \u0645\u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u06a9\u0647 \u0628\u0647\u062a\u0631\u0647 \u0628\u0631\u0631\u0633\u06cc\u0634 \u0628\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0646\u062f \u0627\u0634\u062a\u0628\u0627\u0647 \u0631\u0627\u06cc\u062c<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644\u06cc\u0646 \u0627\u0634\u062a\u0628\u0627\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0647\u0645\u0647 Notification\u0647\u0627 Badge \u062a\u0648\u0644\u06cc\u062f \u0628\u06a9\u0646\u0646. \u0646\u062a\u06cc\u062c\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0622\u06cc\u06a9\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u0639\u062f\u062f \u062f\u0627\u0631\u0647 \u0648 Badge \u0627\u0631\u0632\u0634 \u062e\u0648\u062f\u0634 \u0631\u0648 \u0627\u0632 \u062f\u0633\u062a \u0645\u06cc\u062f\u0647. \u0627\u0634\u062a\u0628\u0627\u0647 \u062f\u0648\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0647\u0645\u0647 \u06af\u0648\u0634\u06cc\u200c\u0647\u0627 Badge \u0639\u062f\u062f\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0646. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0634\u06a9\u0644 Badge \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0647 Launcher \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0647. \u0627\u0634\u062a\u0628\u0627\u0647 \u0633\u0648\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Notification \u0628\u0639\u062f \u0627\u0632 \u0631\u0633\u06cc\u062f\u06af\u06cc \u06a9\u0627\u0631\u0628\u0631 \u067e\u0627\u06a9 \u0646\u0634\u0647. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a Badge \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647 \u0648 \u06a9\u0645\u200c\u06a9\u0645 \u062a\u0628\u062f\u06cc\u0644 \u0628\u0647 \u0646\u0648\u06cc\u0632 \u0645\u06cc\u0634\u0647. \u0627\u0634\u062a\u0628\u0627\u0647 \u0686\u0647\u0627\u0631\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Badge \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 Notification \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647. Badge \u0641\u0642\u0637 \u06cc\u06a9 \u06cc\u0627\u062f\u0622\u0648\u0631\u06cc\u0647 \u0648 \u0647\u06cc\u0686 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc \u0627\u062a\u0641\u0627\u0642 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0646\u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Badge \u06cc\u06a9\u06cc \u0627\u0632 \u06a9\u0648\u0686\u06a9\u200c\u062a\u0631\u06cc\u0646 \u0627\u062c\u0632\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645 Notification \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u0647\u060c \u0627\u0645\u0627 \u0627\u06af\u0631 \u062f\u0631\u0633\u062a \u0637\u0631\u0627\u062d\u06cc \u0628\u0634\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u062f\u0648\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u0632\u0627\u062d\u0645\u062a\u060c \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0627\u0632 \u0648\u062c\u0648\u062f \u0627\u062a\u0641\u0627\u0642\u200c\u0647\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc\u200c\u0646\u0634\u062f\u0647 \u0622\u06af\u0627\u0647 \u0646\u06af\u0647 \u062f\u0627\u0631\u0647. \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Badge \u0628\u0631\u0627\u06cc \u062c\u0644\u0628 \u062a\u0648\u062c\u0647 \u0644\u062d\u0638\u0647\u200c\u0627\u06cc \u0633\u0627\u062e\u062a\u0647 \u0646\u0634\u062f\u0647\u061b \u0648\u0638\u06cc\u0641\u0647 \u0627\u0648\u0646 \u06cc\u0627\u062f\u0622\u0648\u0631\u06cc\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0646\u0628\u0627\u06cc\u062f \u0647\u0631 Notification \u0628\u0627\u0639\u062b \u0627\u06cc\u062c\u0627\u062f Badge \u0628\u0634\u0647 \u0648 \u0646\u0628\u0627\u06cc\u062f Badge \u0628\u0631\u0627\u06cc \u0645\u062f\u062a \u0637\u0648\u0644\u0627\u0646\u06cc \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u0631\u0648\u06cc \u0622\u06cc\u06a9\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0642\u06cc \u0628\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u06cc\u0646 \u0627\u0635\u0644 \u0631\u0648 \u0631\u0639\u0627\u06cc\u062a \u06a9\u0646\u06cc\u060c Badge \u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0641\u0642\u0637 \u06cc\u06a9 \u0639\u062f\u062f \u0631\u0648\u06cc \u0622\u06cc\u06a9\u0646 \u0628\u0627\u0634\u0647\u060c \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u0634\u0647 \u0628\u0647 \u06cc\u06a9 \u0633\u06cc\u06af\u0646\u0627\u0644 \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u062f\u06cc\u062f\u0646\u0634 \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u062f\u0627\u062e\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0627\u062a\u0641\u0627\u0642 \u0645\u0647\u0645\u06cc \u0645\u0646\u062a\u0638\u0631 \u0628\u0631\u0631\u0633\u06cc \u0627\u0648\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0633\u06cc\u200c\u0648\u0646\u0647\u0645<\/h3>\n\n\n\n<h1 class=\"wp-block-heading\">Foreground Service<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 Foreground Service \u0628\u0647 \u0648\u062c\u0648\u062f \u0622\u0645\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 Foreground Service \u0631\u0648 \u062f\u0631\u0633\u062a \u062f\u0631\u06a9 \u06a9\u0646\u06cc\u0645\u060c \u0627\u0648\u0644 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u06cc\u0645 \u0627\u0635\u0644\u0627\u064b \u0686\u0631\u0627 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0647 \u0686\u0646\u06cc\u0646 \u0645\u0641\u0647\u0648\u0645\u06cc \u0627\u062d\u062a\u06cc\u0627\u062c \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f. \u0641\u0631\u0636 \u06a9\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062b\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0631\u062f\u06cc \u0648 \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u06a9\u0627\u0644\u0627 \u0631\u0648 \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc\u200c\u06a9\u0646\u06cc. \u062a\u0627 \u0648\u0642\u062a\u06cc \u0635\u0641\u062d\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632\u0647\u060c \u0647\u0645\u0647\u200c\u0686\u06cc\u0632 \u0637\u0628\u06cc\u0639\u06cc\u0647\u061b \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0634 \u0631\u0648 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u0647\u060c \u0646\u062a\u06cc\u062c\u0647 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647. \u0627\u0645\u0627 \u062d\u0627\u0644\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0645\u06cc\u200c\u0628\u0646\u062f\u06cc \u06cc\u0627 \u0648\u0627\u0631\u062f \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062f\u06cc\u06af\u0647 \u0645\u06cc\u0634\u06cc. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0627\u06cc\u062f \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0642\u0628\u0644\u06cc \u0647\u0645\u0686\u0646\u0627\u0646 \u0627\u062c\u0627\u0632\u0647 \u0627\u062c\u0631\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0646\u0647. \u0627\u06af\u0631 \u0647\u0645\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0628\u062f\u0648\u0646 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u062c\u0631\u0627 \u0628\u0634\u0646\u060c \u062e\u06cc\u0644\u06cc \u0632\u0648\u062f \u0628\u0627\u062a\u0631\u06cc \u06af\u0648\u0634\u06cc \u062e\u0627\u0644\u06cc \u0645\u06cc\u0634\u0647\u060c \u062d\u0627\u0641\u0638\u0647 \u0627\u0634\u063a\u0627\u0644 \u0645\u06cc\u0634\u0647 \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f \u06a9\u0644 \u0633\u06cc\u0633\u062a\u0645 \u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0632 \u0637\u0631\u0641 \u062f\u06cc\u06af\u0647\u060c \u0627\u06af\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0631\u0648 \u0641\u0648\u0631\u0627\u064b \u0645\u062a\u0648\u0642\u0641 \u06a9\u0646\u0647\u060c \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u06af\u0648\u0634\u06cc \u0627\u0632 \u06a9\u0627\u0631 \u0645\u06cc\u0641\u062a\u0646. \u067e\u0633 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u0628\u0627\u06cc\u062f \u0628\u06cc\u0646 <strong>\u0645\u0635\u0631\u0641 \u0645\u0646\u0627\u0628\u0639<\/strong> \u0648 <strong>\u0627\u062f\u0627\u0645\u0647 \u0641\u0639\u0627\u0644\u06cc\u062a \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0636\u0631\u0648\u0631\u06cc<\/strong> \u06cc\u06a9 \u062a\u0639\u0627\u062f\u0644 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0631\u062f \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0627\u06cc\u0646 \u062a\u0639\u0627\u062f\u0644\u060c \u0645\u0641\u0647\u0648\u0645\u06cc \u0628\u0647 \u0627\u0633\u0645 <strong>Foreground Service<\/strong> \u0628\u0648\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0634\u06a9\u0644 Background Service \u0686\u0647 \u0628\u0648\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u060c \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0633\u062a\u0646 \u06cc\u06a9 <strong>Background Service<\/strong> \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0646 \u0648 \u062d\u062a\u06cc \u0648\u0642\u062a\u06cc \u0647\u06cc\u0686 Activity \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0646\u0628\u0648\u062f\u060c \u0627\u0648\u0646 Service \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0647 \u06a9\u0627\u0631 \u062e\u0648\u062f\u0634 \u0627\u062f\u0627\u0645\u0647 \u0645\u06cc\u200c\u062f\u0627\u062f. \u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a \u062f\u0631 \u0638\u0627\u0647\u0631 \u062e\u06cc\u0644\u06cc \u0645\u0641\u06cc\u062f \u0628\u0648\u062f\u060c \u0627\u0645\u0627 \u06a9\u0645\u200c\u06a9\u0645 \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0627\u0632\u0634 \u0633\u0648\u0621\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646. \u0628\u0639\u0636\u06cc \u0627\u0632 \u0627\u0648\u0646\u200c\u0647\u0627 \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062a\u0648\u062c\u0647 \u0628\u0634\u0647\u060c \u0633\u0627\u0639\u062a\u200c\u0647\u0627 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u062f\u0646\u060c \u062f\u0627\u0626\u0645\u0627\u064b \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0645\u0635\u0631\u0641 \u0645\u06cc\u200c\u06a9\u0631\u062f\u0646\u060c \u0645\u0648\u0642\u0639\u06cc\u062a \u0645\u06a9\u0627\u0646\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648 \u0645\u06cc\u200c\u062e\u0648\u0646\u062f\u0646\u060c \u0641\u0627\u06cc\u0644 \u062f\u0627\u0646\u0644\u0648\u062f \u0645\u06cc\u200c\u06a9\u0631\u062f\u0646 \u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062e\u062a\u0644\u0641\u06cc \u062c\u0645\u0639\u200c\u0622\u0648\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0631\u062f\u0646. \u0646\u062a\u06cc\u062c\u0647 \u0627\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631\u0647\u0627 \u0627\u06cc\u0646 \u0628\u0648\u062f \u06a9\u0647 \u0628\u0627\u062a\u0631\u06cc \u06af\u0648\u0634\u06cc \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u062e\u0627\u0644\u06cc \u0645\u06cc\u200c\u0634\u062f\u060c \u0645\u0635\u0631\u0641 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0631\u0641\u062a \u0648 \u062d\u062a\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc\u200c\u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u0648 \u062d\u0631\u06cc\u0645 \u062e\u0635\u0648\u0635\u06cc \u0647\u0645 \u0628\u0647 \u0648\u062c\u0648\u062f \u0645\u06cc\u200c\u0627\u0648\u0645\u062f. \u0628\u062f\u062a\u0631 \u0627\u0632 \u0647\u0645\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0647\u06cc\u0686 \u0646\u0634\u0648\u0646\u0647\u200c\u0627\u06cc \u0646\u062f\u0627\u0634\u062a \u06a9\u0647 \u0628\u0641\u0647\u0645\u0647 \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0647\u0646\u0648\u0632 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0647\u0633\u062a\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u06af\u0648\u06af\u0644 \u0627\u0632 <strong>Android 8 (Oreo)<\/strong> \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc \u0633\u062e\u062a\u06cc \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc Background Service \u0627\u0639\u0645\u0627\u0644 \u06a9\u0631\u062f. \u0627\u0632 \u0627\u0648\u0646 \u0628\u0647 \u0628\u0639\u062f\u060c \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u0645\u06cc\u200c\u062e\u0648\u0627\u0633\u062a \u0645\u062f\u062a \u0646\u0633\u0628\u062a\u0627\u064b \u0637\u0648\u0644\u0627\u0646\u06cc \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u0646\u0647\u060c \u0628\u0627\u06cc\u062f \u062f\u0644\u06cc\u0644 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0627\u0645\u0644\u0627\u064b \u0634\u0641\u0627\u0641 \u0645\u06cc\u200c\u0628\u0648\u062f. \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u062f\u06cc\u06af\u0647 \u0627\u062c\u0627\u0632\u0647 \u0646\u0645\u06cc\u200c\u062f\u0627\u062f \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0645\u062e\u0641\u06cc\u0627\u0646\u0647 \u0633\u0627\u0639\u062a\u200c\u0647\u0627 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0641\u0639\u0627\u0644 \u0628\u0645\u0648\u0646\u0646 \u0648 \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646\u060c Foreground Service \u0645\u0639\u0631\u0641\u06cc \u0634\u062f.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Foreground Service \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u06cc\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Foreground Service \u062f\u0631 \u0627\u0635\u0644 \u0647\u0645\u0648\u0646 Service \u0645\u0639\u0645\u0648\u0644\u06cc\u0647\u060c \u0627\u0645\u0627 \u0628\u0627 \u06cc\u06a9 \u062a\u0641\u0627\u0648\u062a \u0627\u0633\u0627\u0633\u06cc\u061b \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u06cc\u0634\u0647 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627\u0633\u062a. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062e\u0627\u0637\u0631\u060c \u0647\u0631 Foreground Service <strong>\u062d\u062a\u0645\u0627\u064b<\/strong> \u0628\u0627\u06cc\u062f \u06cc\u06a9 Notification \u062f\u0627\u0626\u0645\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647. \u0648\u0642\u062a\u06cc Google Maps \u062f\u0631 \u062d\u0627\u0644 \u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc\u0647\u060c Spotify \u062f\u0631 \u062d\u0627\u0644 \u067e\u062e\u0634 \u0645\u0648\u0633\u06cc\u0642\u06cc\u0647 \u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0636\u0628\u0637 \u0635\u062f\u0627 \u0645\u0634\u063a\u0648\u0644 \u0636\u0628\u0637\u0647\u060c \u0647\u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u0627\u0639\u0644\u0627\u0646 \u062f\u0631 Notification Bar \u062f\u06cc\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06cc\u0646 \u0627\u0639\u0644\u0627\u0646 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc \u0646\u06cc\u0633\u062a\u060c \u0628\u0644\u06a9\u0647 \u0628\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u0648\u0627\u0642\u0639\u0627\u064b \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645 \u06cc\u06a9 \u06a9\u0627\u0631 \u0645\u0647\u0645 \u0648 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0648\u0627\u0642\u0639 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u06a9 \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0628\u0627 \u0647\u0645 \u062f\u0627\u0631\u0646. \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u06af\u0647: \u0645\u0646 \u062f\u0627\u0631\u0645 \u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a \u0645\u0647\u0645 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0645 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645 \u0627\u0632\u0634 \u062e\u0628\u0631 \u062f\u0627\u0631\u0647. \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u062f\u0631 \u067e\u0627\u0633\u062e \u0645\u06cc\u06af\u0647: \u067e\u0633 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u062f\u0645 \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u0646\u0633\u0628\u062a \u0628\u0647 \u062d\u0627\u0644\u062a \u0639\u0627\u062f\u06cc \u0645\u062f\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0627\u062c\u0631\u0627 \u0628\u0634\u0647 \u0648 \u0628\u0627 \u0627\u0648\u0644\u06cc\u0646 \u0641\u0631\u0635\u062a \u0645\u062a\u0648\u0642\u0641\u0634 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0645. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Notification \u062f\u0631 Foreground Service \u06cc\u06a9 \u0642\u0627\u0628\u0644\u06cc\u062a \u062a\u0632\u0626\u06cc\u0646\u06cc \u0646\u06cc\u0633\u062a\u061b \u0628\u062e\u0634\u06cc \u0627\u0632 \u0645\u06a9\u0627\u0646\u06cc\u0632\u0645 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0646\u0627\u0628\u0639 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 Notification \u0627\u062c\u0628\u0627\u0631\u06cc \u0627\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0634\u0627\u06cc\u062f \u0627\u0648\u0644\u06cc\u0646 \u0633\u0624\u0627\u0644\u06cc \u06a9\u0647 \u0628\u0647 \u0630\u0647\u0646\u062a \u0628\u0631\u0633\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0686\u0631\u0627 \u06af\u0648\u06af\u0644 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633 \u0631\u0648 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0631\u062f\u0647 \u0647\u0645\u06cc\u0634\u0647 Notification \u0646\u0645\u0627\u06cc\u0634 \u0628\u062f\u0647. \u062f\u0644\u06cc\u0644\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u06af\u0631 \u0686\u0646\u06cc\u0646 \u0627\u062c\u0628\u0627\u0631\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0647\u0645\u0648\u0646 \u0645\u0634\u06a9\u0644 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc\u200c\u0634\u062f \u0648 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0633\u062a\u0646 \u0628\u0647 \u0628\u0647\u0627\u0646\u0647 Foreground Service \u0633\u0627\u0639\u062a\u200c\u0647\u0627 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u062c\u0631\u0627 \u0628\u0634\u0646\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0648\u0686\u06a9\u200c\u062a\u0631\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0639\u062f \u0627\u0632 \u0634\u0631\u0648\u0639 Foreground Service\u060c Notification \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0646\u062f\u0647\u060c \u0633\u06cc\u0633\u062a\u0645 \u0641\u0631\u0636 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0642\u0648\u0627\u0646\u06cc\u0646 \u0631\u0648 \u0631\u0639\u0627\u06cc\u062a \u0646\u06a9\u0631\u062f\u0647 \u0648 \u0633\u0631\u0648\u06cc\u0633 \u0631\u0648 \u0645\u062a\u0648\u0642\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0647 \u0639\u0628\u0627\u0631\u062a \u062f\u06cc\u06af\u0647\u060c Notification \u0628\u0647\u0627\u06cc\u06cc\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u06af\u0631\u0641\u062a\u0646 \u0627\u062c\u0627\u0632\u0647 \u0627\u062c\u0631\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc\u200c\u062a\u0631 \u067e\u0631\u062f\u0627\u062e\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0628\u0627\u06cc\u062f \u0627\u0632 Foreground Service \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Foreground Service \u0628\u0631\u0627\u06cc <strong>\u06a9\u0627\u0631\u0647\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc \u0648 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647<\/strong> \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647\u060c \u0646\u0647 \u0635\u0631\u0641\u0627\u064b \u06a9\u0627\u0631\u0647\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc. \u0641\u0631\u0636 \u06a9\u0646 Google Maps \u062f\u0631 \u062d\u0627\u0644 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc\u06cc \u0631\u0627\u0646\u0646\u062f\u0647 \u0627\u0633\u062a. \u062d\u062a\u06cc \u0627\u06af\u0631 \u0635\u0641\u062d\u0647 \u06af\u0648\u0634\u06cc \u062e\u0627\u0645\u0648\u0634 \u0628\u0634\u0647 \u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u06cc\u06af\u0647\u200c\u0627\u06cc \u0628\u0634\u0647\u060c \u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc \u0628\u0627\u06cc\u062f \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647 \u0648 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0645\u0646\u0627\u0633\u0628 \u062f\u0633\u062a\u0648\u0631 \u0628\u0639\u062f\u06cc \u0631\u0648 \u0627\u0639\u0644\u0627\u0645 \u06a9\u0646\u0647. \u06cc\u0627 \u062a\u0635\u0648\u0631 \u06a9\u0646 Spotify \u062f\u0631 \u062d\u0627\u0644 \u067e\u062e\u0634 \u0645\u0648\u0633\u06cc\u0642\u06cc\u0647\u061b \u0637\u0628\u06cc\u0639\u06cc \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0628\u0627 \u062e\u0631\u0648\u062c \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0648\u0633\u06cc\u0642\u06cc \u0642\u0637\u0639 \u0628\u0634\u0647. \u0647\u0645\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u062f\u0631\u0628\u0627\u0631\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0636\u0628\u0637 \u0635\u062f\u0627\u060c \u062a\u0645\u0627\u0633 \u062a\u0635\u0648\u06cc\u0631\u06cc\u060c \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0648\u0631\u0632\u0634\u06cc \u06a9\u0647 \u0645\u0633\u06cc\u0631 \u062f\u0648\u06cc\u062f\u0646 \u0631\u0648 \u062b\u0628\u062a \u0645\u06cc\u200c\u06a9\u0646\u0646 \u06cc\u0627 \u062d\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u062d\u0627\u0644 \u0622\u067e\u0644\u0648\u062f \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0628\u0633\u06cc\u0627\u0631 \u0628\u0632\u0631\u06af \u0647\u0633\u062a\u0646 \u0647\u0645 \u0635\u062f\u0642 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062f\u0631 \u0647\u0645\u0647 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u200c\u0647\u0627\u060c \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0627\u0645\u0644\u0627\u064b \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u062d\u062a\u06cc \u0628\u0639\u062f \u0627\u0632 \u062e\u0631\u0648\u062c \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647 \u0648 \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0648\u062c\u0648\u062f \u06cc\u06a9 Notification \u062f\u0627\u0626\u0645\u06cc \u0628\u0631\u0627\u06cc\u0634 \u0645\u0646\u0637\u0642\u06cc\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0647 Foreground Service \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645\u060c \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u06cc\u0686 \u0628\u062e\u0634\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647 \u06a9\u0647 \u0628\u0647 Foreground Service \u0646\u06cc\u0627\u0632 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0642\u06cc\u0645\u062a \u06a9\u0627\u0644\u0627\u0647\u0627 \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u0647\u060c \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0631\u0648 \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0631\u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 Firebase Cloud Messaging \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0637\u0644\u0627\u0639 \u0645\u06cc\u062f\u0647. \u0647\u06cc\u0686\u200c\u06a9\u062f\u0648\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a\u200c\u0647\u0627 \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u0686\u0646\u062f\u06cc\u0646 \u0633\u0627\u0639\u062a \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062f\u0627\u0648\u0645 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0627\u062c\u0631\u0627 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0628\u062e\u0648\u0627\u06cc \u0647\u0631 \u062f\u0647 \u062f\u0642\u06cc\u0642\u0647 \u0642\u06cc\u0645\u062a \u06a9\u0627\u0644\u0627\u0647\u0627 \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc. \u0634\u0627\u06cc\u062f \u062f\u0631 \u0646\u06af\u0627\u0647 \u0627\u0648\u0644 \u0648\u0633\u0648\u0633\u0647 \u0628\u0634\u06cc \u06cc\u06a9 Foreground Service \u0628\u0646\u0648\u06cc\u0633\u06cc \u062a\u0627 \u0647\u0645\u06cc\u0634\u0647 \u0641\u0639\u0627\u0644 \u0628\u0645\u0648\u0646\u0647\u060c \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0637\u0631\u0627\u062d\u06cc \u0627\u0634\u062a\u0628\u0627\u0647\u0647. \u062f\u0631 \u06cc\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc \u062f\u0631\u0633\u062a\u060c \u0627\u06cc\u0646 \u0628\u0631\u0631\u0633\u06cc \u0631\u0648\u06cc <strong>\u0633\u0631\u0648\u0631<\/strong> \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647 \u0648 \u0648\u0642\u062a\u06cc \u0642\u06cc\u0645\u062a \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u060c \u0633\u0631\u0648\u0631 \u0641\u0642\u0637 \u06cc\u06a9 \u0627\u0639\u0644\u0627\u0646 \u0627\u0632 \u0637\u0631\u06cc\u0642 FCM \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647 \u0628\u0627\u062a\u0631\u06cc \u06af\u0648\u0634\u06cc \u0628\u06cc\u0647\u0648\u062f\u0647 \u0645\u0635\u0631\u0641 \u0645\u06cc\u0634\u0647\u060c \u0646\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0627\u0636\u0627\u0641\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647 \u0648 \u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062c\u0628\u0648\u0631 \u0645\u06cc\u0634\u0647 \u062f\u0627\u0626\u0645\u0627\u064b \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0641\u0639\u0627\u0644 \u0628\u0645\u0648\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Foreground Service \u06cc\u0627 WorkManager\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0627\u06cc\u062c\u200c\u062a\u0631\u06cc\u0646 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0641\u06a9\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0647\u0631 \u06a9\u0627\u0631\u06cc \u06a9\u0647 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647 \u0628\u0627\u06cc\u062f \u0628\u0627 Foreground Service \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0628\u0634\u0647. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0645\u0627 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u06a9\u0627\u0631\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u06a9\u0647 <strong>\u0647\u0645\u06cc\u0646 \u0627\u0644\u0622\u0646<\/strong> \u0628\u0627\u06cc\u062f \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645 \u0627\u0632 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646\u0634 \u0622\u06af\u0627\u0647\u0647\u060c Foreground Service \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0646\u0627\u0633\u0628\u06cc\u0647. \u0627\u0645\u0627 \u0627\u06af\u0631 \u0641\u0642\u0637 \u0645\u06cc\u200c\u062e\u0648\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0631 \u0686\u0646\u062f \u0633\u0627\u0639\u062a \u06cc\u06a9 \u0628\u0627\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0631\u0648 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u0647 \u06cc\u0627 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u06a9\u0648\u0686\u06a9 \u0631\u0648 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0634\u0631\u0627\u06cc\u0637 \u0645\u0646\u0627\u0633\u0628 \u0628\u0648\u062f \u0622\u067e\u0644\u0648\u062f \u06a9\u0646\u0647\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b <strong>WorkManager<\/strong> \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0647\u062a\u0631\u06cc\u0647. WorkManager \u0631\u0648\u06cc \u0632\u0645\u0627\u0646 \u062f\u0642\u06cc\u0642 \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0631 \u062d\u0633\u0627\u0633 \u0646\u06cc\u0633\u062a \u0648 \u062e\u0648\u062f\u0634 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0632\u0645\u0627\u0646 \u0631\u0648 \u0628\u0627 \u062a\u0648\u062c\u0647 \u0628\u0647 \u0648\u0636\u0639\u06cc\u062a \u0628\u0627\u062a\u0631\u06cc\u060c \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648 \u0633\u06cc\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 Foreground Service \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc\u0647 \u06a9\u0647 \u062a\u0623\u062e\u06cc\u0631 \u062f\u0631 \u0627\u0648\u0646\u200c\u0647\u0627 \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644 \u0646\u06cc\u0633\u062a \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647 \u0647\u0645\u0627\u0646 \u0644\u062d\u0638\u0647 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0633\u0627\u062e\u062a\u0627\u0631 \u0633\u0627\u062f\u0647 \u06cc\u06a9 Foreground Service<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0648\u0634\u062a\u0646 \u062e\u0648\u062f Foreground Service \u0627\u0632 \u0646\u0638\u0631 \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0646\u062f\u0627\u0631\u0647. \u0627\u0628\u062a\u062f\u0627 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0627\u0632 <code>Service<\/code> \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class MusicService : Service() {\n\n    override fun onBind(intent: Intent?) = null\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">MusicService<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">Service<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onBind<\/span><span style=\"color: #24292E\">(intent: <\/span><span style=\"color: #6F42C1\">Intent<\/span><span style=\"color: #24292E\">?) <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">null<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u062f\u0627\u062e\u0644 <code>onStartCommand()<\/code> \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u0633\u0631\u0648\u06cc\u0633 \u0631\u0648 \u0628\u0647 \u062d\u0627\u0644\u062a Foreground \u0645\u06cc\u200c\u0628\u0631\u06cc\u0645 \u0648 Notification \u0631\u0648 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u062f\u06cc\u0645.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>override fun onStartCommand(\n    intent: Intent?,\n    flags: Int,\n    startId: Int\n): Int {\n\n    startForeground(\n        1,\n        createNotification()\n    )\n\n    return START_NOT_STICKY\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onStartCommand<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    intent: <\/span><span style=\"color: #6F42C1\">Intent<\/span><span style=\"color: #24292E\">?,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    flags: <\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    startId: <\/span><span style=\"color: #6F42C1\">Int<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">): <\/span><span style=\"color: #6F42C1\">Int<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">startForeground<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">createNotification<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> START_NOT_STICKY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0648\u0646\u200c\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc\u060c \u0627\u0632 \u0646\u0638\u0631 \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc \u0628\u062e\u0634 \u0627\u0635\u0644\u06cc Foreground Service \u0641\u0642\u0637 \u0686\u0646\u062f \u062e\u0637\u0647. \u0633\u062e\u062a\u200c\u062a\u0631\u06cc\u0646 \u0642\u0633\u0645\u062a \u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a\u060c \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f \u0646\u06cc\u0633\u062a\u061b \u0628\u0644\u06a9\u0647 \u062a\u0634\u062e\u06cc\u0635 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0622\u06cc\u0627 \u0627\u0635\u0644\u0627\u064b \u067e\u0631\u0648\u0698\u0647 \u0645\u0627 \u0628\u0647 Foreground Service \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u0647 \u06cc\u0627 \u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0642\u062a\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u062a\u0645\u0648\u0645 \u0634\u062f \u0647\u0645 \u0628\u0627\u06cc\u062f \u0633\u0631\u0648\u06cc\u0633 \u0645\u062a\u0648\u0642\u0641 \u0628\u0634\u0647.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>stopSelf()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6F42C1\">stopSelf<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u0647\u060c Notification \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647 \u0648 \u0633\u0631\u0648\u06cc\u0633 \u0647\u0645 \u0645\u0646\u0627\u0628\u0639 \u0633\u06cc\u0633\u062a\u0645 \u0631\u0648 \u0627\u0634\u063a\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0646\u062f \u0627\u0634\u062a\u0628\u0627\u0647 \u0631\u0627\u06cc\u062c<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633 \u0627\u0632 Foreground Service \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0632\u0646\u062f\u0647 \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0631\u062e\u0644\u0627\u0641 \u0641\u0644\u0633\u0641\u0647 \u0637\u0631\u0627\u062d\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u0647 \u0648 \u0645\u0645\u06a9\u0646\u0647 \u062d\u062a\u06cc \u0628\u0627\u0639\u062b \u0645\u062d\u062f\u0648\u062f \u0634\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u0628\u0634\u0647. \u0627\u0634\u062a\u0628\u0627\u0647 \u062f\u06cc\u06af\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Notification \u0628\u0627 \u062a\u0623\u062e\u06cc\u0631 \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647 \u06cc\u0627 \u0627\u0635\u0644\u0627\u064b \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0646\u0634\u0647\u061b \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0633\u0631\u0648\u06cc\u0633 \u0631\u0648 \u0645\u062a\u0648\u0642\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0647\u0645 \u0628\u0639\u062f \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a\u060c \u0633\u0631\u0648\u06cc\u0633 \u0631\u0648 \u0645\u062a\u0648\u0642\u0641 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0646 \u0648 Notification \u0633\u0627\u0639\u062a\u200c\u0647\u0627 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0628\u0627\u0642\u06cc \u0645\u06cc\u200c\u0645\u0648\u0646\u0647 \u06a9\u0647 \u0647\u0645 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0645 \u0645\u0646\u0627\u0628\u0639 \u0633\u06cc\u0633\u062a\u0645 \u0631\u0648 \u0647\u062f\u0631 \u0645\u06cc\u062f\u0647. \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0628\u0639\u0636\u06cc \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0633\u0627\u062f\u0647 \u06cc\u0627 \u0628\u0631\u0631\u0633\u06cc \u062f\u0648\u0631\u0647\u200c\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 Foreground Service \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u0648\u0638\u0627\u06cc\u0641 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627 WorkManager \u06cc\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062f\u06cc\u06af\u0647 \u0628\u0633\u06cc\u0627\u0631 \u0628\u0647\u062a\u0631 \u0648 \u0628\u0647\u06cc\u0646\u0647\u200c\u062a\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Foreground Service \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0645\u06a9\u0627\u0646\u06cc\u0632\u0645\u200c\u0647\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc <strong>\u0639\u0645\u0644\u06cc\u0627\u062a \u0637\u0648\u0644\u0627\u0646\u06cc \u0648 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647<\/strong> \u0627\u0633\u062a. \u062a\u0641\u0627\u0648\u062a \u0627\u0635\u0644\u06cc \u0622\u0646 \u0628\u0627 \u06cc\u06a9 Service \u0645\u0639\u0645\u0648\u0644\u06cc \u062f\u0631 \u0627\u06cc\u0646 \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0642\u062f\u0631\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0631\u062f\u060c \u0628\u0644\u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u062c\u0631\u0627\u06cc \u0622\u0646 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0627\u0645\u0644\u0627\u064b \u0634\u0641\u0627\u0641 \u0627\u0633\u062a \u0648 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u0645\u062f\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0641\u0639\u0627\u0644 \u0628\u0645\u0627\u0646\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u06cc \u0627\u0632 Foreground Service \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u060c \u0647\u0645\u06cc\u0634\u0647 \u0627\u0632 \u062e\u0648\u062f\u062a \u0628\u067e\u0631\u0633: <strong>\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u062f\u060c \u0622\u06cc\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u062f \u0627\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0647\u0645\u0686\u0646\u0627\u0646 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u062f \u0648 \u0627\u0632 \u0627\u062f\u0627\u0645\u0647 \u062f\u0627\u0634\u062a\u0646 \u0622\u0646 \u0647\u0645 \u0628\u0627\u062e\u0628\u0631 \u0628\u0627\u0634\u062f\u061f<\/strong> \u0627\u06af\u0631 \u067e\u0627\u0633\u062e \u0645\u062b\u0628\u062a \u0627\u0633\u062a\u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b Foreground Service \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0631\u0633\u062a\u06cc \u0627\u0633\u062a. \u0627\u0645\u0627 \u0627\u06af\u0631 \u067e\u0627\u0633\u062e \u0645\u0646\u0641\u06cc \u0627\u0633\u062a\u060c \u0628\u0647\u062a\u0631 \u0627\u0633\u062a \u0628\u0647 \u0633\u0631\u0627\u063a \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 <strong>WorkManager<\/strong> \u0628\u0631\u0648\u06cc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0647\u0645 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u062f\u0631\u0633 \u0627\u06cc\u0646 \u0641\u0635\u0644 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0634\u0646\u0627\u062e\u062a \u06cc\u06a9 \u0642\u0627\u0628\u0644\u06cc\u062a \u0641\u0642\u0637 \u0628\u0647 \u0645\u0639\u0646\u06cc \u0628\u0644\u062f \u0628\u0648\u062f\u0646 \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc \u0627\u0648\u0646 \u0646\u06cc\u0633\u062a\u061b \u06af\u0627\u0647\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc\u200c\u062a\u0631\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u062f\u0627\u0646\u06cc <strong>\u0627\u0635\u0644\u0627\u064b \u0646\u0628\u0627\u06cc\u062f \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0686\u0647\u0644\u0645<\/h3>\n\n\n\n<h1 class=\"wp-block-heading\">Background Sync<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0635\u0644\u0627\u064b Background Sync \u0686\u06cc\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0646\u0635\u0628 \u0634\u062f\u0647 \u0648 \u0627\u0648\u0646 \u0627\u0644\u0627\u0646 \u0627\u0635\u0644\u0627\u064b \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0627\u0632 \u0646\u06a9\u0631\u062f\u0647. \u062f\u0631 \u0647\u0645\u06cc\u0646 \u0641\u0627\u0635\u0644\u0647\u060c \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0686\u0646\u062f \u0627\u062a\u0641\u0627\u0642 \u0627\u0641\u062a\u0627\u062f\u0647\u061b \u0642\u06cc\u0645\u062a \u0686\u0646\u062f \u06a9\u0627\u0644\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647\u060c \u06cc\u06a9 \u0641\u0631\u0648\u0634\u06af\u0627\u0647 \u062c\u062f\u06cc\u062f \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0639\u0636\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f\u0647. \u062d\u0627\u0644\u0627 \u0633\u0624\u0627\u0644 \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u06a9\u062c\u0627 \u0628\u0627\u06cc\u062f \u0628\u0641\u0647\u0645\u0647 \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u062a\u0641\u0627\u0642 \u0627\u0641\u062a\u0627\u062f\u0646\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0648\u0644\u06cc\u0646 \u062c\u0648\u0627\u0628\u06cc \u06a9\u0647 \u0634\u0627\u06cc\u062f \u0628\u0647 \u0630\u0647\u0646 \u0628\u0631\u0633\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0631 \u0686\u0646\u062f \u062f\u0642\u06cc\u0642\u0647 \u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0648\u0635\u0644 \u0628\u0634\u0647 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0631\u0648 \u0628\u06af\u06cc\u0631\u0647. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u062f\u0631 \u0646\u06af\u0627\u0647 \u0627\u0648\u0644 \u0633\u0627\u062f\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u0627\u062f\u060c \u0627\u0645\u0627 \u0627\u06af\u0631 \u0645\u06cc\u0644\u06cc\u0648\u0646\u200c\u0647\u0627 \u06af\u0648\u0634\u06cc \u0647\u0631 \u067e\u0646\u062c \u062f\u0642\u06cc\u0642\u0647 \u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0647 \u0633\u0631\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0641\u0631\u0633\u062a\u0646\u060c \u0647\u0645 \u0628\u0627\u062a\u0631\u06cc \u06af\u0648\u0634\u06cc\u200c\u0647\u0627 \u0628\u06cc\u0647\u0648\u062f\u0647 \u0645\u0635\u0631\u0641 \u0645\u06cc\u0634\u0647\u060c \u0647\u0645 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0647\u062f\u0631 \u0645\u06cc\u0631\u0647 \u0648 \u0647\u0645 \u0641\u0634\u0627\u0631 \u0628\u0633\u06cc\u0627\u0631 \u0632\u06cc\u0627\u062f\u06cc \u0628\u0647 \u0633\u0631\u0648\u0631 \u0648\u0627\u0631\u062f \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u0645\u0641\u0647\u0648\u0645 <strong>Background Sync<\/strong> \u0645\u0637\u0631\u062d \u0645\u06cc\u0634\u0647. Background Sync \u06cc\u0639\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0631\u06af\u06cc\u0631 \u0628\u0627\u0634\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062e\u0648\u062f\u0634 \u0631\u0648 \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u0627\u0647\u0646\u06af \u0646\u06af\u0647 \u062f\u0627\u0631\u0647. \u0627\u0644\u0628\u062a\u0647 \u0627\u06cc\u0646 \u0647\u0645\u0627\u0647\u0646\u06af\u200c\u0633\u0627\u0632\u06cc \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u0647\u0631 \u0644\u062d\u0638\u0647 \u0648 \u0647\u0631 \u062b\u0627\u0646\u06cc\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u061b \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u062a\u0644\u0627\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u062f\u0631 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0632\u0645\u0627\u0646 \u0645\u0645\u06a9\u0646 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647 \u062a\u0627 \u0647\u0645 \u0628\u0627\u062a\u0631\u06cc \u06a9\u0645\u062a\u0631 \u0645\u0635\u0631\u0641 \u0628\u0634\u0647 \u0648 \u0647\u0645 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u062e\u0648\u0628\u06cc \u0627\u06cc\u062c\u0627\u062f \u0628\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0631\u0627 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u062e\u0648\u062f\u0634 \u0632\u0645\u0627\u0646 Sync \u0631\u0648 \u062a\u0639\u06cc\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06a9\u0627\u0645\u0644 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u062f\u060c \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u0645\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647\u200c\u0647\u0627 \u0645\u06cc\u200c\u06af\u0641\u062a\u0646:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062d\u0627\u0644\u0627 \u062a\u0635\u0648\u0631 \u06a9\u0646 \u0641\u0642\u0637 \u06f3\u06f0 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0647\u0645\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u0631\u0648 \u0628\u06af\u06cc\u0631\u0646. \u0646\u062a\u06cc\u062c\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u0631 \u0644\u062d\u0638\u0647 \u06cc\u06a9\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0628\u06cc\u062f\u0627\u0631 \u06a9\u0631\u062f\u0646 CPU\u060c \u0631\u0648\u0634\u0646 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648 \u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 \u0633\u0631\u0648\u0631\u0647. \u0686\u0646\u06cc\u0646 \u0648\u0636\u0639\u06cc\u062a\u06cc \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u0628\u0627\u062a\u0631\u06cc \u0631\u0648 \u062e\u0627\u0644\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a \u06a9\u0646\u062a\u0631\u0644 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0631\u0648 \u062a\u0627 \u062d\u062f \u0632\u06cc\u0627\u062f\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0628\u06af\u06cc\u0631\u0647. \u06cc\u0639\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0642\u0637 \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0645\u0646 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u0645 \u06af\u0627\u0647\u06cc \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0628\u0634\u0647\u060c \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644\u0647 \u06a9\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647 \u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647 \u0648\u0642\u062a\u06cc \u06af\u0648\u0634\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0634\u0627\u0631\u0698\u0647\u060c \u0628\u0647 Wi-Fi \u0648\u0635\u0644\u0647 \u06cc\u0627 \u0633\u06cc\u0633\u062a\u0645 \u0627\u062d\u0633\u0627\u0633 \u06a9\u0646\u0647 \u0632\u0645\u0627\u0646 \u0645\u0646\u0627\u0633\u0628\u06cc\u0647\u060c \u0686\u0646\u062f\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0645\u062e\u062a\u0644\u0641 \u0631\u0648 \u0628\u0627 \u0647\u0645 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0647 \u062a\u0627 \u0645\u0646\u0627\u0628\u0639 \u06a9\u0645\u062a\u0631\u06cc \u0645\u0635\u0631\u0641 \u0628\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Background Sync \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u0647 \u0686\u06cc\u0632\u0647\u0627\u06cc\u06cc \u0631\u0648 Sync \u0645\u06cc\u200c\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0641\u0642\u0637 \u062f\u0627\u0646\u0644\u0648\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u06cc\u0633\u062a. \u0647\u0631 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0628\u06cc\u0646 \u06af\u0648\u0634\u06cc \u0648 \u0633\u0631\u0648\u0631 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0645\u0648\u0646\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u062e\u0634\u06cc \u0627\u0632 Background Sync \u0628\u0627\u0634\u0647. \u0645\u062b\u0644\u0627\u064b \u062f\u0631 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0645\u0645\u06a9\u0646\u0647 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0644\u06cc\u0633\u062a \u06a9\u0627\u0644\u0627\u0647\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<\/li>\n\n\n\n<li>\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u067e\u0631\u0648\u0641\u0627\u06cc\u0644<\/li>\n\n\n\n<li>\u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627<\/li>\n\n\n\n<li>\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647<\/li>\n\n\n\n<li>\u062a\u0627\u0631\u06cc\u062e\u0686\u0647 \u062c\u0633\u062a\u062c\u0648 (\u0627\u06af\u0631 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0634\u0647)<\/li>\n\n\n\n<li>\u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u0622\u0641\u0644\u0627\u06cc\u0646 \u0628\u0648\u062f\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062b\u0628\u062a \u0634\u062f\u0647 \u0648 \u062d\u0627\u0644\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u06af\u0627\u0647\u06cc Sync \u0641\u0642\u0637 \u062f\u0627\u0646\u0644\u0648\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u0647\u060c \u06af\u0627\u0647\u06cc \u0641\u0642\u0637 \u0622\u067e\u0644\u0648\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u0647 \u0648 \u062e\u06cc\u0644\u06cc \u0648\u0642\u062a\u200c\u0647\u0627 \u0647\u0645 \u0647\u0631 \u062f\u0648 \u0628\u0627 \u0647\u0645 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0627\u0635\u0644\u0627\u064b \u0628\u0647 Background Sync \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0644\u0647\u060c \u0627\u0645\u0627 \u0646\u0647 \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u0686\u06cc\u0632.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0642\u06cc\u0645\u062a \u06a9\u0627\u0644\u0627\u0647\u0627 \u062f\u0627\u0626\u0645\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646. \u0622\u06cc\u0627 \u0645\u0646\u0637\u0642\u06cc\u0647 \u06af\u0648\u0634\u06cc \u0647\u0631 \u0686\u0646\u062f \u062f\u0642\u06cc\u0642\u0647 \u0647\u0645\u0647 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0646\u0647\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u06cc\u0631.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u0647\u0645\u0648\u0646 \u062c\u0627\u06cc\u06cc\u0647 \u06a9\u0647 <strong>Firebase Cloud Messaging<\/strong> \u06a9\u0647 \u0686\u0646\u062f \u062f\u0631\u0633 \u0642\u0628\u0644 \u06cc\u0627\u062f \u06af\u0631\u0641\u062a\u06cc\u0645\u060c \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0647\u062a\u0631\u06cc\u0647. \u0633\u0631\u0648\u0631 \u0647\u0631 \u0632\u0645\u0627\u0646 \u0642\u06cc\u0645\u062a \u0645\u0647\u0645\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u060c \u0641\u0642\u0637 \u06cc\u06a9 Notification \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u062f\u06cc\u06af\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u06af\u0648\u0634\u06cc \u062f\u0627\u0626\u0645\u0627\u064b \u0627\u0632 \u0633\u0631\u0648\u0631 \u0633\u0624\u0627\u0644 \u0628\u067e\u0631\u0633\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0639\u0636\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0631\u0648 \u0646\u062f\u0627\u0631\u0646. \u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646\u060c \u0686\u0646\u062f \u06a9\u0627\u0644\u0627 \u0631\u0648 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0647. \u062d\u0627\u0644\u0627 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0635\u0644 \u0634\u062f\u0647. \u0627\u06cc\u0646\u062c\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0631\u0648 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647. \u06cc\u0627 \u0628\u0631\u0639\u06a9\u0633\u060c \u0634\u0627\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u0644\u067e\u200c\u062a\u0627\u067e\u0634 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647 \u0648 \u062d\u0627\u0644\u0627 \u06af\u0648\u0634\u06cc \u0628\u0627\u06cc\u062f \u0627\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647. \u0627\u06cc\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0627\u06cc Background Sync \u0645\u062d\u0633\u0648\u0628 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0647\u0645\u06cc\u0634\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0647\u200c\u0631\u0648\u0632 \u0628\u0627\u0634\u0646<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0641\u06a9\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0647\u0645\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0627\u06cc\u062f \u062f\u0631 \u0647\u0645\u0627\u0646 \u0644\u062d\u0638\u0647 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0634\u0646. \u062f\u0631 \u0648\u0627\u0642\u0639 \u0628\u0627\u06cc\u062f \u0627\u0632 \u062e\u0648\u062f\u062a \u0628\u067e\u0631\u0633\u06cc: <strong>\u0627\u06af\u0631 \u0627\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u067e\u0646\u062c \u062f\u0642\u06cc\u0642\u0647 \u062f\u06cc\u0631\u062a\u0631 Sync \u0628\u0634\u0646\u060c \u0648\u0627\u0642\u0639\u0627\u064b \u0686\u0647 \u0627\u062a\u0641\u0627\u0642 \u0628\u062f\u06cc \u0645\u06cc\u0641\u062a\u0647\u061f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062e\u06cc\u0644\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062c\u0648\u0627\u0628 \u0627\u06cc\u0646 \u0633\u0624\u0627\u0644\u0647: \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u06cc\u0686 \u0627\u062a\u0641\u0627\u0642\u06cc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 \u0631\u0646\u06af \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0646\u062c \u062f\u0642\u06cc\u0642\u0647 \u062f\u06cc\u0631\u062a\u0631 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0628\u0634\u0647\u060c \u0645\u0634\u06a9\u0644\u06cc \u067e\u06cc\u0634 \u0646\u0645\u06cc\u0627\u062f. \u0627\u06af\u0631 \u062a\u0627\u0631\u06cc\u062e\u0686\u0647 \u062c\u0633\u062a\u062c\u0648 \u0686\u0646\u062f \u062f\u0642\u06cc\u0642\u0647 \u0628\u0639\u062f \u0645\u0646\u062a\u0642\u0644 \u0628\u0634\u0647 \u0647\u0645 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0647\u0645\u06cc\u062a\u06cc \u0646\u062f\u0627\u0631\u0647. \u067e\u0633 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0628\u0631\u0627\u06cc \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0648\u0686\u06a9\u06cc \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0647 \u0633\u0631\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc. \u062f\u0631 \u0637\u0631\u0627\u062d\u06cc \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u0628\u0632\u0631\u06af\u060c \u0647\u0645\u06cc\u0634\u0647 \u0628\u06cc\u0646 <strong>\u0628\u0647\u200c\u0631\u0648\u0632 \u0628\u0648\u062f\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a<\/strong> \u0648 <strong>\u0645\u0635\u0631\u0641 \u0645\u0646\u0627\u0628\u0639<\/strong> \u06cc\u06a9 \u062a\u0639\u0627\u062f\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Sync \u06cc\u06a9 \u062e\u06cc\u0627\u0628\u0648\u0646 \u062f\u0648\u0637\u0631\u0641\u0647 \u0627\u0633\u062a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062e\u06cc\u0644\u06cc\u200c\u0647\u0627 \u0648\u0642\u062a\u06cc \u06a9\u0644\u0645\u0647 Sync \u0631\u0648 \u0645\u06cc\u200c\u0634\u0646\u0648\u0646\u060c \u0641\u0642\u0637 \u062f\u0627\u0646\u0644\u0648\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0632 \u0633\u0631\u0648\u0631 \u0628\u0647 \u0630\u0647\u0646\u0634\u0648\u0646 \u0645\u06cc\u0627\u062f\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062f\u0648\u0637\u0631\u0641\u0647 \u0627\u0633\u062a. \u06cc\u06a9 \u0633\u0645\u062a\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f \u0627\u0632 \u0633\u0631\u0648\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0646 \u0648 \u0633\u0645\u062a \u062f\u06cc\u06af\u0647\u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u06cc \u06a9\u0647 \u0631\u0648\u06cc \u06af\u0648\u0634\u06cc \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u0634\u0646. \u0627\u06af\u0631 \u0641\u0642\u0637 \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u062f\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u060c \u0628\u0639\u062f \u0627\u0632 \u0645\u062f\u062a\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06af\u0648\u0634\u06cc \u0648 \u0633\u0631\u0648\u0631 \u0628\u0627 \u0647\u0645 \u0645\u062a\u0641\u0627\u0648\u062a \u0645\u06cc\u0634\u0646 \u0648 \u0645\u0634\u06a9\u0644\u0627\u062a \u0645\u062e\u062a\u0644\u0641\u06cc \u0628\u0647 \u0648\u062c\u0648\u062f \u0645\u06cc\u0627\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0647\u0646\u06af\u0627\u0645 Sync \u0627\u0628\u062a\u062f\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u062d\u0644\u06cc \u0631\u0648 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0648 \u0628\u0639\u062f \u0622\u062e\u0631\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0633\u0631\u0648\u0631 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0646 \u062a\u0627 \u0647\u0631 \u062f\u0648 \u0633\u0645\u062a \u0628\u0627 \u0647\u0645 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u06af\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0627\u0634\u0647 \u0686\u06cc\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc Background Sync \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0646\u0628\u0627\u06cc\u062f \u0628\u0627 \u0627\u0648\u0644\u06cc\u0646 \u062e\u0637\u0627 \u0645\u062a\u0648\u0642\u0641 \u0628\u0634\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u0645\u062a\u0631\u0648 \u0686\u0646\u062f \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062e\u0648\u062f\u0634 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647\u060c \u0627\u0645\u0627 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645\u0648\u0646 \u0644\u062d\u0638\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0647\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u06a9\u0633\u062a \u0645\u06cc\u200c\u062e\u0648\u0631\u0647. \u0627\u06cc\u0646 \u0634\u06a9\u0633\u062a \u0646\u0628\u0627\u06cc\u062f \u0628\u0627\u0639\u062b \u0627\u0632 \u0628\u06cc\u0646 \u0631\u0641\u062a\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0631\u0627\u0647 \u062f\u0631\u0633\u062a \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u0628\u062a\u062f\u0627 \u062f\u0627\u062e\u0644 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u06cc\u0627 \u062d\u0627\u0641\u0638\u0647 \u0645\u062d\u0644\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0646 \u0648 \u0647\u0631 \u0632\u0645\u0627\u0646 \u0634\u0631\u0627\u06cc\u0637 \u0645\u0646\u0627\u0633\u0628 \u0634\u062f\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0646. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u062f\u0631 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc\u060c Sync \u0628\u06cc\u0634\u062a\u0631 \u0634\u0628\u06cc\u0647 \u06cc\u06a9 \u0635\u0641 \u0627\u0632 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0645\u0646\u062a\u0638\u0631 \u0627\u062c\u0631\u0627\u0633\u062a \u062a\u0627 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0644\u062d\u0638\u0647\u200c\u0627\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Background Sync \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627 \u0686\u0647 \u0627\u0628\u0632\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u060c \u0631\u0627\u06cc\u062c\u200c\u062a\u0631\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 <strong>WorkManager<\/strong> \u0647\u0633\u062a. \u0686\u0648\u0646 WorkManager \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0635\u0628\u0631 \u06a9\u0646\u0647 \u062a\u0627 \u0634\u0631\u0627\u06cc\u0637 \u0645\u0646\u0627\u0633\u0628 \u0641\u0631\u0627\u0647\u0645 \u0628\u0634\u0647\u061b \u0645\u062b\u0644\u0627\u064b \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0628\u0627\u0634\u0647\u060c \u0628\u0627\u062a\u0631\u06cc \u062e\u06cc\u0644\u06cc \u06a9\u0645 \u0646\u0628\u0627\u0634\u0647 \u06cc\u0627 \u062d\u062a\u06cc \u062f\u0633\u062a\u06af\u0627\u0647 \u062f\u0631 \u062d\u0627\u0644 \u0634\u0627\u0631\u0698 \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0627 \u0641\u0644\u0633\u0641\u0647 Background Sync \u0647\u0645\u0627\u0647\u0646\u06af\u0647\u060c \u0686\u0648\u0646 \u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0642\u0639 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0631 \u0647\u0645\u0627\u0646 \u062b\u0627\u0646\u06cc\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0639\u0645\u0644 \u0645\u0639\u0645\u0648\u0644\u0627\u064b WorkManager \u06cc\u06a9 Worker \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c Worker \u0628\u0627 Repository \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0631\u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Repository \u0647\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u0631\u0648 \u0628\u06cc\u0646 \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0645\u062d\u0644\u06cc \u0648 \u0633\u0631\u0648\u0631 \u0647\u0645\u0627\u0647\u0646\u06af \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 WorkManager \u0641\u0642\u0637 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0631 \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0645\u0646\u0637\u0642 \u0627\u0635\u0644\u06cc \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u062f\u0627\u062e\u0644 \u0644\u0627\u06cc\u0647 Repository \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0633\u0627\u062e\u062a\u0627\u0631 \u0633\u0627\u062f\u0647 \u06cc\u06a9 Background Sync<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0645\u06cc\u200c\u062e\u0648\u0627\u06cc \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0634\u0646. \u06cc\u06a9 Worker \u0633\u0627\u062f\u0647 \u0645\u0645\u06a9\u0646\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0628\u0627\u0634\u0647:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class SyncWorker(\n    context: Context,\n    params: WorkerParameters\n) : CoroutineWorker(context, params) {\n\n    override suspend fun doWork(): Result {\n\n        repository.syncFavorites()\n\n        return Result.success()\n    }\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">SyncWorker<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    params: <\/span><span style=\"color: #6F42C1\">WorkerParameters<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) : <\/span><span style=\"color: #6F42C1\">CoroutineWorker<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #6F42C1\">context<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #6F42C1\">params<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">doWork<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Result<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        repository.<\/span><span style=\"color: #6F42C1\">syncFavorites<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> Result.<\/span><span style=\"color: #6F42C1\">success<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u0639\u0645\u062f\u0627\u064b \u0633\u0627\u062f\u0647 \u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u062a\u0627 \u0627\u06cc\u062f\u0647 \u0627\u0635\u0644\u06cc \u0645\u0634\u062e\u0635 \u0628\u0627\u0634\u0647. \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0648\u0627\u0642\u0639\u06cc\u060c <code>syncFavorites()<\/code> \u062e\u0648\u062f\u0634 \u0645\u0633\u0626\u0648\u0644 \u0627\u0631\u0633\u0627\u0644 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u062d\u0644\u06cc\u060c \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062c\u062f\u06cc\u062f\u060c \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u0647\u0627 \u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0686\u0647 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc\u06cc \u062a\u0648 Background Sync \u067e\u06cc\u0634 \u0645\u06cc\u0627\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0627\u06cc\u062c\u200c\u062a\u0631\u06cc\u0646 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0648\u0686\u06a9 \u0641\u0648\u0631\u0627\u064b \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0647\u0645 \u0628\u0627\u062a\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0645\u0635\u0631\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0645 \u062a\u0639\u062f\u0627\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0633\u0631\u0648\u0631 \u0631\u0648 \u0628\u0647 \u0634\u06a9\u0644 \u063a\u06cc\u0631\u0636\u0631\u0648\u0631\u06cc \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0628\u0631\u0647. \u0627\u0634\u062a\u0628\u0627\u0647 \u062f\u0648\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0631\u0636 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0647\u0645\u06cc\u0634\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u062f\u0631 \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0633\u0627\u0639\u062a\u200c\u0647\u0627 \u0622\u0641\u0644\u0627\u06cc\u0646 \u0628\u0627\u0634\u0647\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0633\u06cc\u0633\u062a\u0645 Sync \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0634\u0631\u0627\u06cc\u0637 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0639\u062f\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0645\u0646\u0637\u0642 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u062f\u0627\u062e\u0644 Activity \u0646\u0648\u0634\u062a\u0647 \u0628\u0634\u0647. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 Activity \u0631\u0648 \u0628\u0628\u0646\u062f\u0647\u060c \u06a9\u0644 \u0639\u0645\u0644\u06cc\u0627\u062a \u0647\u0645 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u0631\u0647. \u0628\u0647\u062a\u0631\u0647 \u0627\u06cc\u0646 \u0645\u0646\u0637\u0642 \u062f\u0631 \u0644\u0627\u06cc\u0647 Repository \u0648 \u0628\u0627 \u06a9\u0645\u06a9 WorkManager \u0627\u062c\u0631\u0627 \u0628\u0634\u0647 \u062a\u0627 \u0628\u0647 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0648\u0627\u0628\u0633\u062a\u0647 \u0646\u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0647\u0645\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0648 \u062f\u0631 \u0647\u0631 \u0628\u0627\u0631 Sync \u062f\u0648\u0628\u0627\u0631\u0647 \u062f\u0627\u0646\u0644\u0648\u062f \u0645\u06cc\u200c\u06a9\u0646\u0646\u060c \u062d\u062a\u06cc \u0627\u06af\u0631 \u0641\u0642\u0637 \u06cc\u06a9 \u0631\u06a9\u0648\u0631\u062f \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0647\u0645 \u067e\u0647\u0646\u0627\u06cc \u0628\u0627\u0646\u062f \u0628\u06cc\u0634\u062a\u0631\u06cc \u0645\u0635\u0631\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0645 \u0633\u0631\u0639\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u06a9\u0627\u0647\u0634 \u0645\u06cc\u062f\u0647. \u0647\u0645\u06cc\u0634\u0647 \u0628\u0647\u062a\u0631\u0647 \u0641\u0642\u0637 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc\u06cc \u0645\u0646\u062a\u0642\u0644 \u0628\u0634\u0646 \u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Background Sync \u06cc\u0639\u0646\u06cc \u0647\u0645\u0627\u0647\u0646\u06af \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0646 \u06af\u0648\u0634\u06cc \u0648 \u0633\u0631\u0648\u0631\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062c\u0628\u0648\u0631 \u0628\u0627\u0634\u0647 \u062e\u0648\u062f\u0634 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u0647\u062f\u0641 \u0627\u0635\u0644\u06cc \u0622\u0646 \u0627\u06cc\u0646 \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0647\u0645\u06cc\u0634\u0647 \u062f\u0631 \u0647\u0645\u0627\u0646 \u0644\u062d\u0638\u0647 \u0628\u0647\u200c\u0631\u0648\u0632 \u0628\u0627\u0634\u0646\u061b \u0647\u062f\u0641 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a <strong>\u062f\u0631 \u0632\u0645\u0627\u0646 \u0645\u0646\u0627\u0633\u0628\u060c \u0628\u0627 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0645\u0635\u0631\u0641 \u0628\u0627\u062a\u0631\u06cc \u0648 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a<\/strong> \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0647\u0645 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0647\u0631 \u062a\u063a\u06cc\u06cc\u0631\u06cc \u0628\u0627 Background Sync \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0647\u0645\u0627\u0646 \u0644\u062d\u0638\u0647 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0637\u0644\u0627\u0639 \u062f\u0627\u062f\u0647 \u0628\u0634\u0646\u060c \u0645\u062b\u0644 \u06a9\u0627\u0647\u0634 \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u06a9\u0627\u0644\u0627\u060c \u0628\u0647\u062a\u0631\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 <strong>Firebase Cloud Messaging<\/strong> \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0646. \u0627\u0645\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u0645\u062b\u0644 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627\u060c \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u06cc \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u0622\u0641\u0644\u0627\u06cc\u0646 \u0628\u0648\u062f\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0646\u060c \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u0645\u0646\u0627\u0633\u0628\u06cc \u0628\u0631\u0627\u06cc Background Sync \u0647\u0633\u062a\u0646. \u062a\u0634\u062e\u06cc\u0635 \u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a\u060c \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0645\u0647\u0627\u0631\u062a\u200c\u0647\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u062d\u0631\u0641\u0647\u200c\u0627\u06cc\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0686\u0647\u0644\u200c\u0648\u06cc\u06a9\u0645<\/h3>\n\n\n\n<h1 class=\"wp-block-heading\">WorkManager<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0635\u0644\u0627\u064b WorkManager \u0686\u0631\u0627 \u0628\u0647 \u0648\u062c\u0648\u062f \u0627\u0648\u0645\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0686\u0646\u062f \u062f\u0631\u0633 \u0642\u0628\u0644 \u062f\u0631\u0628\u0627\u0631\u0647 <strong>Foreground Service<\/strong> \u0648 <strong>Background Sync<\/strong> \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u06cc\u0645. \u062d\u0627\u0644\u0627 \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u06cc\u06a9 \u0633\u0624\u0627\u0644 \u0628\u0631\u0627\u062a \u067e\u06cc\u0634 \u0627\u0648\u0645\u062f\u0647\u061b \u0627\u06af\u0631 \u0642\u0631\u0627\u0631\u0647 \u0628\u0639\u0636\u06cc \u06a9\u0627\u0631\u0647\u0627 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0646\u060c \u067e\u0633 \u0627\u0635\u0644\u0627\u064b WorkManager \u0686\u0647 \u0641\u0631\u0642\u06cc \u0628\u0627 Foreground Service \u062f\u0627\u0631\u0647\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u062c\u0648\u0627\u0628 \u062f\u0627\u062f\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0624\u0627\u0644\u060c \u0627\u0648\u0644 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u06cc\u0645 \u06af\u0648\u06af\u0644 \u0686\u0647 \u0645\u0634\u06a9\u0644\u06cc \u0631\u0648 \u0645\u06cc\u200c\u062e\u0648\u0627\u0633\u062a \u062d\u0644 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u062f\u0627\u062e\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u06a9\u0627\u0631\u0628\u0631 \u06cc\u06a9 \u06a9\u0627\u0644\u0627 \u0631\u0648 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u0627\u06cc\u062f \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0647\u0645 \u0630\u062e\u06cc\u0631\u0647 \u0628\u0634\u0647\u060c \u0627\u0645\u0627 \u0622\u06cc\u0627 \u0644\u0627\u0632\u0645 \u0647\u0633\u062a \u062f\u0642\u06cc\u0642\u0627\u064b \u062f\u0631 \u0647\u0645\u0627\u0646 \u062b\u0627\u0646\u06cc\u0647 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647\u061f \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0646\u0647. \u0627\u06af\u0631 \u067e\u0646\u062c \u062b\u0627\u0646\u06cc\u0647\u060c \u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647 \u06cc\u0627 \u062d\u062a\u06cc \u0686\u0646\u062f \u062f\u0642\u06cc\u0642\u0647 \u0628\u0639\u062f \u0647\u0645 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647\u060c \u0627\u062a\u0641\u0627\u0642 \u062e\u0627\u0635\u06cc \u0646\u0645\u06cc\u0641\u062a\u0647. \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0645\u0647\u0645\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>\u0628\u0627\u0644\u0627\u062e\u0631\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647<\/strong>\u061b \u062d\u062a\u06cc \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0628\u0646\u062f\u0647 \u06cc\u0627 \u06af\u0648\u0634\u06cc \u0631\u0648 \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0627\u0644\u200c\u0647\u0627 \u067e\u06cc\u0634 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u0686\u0646\u06cc\u0646 \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u0627\u0632 Service\u060c AlarmManager \u06cc\u0627 BroadcastReceiver \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0631\u062f\u0646. \u0647\u0631 \u06a9\u062f\u0648\u0645 \u0647\u0645 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627 \u0648 \u062f\u0631\u062f\u0633\u0631\u0647\u0627\u06cc \u062e\u0648\u062f\u0634\u0648\u0646 \u0631\u0648 \u062f\u0627\u0634\u062a\u0646. \u0628\u0639\u0636\u06cc \u0648\u0642\u062a\u200c\u0647\u0627 \u06a9\u0627\u0631 \u0627\u062c\u0631\u0627 \u0646\u0645\u06cc\u200c\u0634\u062f\u060c \u0628\u0639\u0636\u06cc \u0648\u0642\u062a\u200c\u0647\u0627 \u0628\u0639\u062f \u0627\u0632 \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u06af\u0648\u0634\u06cc \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u200c\u0631\u0641\u062a \u0648 \u06af\u0627\u0647\u06cc \u0647\u0645 \u0631\u0648\u06cc \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0631\u0641\u062a\u0627\u0631 \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0634\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0648\u06af\u0644 \u0628\u0631\u0627\u06cc \u062d\u0644 \u0627\u06cc\u0646 \u0622\u0634\u0641\u062a\u06af\u06cc\u060c WorkManager \u0631\u0648 \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f. \u0627\u06cc\u062f\u0647 \u0627\u0635\u0644\u06cc \u062e\u06cc\u0644\u06cc \u0633\u0627\u062f\u0647 \u0628\u0648\u062f: <strong>\u0627\u06af\u0631 \u06a9\u0627\u0631\u06cc \u0645\u0647\u0645\u0647 \u0648 \u0628\u0627\u06cc\u062f \u062d\u062a\u0645\u0627\u064b \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u060c \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 WorkManager \u0628\u0633\u067e\u0627\u0631.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">WorkManager \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u06cc\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WorkManager \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0648\u0646\u0647 \u0627\u0632 Jetpack\u0640\u0647 \u06a9\u0647 \u0648\u0638\u06cc\u0641\u0647 \u062f\u0627\u0631\u0647 <strong>\u06a9\u0627\u0631\u0647\u0627\u06cc \u0642\u0627\u0628\u0644\u200c\u062a\u0639\u0648\u06cc\u0642 (Deferrable Tasks)<\/strong> \u0631\u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u0647. \u0645\u0646\u0638\u0648\u0631 \u0627\u0632 \u0642\u0627\u0628\u0644\u200c\u062a\u0639\u0648\u06cc\u0642 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0647\u0645\u06cc\u0646 \u0627\u0644\u0622\u0646 \u0627\u062c\u0631\u0627 \u0628\u0634\u0646\u060c \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0647\u0645 \u0641\u0631\u0627\u0645\u0648\u0634 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627 \u0631\u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647. \u0627\u06af\u0631 \u0647\u0645\u0648\u0646 \u0644\u062d\u0638\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0627\u0634\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0631\u0648 \u062f\u0648\u0631 \u0628\u0631\u06cc\u0632\u0647. WorkManager \u0627\u0648\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0647 \u0648 \u0647\u0631 \u0632\u0645\u0627\u0646 \u0634\u0631\u0627\u06cc\u0637 \u0645\u0646\u0627\u0633\u0628 \u0634\u062f\u060c \u062e\u0648\u062f\u0634 \u0627\u062c\u0631\u0627\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0648\u0627\u0642\u0639 WorkManager \u0628\u06cc\u0634\u062a\u0631 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f \u0628\u0627\u0634\u0647\u060c \u06cc\u06a9 <strong>\u0645\u062f\u06cc\u0631 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc \u0648 \u062a\u0636\u0645\u06cc\u0646 \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627<\/strong>\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc WorkManager \u0686\u06cc\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0645 \u0641\u0642\u0637 \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc WorkManager \u0631\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0645\u060c \u0627\u0648\u0646 \u0627\u06cc\u0646\u0647: <strong>\u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0627\u0631 \u0628\u0627\u0644\u0627\u062e\u0631\u0647 \u0627\u062c\u0631\u0627 \u0628\u0634\u0647.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u0645\u06a9\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0628\u0628\u0646\u062f\u0647.<\/li>\n\n\n\n<li>\u06af\u0648\u0634\u06cc \u0631\u0648 \u0642\u0641\u0644 \u06a9\u0646\u0647.<\/li>\n\n\n\n<li>\u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0634\u0647.<\/li>\n\n\n\n<li>\u062d\u062a\u06cc \u06af\u0648\u0634\u06cc \u0631\u0648 \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u06a9\u0646\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0627 \u0648\u0642\u062a\u06cc \u0634\u0631\u0627\u06cc\u0637 \u0644\u0627\u0632\u0645 \u0641\u0631\u0627\u0647\u0645 \u0628\u0634\u0647\u060c WorkManager \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0627\u0648\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u0632 WorkManager \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 <strong>\u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0646 \u0627\u0648\u0646\u200c\u0647\u0627 \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644 \u0646\u06cc\u0633\u062a<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">WorkManager \u0686\u0647 \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u0636\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c WorkManager \u0627\u06cc\u0646\u200c\u0647\u0627 \u0647\u0633\u062a\u0646. \u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646 \u0686\u0646\u062f \u06a9\u0627\u0644\u0627 \u0631\u0648 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0647. \u062d\u0627\u0644\u0627 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0635\u0644 \u0634\u062f\u0647 \u0648 \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0646. \u06cc\u0627 \u0641\u0631\u0636 \u06a9\u0646 \u06af\u0632\u0627\u0631\u0634 Crash\u0647\u0627 \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u0631 \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0628\u0634\u0647\u060c \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc Cache \u0628\u0627\u06cc\u062f \u067e\u0627\u06a9 \u0628\u0634\u0646 \u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0644\u06cc \u0647\u0631 \u0686\u0646\u062f \u0633\u0627\u0639\u062a \u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0634\u062a\u0631\u06a9 \u0647\u0645\u0647 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u200c\u0647\u0627 \u0627\u06cc\u0646\u0647 \u06a9\u0647 <strong>\u0647\u06cc\u0686\u200c\u06a9\u062f\u0648\u0645 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u062f\u0642\u06cc\u0642\u0627\u064b \u062f\u0631 \u0647\u0645\u0627\u0646 \u0644\u062d\u0638\u0647 \u0627\u062c\u0631\u0627 \u0628\u0634\u0646\u060c \u0627\u0645\u0627 \u0645\u0647\u0645\u0647 \u06a9\u0647 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0646.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0647 \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u0631\u0648 \u0646\u0628\u0627\u06cc\u062f \u0628\u0647 WorkManager \u0628\u0633\u067e\u0631\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0648\u0646\u200c\u0642\u062f\u0631 \u06a9\u0647 \u062f\u0648\u0646\u0633\u062a\u0646 \u06a9\u0627\u0631\u0628\u0631\u062f\u0647\u0627\u06cc WorkManager \u0645\u0647\u0645\u0647\u060c \u062f\u0648\u0646\u0633\u062a\u0646 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u0634 \u0647\u0645 \u0627\u0647\u0645\u06cc\u062a \u062f\u0627\u0631\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u0648\u0631\u0648\u062f \u0632\u062f\u0647. \u0637\u0628\u06cc\u0639\u062a\u0627\u064b \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0647 \u0646\u062a\u06cc\u062c\u0647 \u0686\u0646\u062f \u0644\u062d\u0638\u0647 \u0628\u0639\u062f \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0628\u0634\u0647. \u0627\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0646\u0628\u0627\u06cc\u062f \u0648\u0627\u0631\u062f WorkManager \u0628\u0634\u0647\u060c \u0686\u0648\u0646 \u06cc\u06a9 \u06a9\u0627\u0631 \u062a\u0639\u0627\u0645\u0644\u06cc\u0647 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0646\u062a\u0638\u0631 \u0646\u062a\u06cc\u062c\u0647 \u0627\u0633\u062a. \u06cc\u0627 \u0641\u0631\u0636 \u06a9\u0646 Google Maps \u062f\u0631 \u062d\u0627\u0644 \u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc\u0647. \u0627\u06cc\u0646 \u0647\u0645 \u0646\u0628\u0627\u06cc\u062f \u0628\u0627 WorkManager \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u060c \u0686\u0648\u0646 \u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc \u0628\u0627\u06cc\u062f \u0647\u0645\u0627\u0646 \u0644\u062d\u0638\u0647 \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc\u060c \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0646\u062a\u0638\u0631 \u0646\u062a\u06cc\u062c\u0647 \u0622\u0646\u06cc \u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a \u0628\u0627\u0634\u0647\u060c WorkManager \u0627\u0646\u062a\u062e\u0627\u0628 \u0645\u0646\u0627\u0633\u0628\u06cc \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">WorkManager \u0628\u0627 Foreground Service \u0686\u0647 \u0641\u0631\u0642\u06cc \u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u062f\u0648 \u062e\u06cc\u0644\u06cc \u0648\u0642\u062a\u200c\u0647\u0627 \u0628\u0627 \u0647\u0645 \u0627\u0634\u062a\u0628\u0627\u0647 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0646\u060c \u0627\u0645\u0627 \u0647\u062f\u0641\u0634\u0648\u0646 \u06a9\u0627\u0645\u0644\u0627\u064b \u0645\u062a\u0641\u0627\u0648\u062a\u0647. Foreground Service \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc\u0647 \u06a9\u0647 <strong>\u0627\u0644\u0622\u0646<\/strong> \u0628\u0627\u06cc\u062f \u0627\u062f\u0627\u0645\u0647 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645 \u0627\u0632 \u0627\u062c\u0631\u0627\u06cc \u0627\u0648\u0646\u200c\u0647\u0627 \u0628\u0627\u062e\u0628\u0631\u0647. \u0645\u062b\u0644 \u067e\u062e\u0634 \u0645\u0648\u0633\u06cc\u0642\u06cc\u060c \u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc \u06cc\u0627 \u0636\u0628\u0637 \u0635\u062f\u0627.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 WorkManager \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc\u0647 \u06a9\u0647 <strong>\u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0647\u0645\u06cc\u0646 \u0627\u0644\u0622\u0646 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0646<\/strong>. \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0645\u0637\u0645\u0626\u0646 \u0628\u0627\u0634\u06cc\u0645 \u0628\u0627\u0644\u0627\u062e\u0631\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0646. \u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0645 \u062e\u06cc\u0644\u06cc \u062e\u0644\u0627\u0635\u0647 \u062a\u0641\u0627\u0648\u062a\u0634\u0648\u0646 \u0631\u0648 \u0628\u06af\u0645:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Foreground Service \u0645\u06cc\u06af\u0647: \u0647\u0645\u06cc\u0646 \u0627\u0644\u0622\u0646 \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0645.<br>WorkManager \u0645\u06cc\u06af\u0647: \u0647\u0631 \u0648\u0642\u062a \u0634\u0631\u0627\u06cc\u0637 \u0645\u0646\u0627\u0633\u0628 \u0634\u062f \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0645\u060c \u0648\u0644\u06cc \u062d\u062a\u0645\u0627\u064b \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0645.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u06cc\u0646 \u0627\u06cc\u0646 \u062f\u0648 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u062e\u06cc\u0644\u06cc \u0633\u0627\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">WorkManager \u0627\u0632 \u06a9\u062c\u0627 \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u0627\u0644\u0627\u0646 \u0632\u0645\u0627\u0646 \u0645\u0646\u0627\u0633\u0628\u06cc \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u062c\u0630\u0627\u0628\u200c\u062a\u0631\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc WorkManager \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062e\u0648\u062f\u0634 \u0628\u0627 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u0647\u0645\u06a9\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062b\u0644\u0627\u064b \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0635\u0628\u0631 \u06a9\u0646\u0647 \u062a\u0627:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0628\u0631\u0642\u0631\u0627\u0631 \u0628\u0634\u0647.<\/li>\n\n\n\n<li>\u0628\u0627\u062a\u0631\u06cc \u062e\u06cc\u0644\u06cc \u06a9\u0645 \u0646\u0628\u0627\u0634\u0647.<\/li>\n\n\n\n<li>\u06af\u0648\u0634\u06cc \u062f\u0631 \u062d\u0627\u0644 \u0634\u0627\u0631\u0698 \u0628\u0627\u0634\u0647.<\/li>\n\n\n\n<li>\u0641\u0636\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0627\u0641\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0627\u06cc\u0646 \u0634\u0631\u0627\u06cc\u0637\u060c <strong>Constraints<\/strong> \u06af\u0641\u062a\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0645\u06cc\u06af\u0647: \u0627\u0644\u0622\u0646 \u0627\u062c\u0631\u0627 \u0634\u0648.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0644\u06a9\u0647 \u0645\u06cc\u06af\u0647: \u0647\u0631 \u0648\u0642\u062a \u0627\u06cc\u0646 \u0634\u0631\u0627\u06cc\u0637 \u0628\u0631\u0642\u0631\u0627\u0631 \u0634\u062f\u060c \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u0647\u0645\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0645\u0635\u0631\u0641 \u0628\u0627\u062a\u0631\u06cc \u0648 \u0645\u0646\u0627\u0628\u0639 \u0633\u06cc\u0633\u062a\u0645 \u062e\u06cc\u0644\u06cc \u0628\u0647\u06cc\u0646\u0647\u200c\u062a\u0631 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Worker \u0686\u06cc\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0648\u0646\u200c\u0637\u0648\u0631 \u06a9\u0647 Activity \u0645\u062d\u0644 \u0627\u062c\u0631\u0627\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc\u0647\u060c \u062f\u0631 WorkManager \u0647\u0645 \u0648\u0627\u062d\u062f \u0627\u0635\u0644\u06cc \u0627\u062c\u0631\u0627 <strong>Worker<\/strong> \u0646\u0627\u0645 \u062f\u0627\u0631\u0647. \u0647\u0631 Worker \u0641\u0642\u0637 \u0645\u0633\u0626\u0648\u0644 \u0627\u0646\u062c\u0627\u0645 <strong>\u06cc\u06a9 \u06a9\u0627\u0631 \u0645\u0634\u062e\u0635\u0647.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sync \u06a9\u0631\u062f\u0646 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627<\/li>\n\n\n\n<li>\u0627\u0631\u0633\u0627\u0644 \u06af\u0632\u0627\u0631\u0634 \u062e\u0637\u0627<\/li>\n\n\n\n<li>\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc Cache<\/li>\n\n\n\n<li>\u0622\u067e\u0644\u0648\u062f \u0639\u06a9\u0633 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647\u062a\u0631\u0647 \u0647\u0631 Worker \u0641\u0642\u0637 \u06cc\u06a9 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647. \u0627\u06af\u0631 \u06cc\u06a9 Worker \u062f\u0647 \u06a9\u0627\u0631 \u0645\u062e\u062a\u0644\u0641 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647\u060c \u0647\u0645 \u062a\u0633\u062a \u06a9\u0631\u062f\u0646\u0634 \u0633\u062e\u062a \u0645\u06cc\u0634\u0647 \u0648 \u0647\u0645 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc\u0634.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u06cc\u06a9 Worker \u0633\u0627\u062f\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0645\u06cc\u200c\u062e\u0648\u0627\u06cc \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u0627\u0647\u0646\u06af \u0628\u0634\u0646.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class SyncFavoritesWorker(\n    context: Context,\n    params: WorkerParameters\n) : CoroutineWorker(context, params) {\n\n    override suspend fun doWork(): Result {\n\n        repository.syncFavorites()\n\n        return Result.success()\n    }\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">SyncFavoritesWorker<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    params: <\/span><span style=\"color: #6F42C1\">WorkerParameters<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) : <\/span><span style=\"color: #6F42C1\">CoroutineWorker<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #6F42C1\">context<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #6F42C1\">params<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">suspend<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">doWork<\/span><span style=\"color: #24292E\">(): <\/span><span style=\"color: #6F42C1\">Result<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        repository.<\/span><span style=\"color: #6F42C1\">syncFavorites<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> Result.<\/span><span style=\"color: #6F42C1\">success<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0645\u0627\u0645 \u06a9\u0627\u0631\u06cc \u06a9\u0647 Worker \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0647 \u062f\u0627\u062e\u0644 \u062a\u0627\u0628\u0639 <code>doWork<\/code> \u0646\u0648\u0634\u062a\u0647 \u0645\u06cc\u0634\u0647.<br>\u0627\u06af\u0631 \u0639\u0645\u0644\u06cc\u0627\u062a \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u060c <code>Result.success<\/code> \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u06cc\u0645.<br>\u0627\u06af\u0631 \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 \u0628\u0639\u062f\u0627\u064b \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u0628\u0634\u0647\u060c \u0627\u0632 <code>Result.retry<\/code> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<br>\u0627\u06af\u0631 \u0647\u0645 \u0639\u0645\u0644\u06cc\u0627\u062a \u0642\u0627\u0628\u0644 \u0627\u0646\u062c\u0627\u0645 \u0646\u0628\u0627\u0634\u0647\u060c <code>Result.failure<\/code> \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0637\u0648\u0631\u06cc WorkManager \u0631\u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u062e\u062a Worker\u060c \u0628\u0627\u06cc\u062f \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 WorkManager \u0645\u0639\u0631\u0641\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>val request =\n    OneTimeWorkRequestBuilder&lt;SyncFavoritesWorker>()\n        .build()\n\nWorkManager\n    .getInstance(context)\n    .enqueue(request)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> request <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">OneTimeWorkRequestBuilder<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">SyncFavoritesWorker<\/span><span style=\"color: #24292E\">&gt;()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">build<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">WorkManager<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">getInstance<\/span><span style=\"color: #24292E\">(context)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    .<\/span><span style=\"color: #6F42C1\">enqueue<\/span><span style=\"color: #24292E\">(request)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u06cc\u0646 \u0686\u0646\u062f \u062e\u0637 \u06a9\u0627\u0641\u06cc\u0647 \u062a\u0627 WorkManager \u0645\u0633\u0626\u0648\u0644 \u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0634\u0647. \u0627\u0632 \u0627\u06cc\u0646 \u0644\u062d\u0638\u0647 \u0628\u0647 \u0628\u0639\u062f\u060c \u062f\u06cc\u06af\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a \u0646\u06af\u0631\u0627\u0646 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc \u0627\u0648\u0646 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u06a9\u0627\u0631\u0647\u0627\u06cc \u06cc\u06a9\u200c\u0628\u0627\u0631\u0647 \u0648 \u062a\u06a9\u0631\u0627\u0631\u0634\u0648\u0646\u062f\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0647 \u06a9\u0627\u0631\u0647\u0627 \u0634\u0628\u06cc\u0647 \u0647\u0645 \u0646\u06cc\u0633\u062a\u0646. \u0628\u0639\u0636\u06cc \u06a9\u0627\u0631\u0647\u0627 \u0641\u0642\u0637 \u06cc\u06a9 \u0628\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0646. \u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0627\u0631\u0633\u0627\u0644 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f<\/li>\n\n\n\n<li>\u0622\u067e\u0644\u0648\u062f \u06cc\u06a9 \u0639\u06a9\u0633<\/li>\n\n\n\n<li>\u0627\u0631\u0633\u0627\u0644 \u06af\u0632\u0627\u0631\u0634 Crash<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0645\u0627 \u0628\u0639\u0636\u06cc \u06a9\u0627\u0631\u0647\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0648\u0631\u0647\u200c\u0627\u06cc \u0627\u062c\u0631\u0627 \u0628\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 Cache<\/li>\n\n\n\n<li>Sync \u06a9\u0631\u062f\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a<\/li>\n\n\n\n<li>\u0628\u0631\u0631\u0633\u06cc \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0646\u0648\u0639 \u06a9\u0627\u0631\u0647\u0627 \u0645\u06cc\u0634\u0647 \u0627\u0632 <strong>Periodic Work<\/strong> \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f \u062a\u0627 WorkManager \u062e\u0648\u062f\u0634 \u062f\u0631 \u0628\u0627\u0632\u0647\u200c\u0647\u0627\u06cc \u0632\u0645\u0627\u0646\u06cc \u0645\u0634\u062e\u0635 \u0627\u0648\u0646\u200c\u0647\u0627 \u0631\u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u06af\u0631 \u0627\u062c\u0631\u0627\u06cc Worker \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u0647 \u0686\u06cc\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u06cc\u0686 \u062a\u0636\u0645\u06cc\u0646\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647 \u06a9\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0647\u0645\u06cc\u0634\u0647 \u062f\u0631 \u0627\u0648\u0644\u06cc\u0646 \u062a\u0644\u0627\u0634 \u0645\u0648\u0641\u0642 \u0628\u0627\u0634\u0647. \u0645\u0645\u06a9\u0646\u0647:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0627\u0634\u0647.<\/li>\n\n\n\n<li>\u0633\u0631\u0648\u0631 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u0628\u0627\u0634\u0647.<\/li>\n\n\n\n<li>Timeout \u0627\u062a\u0641\u0627\u0642 \u0628\u06cc\u0641\u062a\u0647.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0634\u0631\u0627\u06cc\u0637 \u0646\u0628\u0627\u06cc\u062f \u0633\u0631\u06cc\u0639 \u062a\u0633\u0644\u06cc\u0645 \u0628\u0634\u06cc\u0645. \u0627\u06af\u0631 \u0627\u062d\u062a\u0645\u0627\u0644 \u0645\u06cc\u062f\u06cc \u0645\u0634\u06a9\u0644 \u0645\u0648\u0642\u062a\u06cc\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc <code>Result.retry<\/code> \u0628\u0631\u06af\u0631\u062f\u0648\u0646\u06cc \u062a\u0627 WorkManager \u0628\u0639\u062f\u0627\u064b \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u0628\u06a9\u0646\u0647. \u0627\u06cc\u0646 \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0645\u0632\u06cc\u062a\u200c\u0647\u0627\u06cc WorkManager \u0646\u0633\u0628\u062a \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u06cc Thread\u0647\u0627 \u06cc\u0627 Coroutine\u0647\u0627\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0686\u0647 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc\u06cc \u062a\u0648 WorkManager \u067e\u06cc\u0634 \u0645\u06cc\u0627\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0627\u06cc\u062c\u200c\u062a\u0631\u06cc\u0646 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u0632 WorkManager \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc \u0641\u0648\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0634\u0647. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0646\u062a\u0638\u0631 \u0646\u062a\u06cc\u062c\u0647 \u0647\u0645\u0648\u0646 \u0644\u062d\u0638\u0647 \u0627\u0633\u062a\u060c WorkManager \u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0631\u0633\u062a\u06cc \u0646\u06cc\u0633\u062a. \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0639\u062f\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062f\u0627\u062e\u0644 Worker \u0645\u0646\u0637\u0642\u200c\u0647\u0627\u06cc \u062e\u06cc\u0644\u06cc \u0628\u0632\u0631\u06af \u0648 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0646\u0648\u0634\u062a\u0647 \u0628\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 Worker \u0641\u0642\u0637 \u0646\u0642\u0634 \u0647\u0645\u0627\u0647\u0646\u06af\u200c\u06a9\u0646\u0646\u062f\u0647 \u0631\u0648 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u0648 \u0645\u0646\u0637\u0642 \u0627\u0635\u0644\u06cc \u062f\u0627\u062e\u0644 Repository \u06cc\u0627 Use Case \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u062f\u06cc\u06af\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0647\u0631 \u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647 \u06cc\u06a9 Worker \u062c\u062f\u06cc\u062f \u0633\u0627\u062e\u062a\u0647 \u0628\u0634\u0647. WorkManager \u0628\u0631\u0627\u06cc \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0646\u0634\u062f\u0647 \u0648 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0647\u0645 \u0645\u0635\u0631\u0641 \u0645\u0646\u0627\u0628\u0639 \u0631\u0648 \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0628\u0631\u0647 \u0648 \u0647\u0645 \u0646\u062a\u06cc\u062c\u0647 \u0645\u0637\u0644\u0648\u0628\u06cc \u0646\u062f\u0627\u0631\u0647. \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0628\u0639\u062f \u0627\u0632 \u0647\u0631 \u062e\u0637\u0627 <code>Result.failure<\/code> \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0648\u0646\u0646\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u062e\u06cc\u0644\u06cc \u0627\u0632 \u062e\u0637\u0627\u0647\u0627 \u0645\u0648\u0642\u062a\u06cc \u0647\u0633\u062a\u0646 \u0648 \u0628\u0647\u062a\u0631\u0647 \u0628\u0627 <code>Result.retry<\/code> \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0645\u062a\u062d\u0627\u0646 \u0628\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WorkManager \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc Jetpack \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u0633\u062a. \u0641\u0644\u0633\u0641\u0647 \u0627\u0635\u0644\u06cc \u0627\u0648\u0646 \u0627\u06cc\u0646 \u0646\u06cc\u0633\u062a \u06a9\u0647 \u06a9\u0627\u0631\u0647\u0627 \u0631\u0627 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0647\u060c \u0628\u0644\u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u062f \u0645\u0637\u0645\u0626\u0646 \u0628\u0634\u0647 <strong>\u06a9\u0627\u0631\u0647\u0627\u06cc \u0645\u0647\u0645 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0646<\/strong>\u061b \u062d\u062a\u06cc \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u06af\u0648\u0634\u06cc \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u0647 \u06cc\u0627 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0645\u0648\u0642\u062a\u0627\u064b \u0642\u0637\u0639 \u0634\u062f\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 <strong>\u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/strong>\u060c WorkManager \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u062e\u06cc\u0644\u06cc \u062e\u0648\u0628\u06cc \u0628\u0631\u0627\u06cc \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u060c \u0627\u0631\u0633\u0627\u0644 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u062f\u0631 \u062d\u0627\u0644\u062a \u0622\u0641\u0644\u0627\u06cc\u0646\u060c \u067e\u0627\u06a9\u200c\u0633\u0627\u0632\u06cc \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0645\u0648\u0642\u062a \u06cc\u0627 \u0647\u0631 \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u06cc\u06af\u0647\u200c\u0627\u06cc \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0641\u0648\u0631\u06cc\u062a \u0646\u062f\u0627\u0631\u0647\u060c \u0627\u0645\u0627 \u0646\u0628\u0627\u06cc\u062f \u0641\u0631\u0627\u0645\u0648\u0634 \u0628\u0634\u0647. \u0647\u0631 \u0648\u0642\u062a \u0628\u0627 \u0686\u0646\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647\u200c\u0627\u06cc \u0631\u0648\u0628\u0647\u200c\u0631\u0648 \u0634\u062f\u06cc\u060c \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0633\u0631\u0627\u063a Service \u06cc\u0627 Thread\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0628\u0631\u06cc\u060c \u0627\u0648\u0644 \u0627\u0632 \u062e\u0648\u062f\u062a \u0628\u067e\u0631\u0633: <strong>\u0622\u06cc\u0627 \u0641\u0642\u0637 \u0645\u06cc\u200c\u062e\u0648\u0627\u0645 \u0645\u0637\u0645\u0626\u0646 \u0628\u0634\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u0644\u0627\u062e\u0631\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647\u061f<\/strong> \u0627\u06af\u0631 \u062c\u0648\u0627\u0628 \u0645\u062b\u0628\u062a \u0628\u0648\u062f\u060c \u0627\u062d\u062a\u0645\u0627\u0644 \u062e\u06cc\u0644\u06cc \u0632\u06cc\u0627\u062f WorkManager \u0647\u0645\u0648\u0646 \u0627\u0628\u0632\u0627\u0631\u06cc\u0647 \u06a9\u0647 \u062f\u0646\u0628\u0627\u0644\u0634 \u0647\u0633\u062a\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0686\u0647\u0644\u200c\u0648\u062f\u0648\u0645<\/h3>\n\n\n\n<h1 class=\"wp-block-heading\">Broadcast Receiver<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0635\u0644\u0627\u064b Broadcast Receiver \u0686\u0631\u0627 \u0628\u0647 \u0648\u062c\u0648\u062f \u0627\u0648\u0645\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u062f\u0627\u062e\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0646\u0634\u0633\u062a\u06cc \u0648 \u062f\u0627\u0631\u06cc \u0642\u06cc\u0645\u062a \u06cc\u06a9 \u0644\u067e\u200c\u062a\u0627\u067e \u0631\u0648 \u0646\u06af\u0627\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc. \u0646\u0627\u06af\u0647\u0627\u0646 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06af\u0648\u0634\u06cc \u0642\u0637\u0639 \u0645\u06cc\u0634\u0647. \u0627\u0632 \u06a9\u062c\u0627 \u0628\u0627\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0641\u0647\u0645\u0647 \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0627\u0632 \u0628\u06cc\u0646 \u0631\u0641\u062a\u0647\u061f \u06cc\u0627 \u0641\u0631\u0636 \u06a9\u0646 \u0634\u0627\u0631\u0698\u0631 \u0631\u0648 \u0628\u0647 \u06af\u0648\u0634\u06cc \u0648\u0635\u0644 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u060c \u062d\u0627\u0644\u062a \u0647\u0648\u0627\u067e\u06cc\u0645\u0627 \u0631\u0648 \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u06cc \u06cc\u0627 \u0632\u0628\u0627\u0646 \u06af\u0648\u0634\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0622\u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u06cc\u062f \u0647\u0631 \u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647 \u06cc\u06a9 \u0628\u0627\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0647\u061f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0648\u0627\u0636\u062d\u0647 \u06a9\u0647 \u0686\u0646\u06cc\u0646 \u06a9\u0627\u0631\u06cc \u0627\u0635\u0644\u0627\u064b \u0645\u0646\u0637\u0642\u06cc \u0646\u06cc\u0633\u062a. \u0627\u06af\u0631 \u0647\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0627\u0626\u0645\u0627\u064b \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u0628\u067e\u0631\u0633\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0635\u0644 \u0634\u062f\u061f\u060c \u0634\u0627\u0631\u0698\u0631 \u0648\u0635\u0644 \u0634\u062f\u061f\u060c \u0628\u0627\u062a\u0631\u06cc \u0686\u0642\u062f\u0631\u0647\u061f\u060c \u0647\u0645 \u0628\u0627\u062a\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0645\u0635\u0631\u0641 \u0645\u06cc\u0634\u0647 \u0648 \u0647\u0645 \u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647 \u0628\u06cc\u0647\u0648\u062f\u0647 \u062f\u0631\u06af\u06cc\u0631 \u0645\u06cc\u0634\u0647. \u0628\u0631\u0627\u06cc \u062d\u0644 \u0647\u0645\u06cc\u0646 \u0645\u0634\u06a9\u0644\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u06cc\u06a9 \u0645\u062f\u0644 \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u0628\u0631 \u067e\u0627\u06cc\u0647 <strong>\u0627\u0639\u0644\u0627\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627<\/strong> \u0637\u0631\u0627\u062d\u06cc \u06a9\u0631\u062f\u0647. \u06cc\u0639\u0646\u06cc \u0647\u0631 \u0648\u0642\u062a \u0627\u062a\u0641\u0627\u0642 \u0645\u0647\u0645\u06cc \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0628\u06cc\u0641\u062a\u0647\u060c \u062e\u0648\u062f \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0648\u0646 \u062e\u0628\u0631 \u0631\u0648 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f \u0647\u0633\u062a\u0646 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0628\u0632\u0627\u0631\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c <strong>Broadcast Receiver<\/strong> \u0646\u0627\u0645 \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Broadcast \u06cc\u0639\u0646\u06cc \u0686\u06cc\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06a9\u0644\u0645\u0647 <strong>Broadcast<\/strong> \u06cc\u0639\u0646\u06cc \u067e\u062e\u0634 \u0647\u0645\u06af\u0627\u0646\u06cc. \u062a\u0635\u0648\u0631 \u06a9\u0646 \u06cc\u06a9 \u0645\u062f\u0631\u0633\u0647 \u0632\u0646\u06af \u062a\u0641\u0631\u06cc\u062d \u0631\u0648 \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0645\u062f\u06cc\u0631 \u0645\u062f\u0631\u0633\u0647 \u062a\u06a9\u200c\u062a\u06a9 \u06a9\u0644\u0627\u0633\u200c\u0647\u0627 \u0631\u0648 \u062e\u0628\u0631 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0628\u0644\u06a9\u0647 \u0641\u0642\u0637 \u0632\u0646\u06af \u0645\u062f\u0631\u0633\u0647 \u0628\u0647 \u0635\u062f\u0627 \u062f\u0631\u0645\u06cc\u0627\u062f \u0648 \u0647\u0631 \u06a9\u0633\u06cc \u06a9\u0647 \u0627\u0648\u0646 \u0632\u0646\u06af \u0628\u0631\u0627\u0634 \u0645\u0639\u0646\u06cc \u062f\u0627\u0631\u0647\u060c \u0648\u0627\u06a9\u0646\u0634 \u0646\u0634\u0648\u0646 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Broadcast \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u062f\u0642\u06cc\u0642\u0627\u064b \u0647\u0645\u06cc\u0646 \u0627\u06cc\u062f\u0647 \u0631\u0648 \u062f\u0627\u0631\u0647. \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u0639\u0645\u0648\u0645\u06cc \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0648\u0646 \u067e\u06cc\u0627\u0645 \u062b\u0628\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0627\u0648\u0646 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647. \u062f\u0631 \u0648\u0627\u0642\u0639 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u062f\u0646\u0628\u0627\u0644 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0646\u0645\u06cc\u200c\u06af\u0631\u062f\u0647\u061b \u0641\u0642\u0637 \u067e\u06cc\u0627\u0645 \u0631\u0648 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0627\u06cc\u0646 Receiver\u0647\u0627 \u0647\u0633\u062a\u0646 \u06a9\u0647 \u0628\u0647 \u0627\u0648\u0646 \u06af\u0648\u0634 \u0645\u06cc\u062f\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Broadcast Receiver \u062f\u0642\u06cc\u0642\u0627\u064b \u0686\u06cc\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Broadcast Receiver \u06cc\u06a9 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u0647 \u06a9\u0647 \u0648\u0638\u06cc\u0641\u0647\u200c\u0627\u0634 <strong>\u0648\u0627\u06a9\u0646\u0634 \u0646\u0634\u0648\u0646 \u062f\u0627\u062f\u0646 \u0628\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f<\/strong>\u0647. \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Receiver \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u062e\u0648\u062f\u0634 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0633\u0646\u06af\u06cc\u0646 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u0646\u0642\u0634 \u0627\u0648\u0646 \u0628\u06cc\u0634\u062a\u0631 \u0634\u0628\u06cc\u0647 \u06cc\u06a9 \u0646\u06af\u0647\u0628\u0627\u0646\u0647\u061b \u0645\u0646\u062a\u0638\u0631 \u0645\u06cc\u200c\u0645\u0648\u0646\u0647 \u062a\u0627 \u0627\u062a\u0641\u0627\u0642 \u062e\u0627\u0635\u06cc \u0628\u06cc\u0641\u062a\u0647\u060c \u0628\u0639\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0627\u0632 \u0627\u0648\u0646 \u0627\u062a\u0641\u0627\u0642 \u0628\u0627\u062e\u0628\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0648\u0642\u062a\u06cc \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0635\u0644 \u0645\u06cc\u0634\u0647\u060c Receiver \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0645\u062a\u0648\u062c\u0647 \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0628\u0634\u0647 \u0648 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u06af\u0647 \u062d\u0627\u0644\u0627 \u0632\u0645\u0627\u0646 \u0645\u0646\u0627\u0633\u0628\u06cc \u0628\u0631\u0627\u06cc \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u0647. \u06cc\u0627 \u0648\u0642\u062a\u06cc \u06af\u0648\u0634\u06cc \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u0645\u06cc\u0634\u0647\u060c Receiver \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u0639\u0636\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Receiver \u062e\u0648\u062f\u0634 \u0645\u062d\u0644 \u0627\u0646\u062c\u0627\u0645 \u0639\u0645\u0644\u06cc\u0627\u062a \u0646\u06cc\u0633\u062a\u061b \u0641\u0642\u0637 <strong>\u062f\u0631\u0648\u0627\u0632\u0647 \u0648\u0631\u0648\u062f \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627<\/strong> \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Broadcast\u0647\u0627 \u0627\u0632 \u06a9\u062c\u0627 \u0645\u06cc\u0627\u0646\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0647 Broadcast\u0647\u0627 \u0627\u0632 \u06cc\u06a9 \u062c\u0627 \u0627\u0631\u0633\u0627\u0644 \u0646\u0645\u06cc\u0634\u0646. \u0628\u0639\u0636\u06cc \u0627\u0632 \u0627\u0648\u0646\u200c\u0647\u0627 \u062a\u0648\u0633\u0637 \u062e\u0648\u062f \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u0634\u0646 \u0648 \u0628\u0639\u0636\u06cc \u062f\u06cc\u06af\u0647 \u0631\u0648 \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u0648\u0635\u0644 \u0634\u062f\u0646 \u0634\u0627\u0631\u0698\u0631\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0632\u0628\u0627\u0646 \u062f\u0633\u062a\u06af\u0627\u0647\u060c \u062a\u063a\u06cc\u06cc\u0631 \u0633\u0627\u0639\u062a\u060c \u06a9\u0645 \u0634\u062f\u0646 \u0634\u062f\u06cc\u062f \u0628\u0627\u062a\u0631\u06cc \u06cc\u0627 \u067e\u0627\u06cc\u0627\u0646 \u0628\u0648\u062a \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc \u0631\u0648 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0627\u0632 \u0637\u0631\u0641 \u062f\u06cc\u06af\u0647\u060c \u062e\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0645 \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u06cc\u06a9 Broadcast \u062f\u0627\u062e\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0647 \u062a\u0627 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u06cc\u06a9 \u0627\u062a\u0641\u0627\u0642 \u0628\u0627\u062e\u0628\u0631 \u0628\u0634\u0646\u060c \u0647\u0631\u0686\u0646\u062f \u0627\u0645\u0631\u0648\u0632\u0647 \u0628\u0631\u0627\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u062f\u0627\u062e\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u0645\u062f\u0631\u0646\u200c\u062a\u0631\u06cc \u0645\u062b\u0644 Flow\u060c LiveData \u06cc\u0627 \u0633\u0627\u06cc\u0631 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0686\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u06cc \u0627\u0632 Broadcast Receiver \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0628\u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0642\u0637\u0639 \u0628\u0648\u062f\u0647\u060c \u0686\u0646\u062f \u06a9\u0627\u0644\u0627 \u0631\u0648 \u0628\u0647 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f\u06cc\u200c\u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0647. \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 \u06af\u0648\u0634\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647\u060c \u0627\u0645\u0627 \u0647\u0646\u0648\u0632 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0646\u0634\u062f\u0647. \u062d\u0627\u0644\u0627 \u0686\u0646\u062f \u062f\u0642\u06cc\u0642\u0647 \u0628\u0639\u062f \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062f\u0648\u0628\u0627\u0631\u0647 \u0648\u0635\u0644 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0628\u0627\u062e\u0628\u0631 \u0628\u0634\u0647\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 WorkManager \u0631\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0646\u0647 \u062a\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u06af\u0627\u0645 \u0628\u0634\u0646. \u062f\u0642\u062a \u06a9\u0646 \u06a9\u0647 \u062e\u0648\u062f Receiver \u0639\u0645\u0644\u06cc\u0627\u062a Sync \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0646\u0645\u06cc\u062f\u0647\u061b \u0641\u0642\u0637 \u0645\u062a\u0648\u062c\u0647 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0635\u0644 \u0634\u062f\u0647 \u0648 \u0628\u0647 \u0628\u062e\u0634 \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0637\u0644\u0627\u0639 \u0645\u06cc\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0627 \u0641\u0631\u0636 \u06a9\u0646 \u06af\u0648\u0634\u06cc \u0628\u0639\u062f \u0627\u0632 \u062e\u0627\u0645\u0648\u0634 \u0628\u0648\u062f\u0646\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0648\u0634\u0646 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc \u06cc\u0627 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0628\u0639\u062f \u0627\u0632 \u0628\u0648\u062a \u0634\u062f\u0646 \u0628\u0627\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0622\u0645\u0627\u062f\u0647 \u0628\u0634\u0646\u060c Receiver \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647 \u0648 \u0645\u0642\u062f\u0645\u0627\u062a \u0644\u0627\u0632\u0645 \u0631\u0648 \u0641\u0631\u0627\u0647\u0645 \u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 Receiver \u0628\u0627\u06cc\u062f \u06a9\u0627\u0631\u0647\u0627\u06cc \u0633\u0646\u06af\u06cc\u0646 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u062a\u0627\u0632\u0647\u200c\u06a9\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u062f\u0646 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u062f\u0627\u062e\u0644 Receiver \u0634\u0631\u0648\u0639 \u0628\u0647 \u0627\u0646\u062c\u0627\u0645 \u0639\u0645\u0644\u06cc\u0627\u062a \u0633\u0646\u06af\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0646\u061b \u0645\u062b\u0644\u0627\u064b \u0686\u0646\u062f\u06cc\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u0628\u06a9\u0647 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u0646\u060c \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0628\u0632\u0631\u06af \u0631\u0648 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u06cc\u0627 \u0639\u0645\u0644\u06cc\u0627\u062a \u0637\u0648\u0644\u0627\u0646\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0635\u0644\u0627\u064b \u062a\u0648\u0635\u06cc\u0647 \u0646\u0645\u06cc\u0634\u0647. Receiver \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0648\u0627\u06a9\u0646\u0634 \u0633\u0631\u06cc\u0639 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647. \u0627\u06af\u0631 \u0642\u0631\u0627\u0631\u0647 \u06a9\u0627\u0631 \u0645\u0647\u0645\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u060c \u0628\u0647\u062a\u0631\u0647 Receiver \u0627\u0648\u0646 \u06a9\u0627\u0631 \u0631\u0648 \u0628\u0647 WorkManager\u060c Foreground Service \u06cc\u0627 \u0628\u062e\u0634 \u0645\u0646\u0627\u0633\u0628 \u062f\u06cc\u06af\u0647\u200c\u0627\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0633\u067e\u0631\u0647 \u0648 \u062e\u0648\u062f\u0634 \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u06a9\u0627\u0631\u0634 \u0631\u0648 \u062a\u0645\u0648\u0645 \u06a9\u0646\u0647. \u062f\u0631 \u0648\u0627\u0642\u0639 \u0645\u06cc\u0634\u0647 \u06af\u0641\u062a Receiver \u0628\u06cc\u0634\u062a\u0631 \u0634\u0628\u06cc\u0647 \u0632\u0646\u06af \u062f\u0631 \u062e\u0648\u0646\u0647 \u0627\u0633\u062a\u061b \u0632\u0646\u06af \u0641\u0642\u0637 \u062e\u0628\u0631 \u0645\u06cc\u062f\u0647 \u06a9\u0647 \u06a9\u0633\u06cc \u067e\u0634\u062a \u062f\u0631\u0647\u060c \u0627\u0645\u0627 \u0642\u0631\u0627\u0631 \u0646\u06cc\u0633\u062a \u062e\u0648\u062f\u0634 \u0628\u0631\u0647 \u062f\u0631 \u0631\u0648 \u0628\u0627\u0632 \u06a9\u0646\u0647\u060c \u0645\u0647\u0645\u0648\u0646 \u0631\u0648 \u0628\u06cc\u0627\u0631\u0647 \u062f\u0627\u062e\u0644 \u0648 \u0628\u0631\u0627\u0634 \u063a\u0630\u0627 \u0647\u0645 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u06cc\u06a9 Broadcast Receiver \u0633\u0627\u062f\u0647<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 Receiver \u0627\u0632 \u0646\u0638\u0631 \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc \u062e\u06cc\u0644\u06cc \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u0641\u0642\u0637 \u06a9\u0627\u0641\u06cc\u0647 \u0627\u0632 \u06a9\u0644\u0627\u0633 <code>BroadcastReceiver<\/code> \u0627\u0631\u062b\u200c\u0628\u0631\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0645\u062a\u062f <code>onReceive()<\/code> \u0631\u0648 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class NetworkReceiver : BroadcastReceiver() {\n\n    override fun onReceive(\n        context: Context,\n        intent: Intent\n    ) {\n\n        \/\/ \u0648\u0627\u06a9\u0646\u0634 \u0628\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f\n\n    }\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">NetworkReceiver<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">BroadcastReceiver<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onReceive<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        intent: <\/span><span style=\"color: #6F42C1\">Intent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6A737D\">\/\/ \u0648\u0627\u06a9\u0646\u0634 \u0628\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0631 \u0632\u0645\u0627\u0646 Broadcast \u0645\u0631\u0628\u0648\u0637\u0647 \u0627\u0631\u0633\u0627\u0644 \u0628\u0634\u0647\u060c \u0645\u062a\u062f <code>onReceive()<\/code> \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647. \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u062f\u0627\u062e\u0644 \u0627\u06cc\u0646 \u0645\u062a\u062f \u0645\u06cc\u200c\u0646\u0648\u06cc\u0633\u06cc\u060c \u0628\u0627\u06cc\u062f \u06a9\u0648\u062a\u0627\u0647 \u0648 \u0633\u0631\u06cc\u0639 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Receiver \u0627\u0632 \u06a9\u062c\u0627 \u0645\u06cc\u200c\u0641\u0647\u0645\u0647 \u06a9\u062f\u0648\u0645 Broadcast \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Receiver \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f \u0645\u0634\u062e\u0635 \u062b\u0628\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u0647. \u0627\u06cc\u0646 \u062b\u0628\u062a \u0634\u062f\u0646 \u06cc\u0627 \u062f\u0627\u062e\u0644 \u0641\u0627\u06cc\u0644 Manifest \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647 \u06cc\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0627\u06cc\u0646\u0627\u0645\u06cc\u06a9 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0627\u06af\u0631 Receiver \u0628\u0631\u0627\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u062b\u0628\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0641\u0642\u0637 \u0647\u0646\u06af\u0627\u0645 \u067e\u0627\u06cc\u0627\u0646 Boot \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647 \u0648 \u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0632\u0628\u0627\u0646 \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0627\u0635\u0644\u0627\u064b \u0641\u0639\u0627\u0644 \u0646\u0645\u06cc\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0647\u0631 Receiver \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u06cc\u0627 \u0686\u0646\u062f \u0631\u0648\u06cc\u062f\u0627\u062f \u0645\u0634\u062e\u0635 \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u0634\u0647\u060c \u0646\u0647 \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u0627\u062a\u0641\u0627\u0642\u0627\u062a \u0633\u06cc\u0633\u062a\u0645.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062b\u0628\u062a Receiver \u062f\u0631 Manifest<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u06cc Receiver \u062d\u062a\u06cc \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627\u0632 \u0646\u06cc\u0633\u062a \u0647\u0645 \u0628\u0639\u0636\u06cc Broadcast\u0647\u0627 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0647\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0648\u0646 \u0631\u0648 \u062f\u0627\u062e\u0644 Manifest \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;receiver\n    android:name=\".BootReceiver\"\n    android:exported=\"true\">\n\n    &lt;intent-filter>\n        &lt;action android:name=\"android.intent.action.BOOT_COMPLETED\"\/>\n    &lt;\/intent-filter>\n\n&lt;\/receiver>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">receiver<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;.BootReceiver&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    android:<\/span><span style=\"color: #6F42C1\">exported<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;true&quot;<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">intent<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">filter<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">action android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;android.intent.action.BOOT_COMPLETED&quot;<\/span><span style=\"color: #D73A49\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">&lt;\/<\/span><span style=\"color: #24292E\">intent<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">filter<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">&lt;\/<\/span><span style=\"color: #24292E\">receiver<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u060c \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u06af\u0648\u0634\u06cc \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0648\u062a \u0628\u0634\u0647\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u06cc\u0646 Receiver \u0631\u0648 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Receiver \u062f\u0627\u06cc\u0646\u0627\u0645\u06cc\u06a9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u0644\u0627\u0632\u0645 \u0646\u06cc\u0633\u062a Receiver \u0647\u0645\u06cc\u0634\u0647 \u0641\u0639\u0627\u0644 \u0628\u0627\u0634\u0647. \u0641\u0631\u0636 \u06a9\u0646 \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u062e\u0627\u0635 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0647\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc. \u062f\u0631 \u0686\u0646\u06cc\u0646 \u0634\u0631\u0627\u06cc\u0637\u06cc \u0645\u06cc\u200c\u062a\u0648\u0646\u06cc Receiver \u0631\u0648 \u0647\u0646\u06af\u0627\u0645 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062b\u0628\u062a \u06a9\u0646\u06cc \u0648 \u0647\u0631 \u0632\u0645\u0627\u0646 \u062f\u06cc\u06af\u0647 \u0628\u0647\u0634 \u0646\u06cc\u0627\u0632 \u0646\u062f\u0627\u0634\u062a\u06cc\u060c \u0627\u0648\u0646 \u0631\u0648 \u062d\u0630\u0641 \u06a9\u0646\u06cc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 Receiver \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u0641\u0639\u0627\u0644 \u0628\u0627\u0634\u0647 \u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0647\u0634 \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u06cc \u0648 \u0645\u0646\u0627\u0628\u0639 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0645 \u06a9\u0645\u062a\u0631 \u0645\u0635\u0631\u0641 \u0628\u0634\u0646.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Broadcast Receiver \u06cc\u0627 WorkManager\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06af\u0627\u0647\u06cc \u0627\u06cc\u0646 \u062f\u0648 \u0628\u0627 \u0647\u0645 \u0627\u0634\u062a\u0628\u0627\u0647 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u0634\u0646\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0646\u0642\u0634\u0634\u0648\u0646 \u06a9\u0627\u0645\u0644\u0627\u064b \u0645\u062a\u0641\u0627\u0648\u062a\u0647. Broadcast Receiver \u0641\u0642\u0637 <strong>\u0627\u0632 \u06cc\u06a9 \u0627\u062a\u0641\u0627\u0642 \u0628\u0627\u062e\u0628\u0631 \u0645\u06cc\u0634\u0647<\/strong>. \u0627\u0645\u0627 WorkManager <strong>\u06cc\u06a9 \u06a9\u0627\u0631 \u0631\u0648 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647<\/strong>. \u0641\u0631\u0636 \u06a9\u0646 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0648\u0635\u0644 \u0634\u062f\u0647. Receiver \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u0627\u0645\u0627 \u062e\u0648\u062f\u0634 \u0634\u0631\u0648\u0639 \u0628\u0647 Sync \u06a9\u0631\u062f\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647. \u062f\u0631 \u0639\u0648\u0636\u060c \u06cc\u06a9 WorkManager \u062b\u0628\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647 \u062a\u0627 \u0639\u0645\u0644\u06cc\u0627\u062a \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u0645\u0646\u0627\u0633\u0628 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647. \u067e\u0633 Receiver \u0628\u06cc\u0634\u062a\u0631 \u0634\u0628\u06cc\u0647 \u06cc\u06a9 \u062d\u0633\u06af\u0631\u0647\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 WorkManager \u0645\u062c\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0686\u0647 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc\u06cc \u062a\u0648 Broadcast Receiver \u067e\u06cc\u0634 \u0645\u06cc\u0627\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633 \u0647\u0645\u0647 \u0645\u0646\u0637\u0642 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u062f\u0627\u062e\u0644 <code>onReceive<\/code> \u0645\u06cc\u200c\u0646\u0648\u06cc\u0633\u0647. \u0627\u06cc\u0646 \u0645\u062a\u062f \u0628\u0627\u06cc\u062f \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u0627\u062c\u0631\u0627 \u0628\u0634\u0647 \u0648 \u0641\u0642\u0637 \u062a\u0635\u0645\u06cc\u0645 \u0628\u06af\u06cc\u0631\u0647 \u0642\u062f\u0645 \u0628\u0639\u062f\u06cc \u0686\u06cc\u0647. \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0639\u062f\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 Receiver \u0628\u0631\u0627\u06cc \u0647\u0631 \u0631\u0648\u06cc\u062f\u0627\u062f\u06cc \u062b\u0628\u062a \u0628\u0634\u0647\u060c \u062d\u062a\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0647\u06cc\u0686 \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u0628\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u062f\u0627\u0631\u0646. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0641\u0642\u0637 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u067e\u0631\u0648\u0698\u0647 \u0631\u0648 \u0628\u06cc\u0634\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0634\u062a\u0628\u0627\u0647 \u062f\u06cc\u06af\u0647 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645 Receiver \u0647\u0645\u06cc\u0634\u0647 \u0648 \u062f\u0631 \u0647\u0631 \u0634\u0631\u0627\u06cc\u0637\u06cc \u0627\u062c\u0631\u0627 \u0628\u0634\u0647. \u0627\u0632 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0647 \u0628\u0639\u062f\u060c \u0628\u0631\u0627\u06cc \u0628\u0639\u0636\u06cc Broadcast\u0647\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645\u06cc \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647 \u0648 \u0647\u0645\u0647 Broadcast\u0647\u0627 \u0645\u062b\u0644 \u06af\u0630\u0634\u062a\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0622\u0632\u0627\u062f \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0646\u06cc\u0633\u062a\u0646. \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0647\u0645\u06cc\u0634\u0647 \u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0647\u0631 Broadcast \u0631\u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0631\u062f \u0648 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0631\u0633\u062a\u06cc \u0627\u0632 \u0631\u0641\u062a\u0627\u0631 \u0633\u06cc\u0633\u062a\u0645 \u062f\u0627\u0634\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Broadcast Receiver \u06cc\u06a9\u06cc \u0627\u0632 \u0686\u0647\u0627\u0631 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0627\u0635\u0644\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u0647 \u0648 \u0648\u0638\u06cc\u0641\u0647 \u0627\u0635\u0644\u06cc \u0627\u0648\u0646 <strong>\u06af\u0648\u0634 \u062f\u0627\u062f\u0646 \u0628\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627<\/strong>\u0633\u062a. \u0647\u0631 \u0648\u0642\u062a \u0627\u062a\u0641\u0627\u0642 \u0645\u0647\u0645\u06cc \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u06cc\u0627 \u062f\u0631 \u0628\u0639\u0636\u06cc \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u062e \u0628\u062f\u0647\u060c Receiver \u0645\u06cc\u200c\u062a\u0648\u0646\u0647 \u0627\u0632 \u0627\u0648\u0646 \u0628\u0627\u062e\u0628\u0631 \u0628\u0634\u0647 \u0648 \u0648\u0627\u06a9\u0646\u0634 \u0645\u0646\u0627\u0633\u0628 \u0631\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0646\u0647. \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u0647 \u06a9\u0647 Receiver \u0645\u062d\u0644 \u0627\u0646\u062c\u0627\u0645 \u0639\u0645\u0644\u06cc\u0627\u062a \u0633\u0646\u06af\u06cc\u0646 \u0646\u06cc\u0633\u062a\u061b \u0641\u0642\u0637 \u0646\u0642\u0637\u0647 \u0634\u0631\u0648\u0639 \u0627\u0648\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 <strong>\u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646<\/strong>\u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b Receiver \u0628\u06cc\u0634\u062a\u0631 \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 \u0648\u0635\u0644 \u0634\u062f\u0646 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06cc\u0627 \u067e\u0627\u06cc\u0627\u0646 \u0628\u0648\u062a \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f \u067e\u06cc\u062f\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0628\u0639\u062f \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u06cc\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u060c \u06a9\u0627\u0631 \u0627\u0635\u0644\u06cc \u0628\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0645\u062b\u0644 <strong>WorkManager<\/strong> \u0633\u067e\u0631\u062f\u0647 \u0645\u06cc\u0634\u0647. \u0627\u06af\u0631 \u0627\u06cc\u0646 \u062a\u0642\u0633\u06cc\u0645 \u0648\u0638\u0627\u06cc\u0641 \u0631\u0648 \u0631\u0639\u0627\u06cc\u062a \u06a9\u0646\u06cc\u060c \u0647\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0645\u06cc\u0634\u0647\u060c \u0647\u0645 \u0645\u0635\u0631\u0641 \u0645\u0646\u0627\u0628\u0639 \u06a9\u0645\u062a\u0631 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f \u0648 \u0647\u0645 \u0645\u0639\u0645\u0627\u0631\u06cc \u062a\u0645\u06cc\u0632\u062a\u0631\u06cc \u062e\u0648\u0627\u0647\u06cc \u062f\u0627\u0634\u062a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062f\u0631\u0633 \u0686\u0647\u0644\u200c\u0648\u0633\u0648\u0645<\/h3>\n\n\n\n<h1 class=\"wp-block-heading\">Boot Completed<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0635\u0644\u0627\u064b Boot Completed \u06cc\u0639\u0646\u06cc \u0686\u06cc\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u06af\u0648\u0634\u06cc\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u062e\u0627\u0645\u0648\u0634 \u0634\u062f\u0647 \u0648 \u0686\u0646\u062f \u0633\u0627\u0639\u062a \u0628\u0639\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0648\u0634\u0646\u0634 \u0645\u06cc\u200c\u06a9\u0646\u06cc. \u0648\u0642\u062a\u06cc \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0627\u0644\u0627 \u0645\u06cc\u0627\u062f\u060c \u0641\u0642\u0637 \u062a\u0648 \u0646\u06cc\u0633\u062a\u06cc \u06a9\u0647 \u0622\u0645\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06af\u0648\u0634\u06cc \u0645\u06cc\u0634\u06cc\u061b \u062e\u0648\u062f \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u0647\u0645 \u062a\u0627\u0632\u0647 \u0634\u0631\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0631\u0648 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0631\u062f\u0646. \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0628\u0627\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u062e\u0648\u062f\u0634\u0648\u0646 \u0631\u0648 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u0646. \u0645\u062b\u0644\u0627\u064b \u0645\u0645\u06a9\u0646\u0647 \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 \u06cc\u06a9 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u062b\u0628\u062a \u0628\u0634\u0647\u060c \u0628\u0639\u0636\u06cc \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0631\u0633\u06cc \u0628\u0634\u0646 \u06cc\u0627 \u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0627\u0632 \u0646\u0648 \u0622\u0645\u0627\u062f\u0647 \u0627\u062c\u0631\u0627 \u0628\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0646 \u0644\u062d\u0638\u0647 \u06cc\u06a9 Broadcast \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u06a9\u0647 \u0627\u0633\u0645\u0634 <strong>BOOT_COMPLETED<\/strong> \u0647\u0633\u062a. \u0647\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u06cc\u0646 Broadcast \u062b\u0628\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u0647\u060c \u0628\u0639\u062f \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 \u0628\u0648\u062a \u062f\u0633\u062a\u06af\u0627\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0628\u0627\u062e\u0628\u0631 \u0645\u06cc\u0634\u0647. \u06cc\u0639\u0646\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u06af\u0647: \u06af\u0648\u0634\u06cc \u06a9\u0627\u0645\u0644\u0627\u064b \u0631\u0648\u0634\u0646 \u0634\u062f\u0647\u061b \u0627\u06af\u0631 \u06a9\u0627\u0631\u06cc \u062f\u0627\u0631\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u0627\u0646\u062c\u0627\u0645 \u0628\u0634\u0647\u060c \u0627\u0644\u0622\u0646 \u0648\u0642\u062a\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0635\u0644\u0627\u064b \u0686\u0631\u0627 \u0686\u0646\u06cc\u0646 Broadcast\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0634\u0627\u06cc\u062f \u0628\u06af\u06cc \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0642\u0628\u0644\u0627\u064b \u0646\u0635\u0628 \u0628\u0648\u062f\u0647\u060c \u0686\u0631\u0627 \u0628\u0639\u062f \u0627\u0632 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0627\u06cc\u062f \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647\u061f \u062f\u0644\u06cc\u0644\u0634 \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0627 \u062e\u0627\u0645\u0648\u0634 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc\u060c \u062e\u06cc\u0644\u06cc \u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0627\u062e\u0644 \u062d\u0627\u0641\u0638\u0647 RAM \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u0631\u0646. \u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc\u060c Alarm \u06cc\u0627 \u0648\u0636\u0639\u06cc\u062a \u0645\u0648\u0642\u062a\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u0628\u0639\u062f \u0627\u0632 \u0628\u0648\u062a \u0634\u062f\u0646 \u062f\u0648\u0628\u0627\u0631\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0645\u062b\u0644\u0627\u064b \u0641\u0631\u0636 \u06a9\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0627\u06cc \u0647\u0631 \u0634\u0628 \u0633\u0627\u0639\u062a \u06f1\u06f0 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0639\u0645\u0644\u06cc\u0627\u062a \u062e\u0627\u0635 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u0627\u06af\u0631 \u06af\u0648\u0634\u06cc \u0648\u0633\u0637 \u0631\u0648\u0632 \u062e\u0627\u0645\u0648\u0634 \u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0648\u0634\u0646 \u0628\u0634\u0647\u060c \u0645\u0645\u06a9\u0646\u0647 \u0627\u0648\u0646 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u0647 \u0648 \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u062b\u0628\u062a \u0628\u0634\u0647. Boot Completed \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0631\u0627\u06cc \u0686\u0646\u06cc\u0646 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc\u06cc \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0628\u0647 Boot Completed \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0648\u0627\u0642\u0639\u060c <strong>\u062e\u06cc\u0631<\/strong>. \u0627\u06af\u0631 \u0628\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0646\u06af\u0627\u0647 \u06a9\u0646\u06cc\u0645\u060c \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0647\u0645\u0647 \u06a9\u0627\u0631\u0647\u0627 \u06cc\u0627 \u0628\u0627 \u0628\u0627\u0632 \u0634\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u0634\u0646 \u06cc\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 <strong>Firebase Cloud Messaging<\/strong> \u0648 <strong>WorkManager<\/strong> \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u0634\u0646. \u0627\u06cc\u0646 \u06cc\u0639\u0646\u06cc \u0628\u0639\u062f \u0627\u0632 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0646\u06cc\u0627\u0632\u06cc \u0646\u06cc\u0633\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0648\u0631\u0627\u064b \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0644\u0628\u062a\u0647 \u0641\u0631\u0636 \u06a9\u0646 \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0647\u0631 \u0631\u0648\u0632 \u0633\u0627\u0639\u062a \u0645\u0634\u062e\u0635\u06cc \u06af\u0632\u0627\u0631\u0634 \u0642\u06cc\u0645\u062a\u200c\u0647\u0627 \u0631\u0648 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u0647 \u06cc\u0627 \u06cc\u06a9 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc \u0645\u062d\u0644\u06cc \u062f\u0627\u062e\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645. \u062f\u0631 \u0627\u0648\u0646 \u0635\u0648\u0631\u062a \u0645\u0645\u06a9\u0646\u0647 \u0628\u0639\u062f \u0627\u0632 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u0647 \u0627\u0648\u0646 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u062b\u0628\u062a \u0628\u0634\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 Boot Completed \u0627\u0628\u0632\u0627\u0631\u06cc\u0647 \u06a9\u0647 \u0641\u0642\u0637 \u0648\u0642\u062a\u06cc \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0647\u0634 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc \u0628\u0627\u06cc\u062f \u0633\u0631\u0627\u063a\u0634 \u0628\u0631\u06cc\u060c \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u062f\u0627\u062e\u0644 \u0647\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0627\u06cc \u0627\u0632\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Boot Completed \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0646\u0628\u0627\u06cc\u062f \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0639\u0636\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0628\u0647 \u0645\u062d\u0636 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc \u0634\u0631\u0648\u0639 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u0628\u0647 \u062f\u0627\u0646\u0644\u0648\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u060c \u0627\u062c\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u0633\u0646\u06af\u06cc\u0646 \u06cc\u0627 \u0628\u0631\u0642\u0631\u0627\u0631\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u0633\u0631\u0648\u0631.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0647\u0645 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 \u0647\u0645 \u0628\u0627\u0639\u062b \u0645\u06cc\u0634\u0647 \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0639\u062f \u0627\u0632 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc\u060c \u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647\u060c \u062d\u0627\u0641\u0638\u0647 \u0648 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062f\u0631\u06af\u06cc\u0631 \u0686\u0646\u062f\u06cc\u0646 \u0639\u0645\u0644\u06cc\u0627\u062a \u0645\u062e\u062a\u0644\u0641 \u0628\u0634\u0646. \u062a\u0635\u0648\u0631 \u06a9\u0646 \u062f\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062e\u062a\u0644\u0641 \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0639\u062f \u0627\u0632 \u0628\u0648\u062a \u0634\u062f\u0646 \u0686\u0646\u06cc\u0646 \u0631\u0641\u062a\u0627\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u061b \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc \u0647\u0645 \u06a9\u0646\u062f\u062a\u0631 \u0645\u06cc\u0634\u0647 \u0648 \u0647\u0645 \u0628\u0627\u062a\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0645\u0635\u0631\u0641 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 Boot Completed \u0628\u0627\u06cc\u062f \u0641\u0642\u0637 <strong>\u06a9\u0627\u0631\u0647\u0627\u06cc \u0636\u0631\u0648\u0631\u06cc<\/strong> \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647. \u0627\u06af\u0631 \u0639\u0645\u0644\u06cc\u0627\u062a \u0633\u0646\u06af\u06cc\u0646\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647\u060c \u0628\u0647\u062a\u0631\u0647 \u0641\u0642\u0637 \u0627\u0648\u0646 \u0631\u0648 \u0628\u0647 WorkManager \u0628\u0633\u067e\u0631\u0647 \u0648 \u062e\u0648\u062f\u0634 \u062e\u06cc\u0644\u06cc \u0633\u0631\u06cc\u0639 \u06a9\u0627\u0631\u0634 \u0631\u0648 \u062a\u0645\u0648\u0645 \u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Boot Completed \u0686\u0647 \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u0628\u0627 Broadcast Receiver \u062f\u0627\u0631\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u062f\u0631\u0633 \u0642\u0628\u0644 \u06cc\u0627\u062f \u06af\u0631\u0641\u062a\u06cc\u0645 \u06a9\u0647 Broadcast Receiver \u0645\u0646\u062a\u0638\u0631 \u06cc\u06a9 \u0631\u0648\u06cc\u062f\u0627\u062f \u0645\u06cc\u200c\u0645\u0648\u0646\u0647 \u0648 \u0648\u0642\u062a\u06cc \u0627\u0648\u0646 \u0631\u0648\u06cc\u062f\u0627\u062f \u0627\u062a\u0641\u0627\u0642 \u0627\u0641\u062a\u0627\u062f\u060c \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647. BOOT_COMPLETED \u0647\u0645 \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9\u06cc \u0627\u0632 \u0647\u0645\u06cc\u0646 Broadcast\u0647\u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u0639\u0646\u06cc \u0648\u0642\u062a\u06cc \u06af\u0648\u0634\u06cc \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0648\u062a \u0634\u062f\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u06cc\u0646 Broadcast \u0631\u0648 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0647 \u0648 Receiver \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0627\u0648\u0646 \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647. \u062f\u0631 \u0648\u0627\u0642\u0639 Boot Completed \u062e\u0648\u062f\u0634 \u06cc\u06a9 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u062c\u062f\u06cc\u062f \u0646\u06cc\u0633\u062a\u061b \u0641\u0642\u0637 <strong>\u06cc\u06a9\u06cc \u0627\u0632 Broadcast\u0647\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645\u06cc<\/strong>\u0647 \u06a9\u0647 \u062a\u0648\u0633\u0637 \u06cc\u06a9 Broadcast Receiver \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u06cc\u06a9 Receiver \u0633\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc Boot Completed<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0628\u062a\u062f\u0627 \u06cc\u06a9 Receiver \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class BootReceiver : BroadcastReceiver() {\n\n    override fun onReceive(\n        context: Context,\n        intent: Intent\n    ) {\n\n        \/\/ \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0636\u0631\u0648\u0631\u06cc\n\n    }\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">class<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">BootReceiver<\/span><span style=\"color: #24292E\"> : <\/span><span style=\"color: #6F42C1\">BroadcastReceiver<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onReceive<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        intent: <\/span><span style=\"color: #6F42C1\">Intent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    ) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6A737D\">\/\/ \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0636\u0631\u0648\u0631\u06cc<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0647\u0645\u0648\u0646\u200c\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc\u060c \u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u0647\u06cc\u0686 \u062a\u0641\u0627\u0648\u062a\u06cc \u0628\u0627 Receiver\u0647\u0627\u06cc \u062f\u06cc\u06af\u0647 \u0646\u062f\u0627\u0631\u0647. \u062a\u0646\u0647\u0627 \u062a\u0641\u0627\u0648\u062a \u062f\u0631 Broadcast\u06cc\u0647 \u06a9\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0686\u0637\u0648\u0631 \u0628\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u06af\u06cc\u0645 \u0627\u06cc\u0646 Receiver \u0628\u0631\u0627\u06cc Boot Completed \u0647\u0633\u062a\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u06cc\u062f Receiver \u062f\u0627\u062e\u0644 Manifest \u062b\u0628\u062a \u0628\u0634\u0647.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;receiver\n    android:name=\".BootReceiver\"\n    android:exported=\"true\">\n\n    &lt;intent-filter>\n        &lt;action android:name=\"android.intent.action.BOOT_COMPLETED\"\/>\n    &lt;\/intent-filter>\n\n&lt;\/receiver>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">receiver<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;.BootReceiver&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    android:<\/span><span style=\"color: #6F42C1\">exported<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;true&quot;<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">intent<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">filter<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">action android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;android.intent.action.BOOT_COMPLETED&quot;<\/span><span style=\"color: #D73A49\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">&lt;\/<\/span><span style=\"color: #24292E\">intent<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">filter<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">&lt;\/<\/span><span style=\"color: #24292E\">receiver<\/span><span style=\"color: #D73A49\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646\u060c \u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u06af\u0648\u0634\u06cc \u06a9\u0627\u0645\u0644\u0627\u064b \u0631\u0648\u0634\u0646 \u0628\u0634\u0647\u060c \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u06cc\u0646 Receiver \u0631\u0648 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u06cc\u06a9 Permission \u0647\u0645 \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u06cc\u0645<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631\u06cc\u0627\u0641\u062a Broadcast \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Boot Completed \u0628\u0647 Permission \u0627\u062d\u062a\u06cc\u0627\u062c \u062f\u0627\u0631\u0647.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"\/>\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">uses<\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\">permission android:<\/span><span style=\"color: #6F42C1\">name<\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #032F62\">&quot;android.permission.RECEIVE_BOOT_COMPLETED&quot;<\/span><span style=\"color: #D73A49\">\/&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u0627\u06cc\u0646 Permission \u062f\u0627\u062e\u0644 Manifest \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0647\u060c Receiver \u0647\u06cc\u0686\u200c\u0648\u0642\u062a Broadcast \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u0645\u06cc\u200c\u06a9\u0646\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062f\u0627\u062e\u0644 BootReceiver \u0628\u0647\u062a\u0631\u0647 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u06cc\u0645\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0641\u0631\u0636 \u06a9\u0646 \u0628\u0639\u062f \u0627\u0632 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0639\u0627\u0644 \u0628\u0634\u0647. \u0628\u0647\u062a\u0631\u0647 \u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0645\u0627\u0646\u200c\u062c\u0627 \u0639\u0645\u0644\u06cc\u0627\u062a Sync \u0631\u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u060c \u0641\u0642\u0637 \u06cc\u06a9 WorkManager \u062b\u0628\u062a \u06a9\u0646\u06cc.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#fff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>override fun onReceive(\n    context: Context,\n    intent: Intent\n) {\n\n    val request =\n        OneTimeWorkRequestBuilder&lt;SyncWorker>()\n            .build()\n\n    WorkManager\n        .getInstance(context)\n        .enqueue(request)\n\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">override<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">fun<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">onReceive<\/span><span style=\"color: #24292E\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    context: <\/span><span style=\"color: #6F42C1\">Context<\/span><span style=\"color: #24292E\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    intent: <\/span><span style=\"color: #6F42C1\">Intent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">val<\/span><span style=\"color: #24292E\"> request <\/span><span style=\"color: #D73A49\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #6F42C1\">OneTimeWorkRequestBuilder<\/span><span style=\"color: #24292E\">&lt;<\/span><span style=\"color: #6F42C1\">SyncWorker<\/span><span style=\"color: #24292E\">&gt;()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">            .<\/span><span style=\"color: #6F42C1\">build<\/span><span style=\"color: #24292E\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    WorkManager<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">getInstance<\/span><span style=\"color: #24292E\">(context)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        .<\/span><span style=\"color: #6F42C1\">enqueue<\/span><span style=\"color: #24292E\">(request)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 BootReceiver \u0641\u0642\u0637 \u0645\u062a\u0648\u062c\u0647 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc \u0634\u062f\u0647 \u0648 \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631 \u0627\u0635\u0644\u06cc \u0631\u0648 \u0628\u0647 WorkManager \u0633\u067e\u0631\u062f\u0647. \u0627\u06cc\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u0647\u0645\u0648\u0646 \u062a\u0642\u0633\u06cc\u0645 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a\u06cc \u0647\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u062e\u0648\u0628 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u062f\u0646\u0628\u0627\u0644\u0634 \u0647\u0633\u062a\u06cc\u0645.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0622\u06cc\u0627 Boot Completed \u0647\u0645\u06cc\u0634\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u0647\u060c \u0648 \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645\u06cc\u0647. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0639\u062f \u0627\u0632 \u0646\u0635\u0628 \u0628\u0631\u0646\u0627\u0645\u0647\u060c <strong>\u06cc\u06a9 \u0628\u0627\u0631 \u0647\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0648 \u0627\u062c\u0631\u0627 \u0646\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u0647<\/strong>\u060c \u062f\u0631 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f Broadcast \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Boot Completed \u0628\u0647 \u0627\u0648\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0631\u0633\u0627\u0644 \u0646\u0645\u06cc\u0634\u0647. \u06af\u0648\u06af\u0644 \u0627\u06cc\u0646 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0631\u0648 \u06af\u0630\u0627\u0634\u062a\u0647 \u062a\u0627 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0639\u0645\u0644\u0627\u064b \u0647\u06cc\u0686 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u200c\u0627\u06cc \u0627\u0632\u0634\u0648\u0646 \u0646\u06a9\u0631\u062f\u0647\u060c \u0628\u0639\u062f \u0627\u0632 \u0647\u0631 \u0628\u0627\u0631 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc \u0628\u06cc\u200c\u062f\u0644\u06cc\u0644 \u0627\u062c\u0631\u0627 \u0646\u0634\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u0632 \u0637\u0631\u0641 \u062f\u06cc\u06af\u0647\u060c \u062f\u0631 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0648\u06cc \u0627\u062c\u0631\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u0647. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0628\u0627\u06cc\u062f Boot Completed \u0631\u0648 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u0628\u0632\u0627\u0631\u06cc \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc \u06a9\u0647 \u0647\u0645\u06cc\u0634\u0647 \u0648 \u062f\u0631 \u0647\u0631 \u0634\u0631\u0627\u06cc\u0637\u06cc \u0628\u062f\u0648\u0646 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0627\u062c\u0631\u0627 \u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0686\u0647 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc\u06cc \u062a\u0648 Boot Completed \u067e\u06cc\u0634 \u0645\u06cc\u0627\u062f\u061f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0634\u062a\u0628\u0627\u0647\u200c\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0639\u062f \u0627\u0632 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc \u0634\u0631\u0648\u0639 \u0628\u0647 \u0627\u0646\u062c\u0627\u0645 \u0639\u0645\u0644\u06cc\u0627\u062a \u0633\u0646\u06af\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0647. \u0628\u0647\u062a\u0631\u0647 Receiver \u0641\u0642\u0637 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0636\u0631\u0648\u0631\u06cc \u0631\u0648 \u0627\u0646\u062c\u0627\u0645 \u0628\u062f\u0647 \u0648 \u0628\u0642\u06cc\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0648 \u0628\u0647 WorkManager \u0648\u0627\u06af\u0630\u0627\u0631 \u06a9\u0646\u0647. \u0627\u0634\u062a\u0628\u0627\u0647 \u0628\u0639\u062f\u06cc \u0627\u06cc\u0646\u0647 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0627\u06cc Boot Completed \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0647\u060c \u062d\u062a\u06cc \u0648\u0642\u062a\u06cc \u0647\u06cc\u0686 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647\u0634 \u0646\u062f\u0627\u0631\u0647. \u0647\u0631 Receiver \u0627\u0636\u0627\u0641\u06cc \u06cc\u0639\u0646\u06cc \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0648 \u0645\u0635\u0631\u0641 \u0645\u0646\u0627\u0628\u0639 \u0628\u06cc\u0634\u062a\u0631. \u0627\u06af\u0631 \u0647\u06cc\u0686 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc \u06cc\u0627 \u0639\u0645\u0644\u06cc\u0627\u062a \u0636\u0631\u0648\u0631\u06cc \u0628\u0639\u062f \u0627\u0632 \u0628\u0648\u062a \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u0647\u060c \u0627\u0635\u0644\u0627\u064b \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0627\u06cc\u0646 Broadcast \u0646\u06cc\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0639\u0636\u06cc \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647\u200c\u0647\u0627 \u0647\u0645 \u0641\u0631\u0627\u0645\u0648\u0634 \u0645\u06cc\u200c\u06a9\u0646\u0646 Permission \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 <code>RECEIVE_BOOT_COMPLETED<\/code> \u0631\u0648 \u062f\u0627\u062e\u0644 Manifest \u0642\u0631\u0627\u0631 \u0628\u062f\u0646 \u0648 \u0628\u0639\u062f \u062a\u0639\u062c\u0628 \u0645\u06cc\u200c\u06a9\u0646\u0646 \u06a9\u0647 \u0686\u0631\u0627 Receiver \u0627\u062c\u0631\u0627 \u0646\u0645\u06cc\u0634\u0647.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Boot Completed \u06cc\u06a9\u06cc \u0627\u0632 Broadcast\u0647\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u0647 \u06a9\u0647 \u0628\u0639\u062f \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 \u0631\u0648\u0634\u0646 \u0634\u062f\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u0634\u0647. \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0648\u0627\u0642\u0639\u0627\u064b \u0644\u0627\u0632\u0645 \u062f\u0627\u0631\u0646 \u0628\u0639\u062f \u0627\u0632 \u0628\u0648\u062a \u0634\u062f\u0646 \u06af\u0648\u0634\u06cc \u0628\u0639\u0636\u06cc \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06cc\u0627 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627 \u0631\u0648 \u062f\u0648\u0628\u0627\u0631\u0647 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u0646\u060c \u0645\u06cc\u200c\u062a\u0648\u0646\u0646 \u0627\u0632 \u0627\u06cc\u0646 Broadcast \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0627\u06cc \u0645\u062b\u0644 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Boot Completed \u062e\u06cc\u0644\u06cc \u0645\u062d\u062f\u0648\u062f \u06cc\u0627 \u062d\u062a\u06cc \u06a9\u0627\u0645\u0644\u0627\u064b \u063a\u06cc\u0631\u0636\u0631\u0648\u0631\u06cc\u0647\u060c \u0686\u0648\u0646 \u0628\u06cc\u0634\u062a\u0631 \u0639\u0645\u0644\u06cc\u0627\u062a\u200c\u0647\u0627\u06cc \u0645\u0647\u0645 \u062a\u0648\u0633\u0637 <strong>Firebase Cloud Messaging<\/strong> \u0648 <strong>WorkManager<\/strong> \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u0634\u0646. \u0627\u06cc\u0646 \u062e\u0648\u062f\u0634 \u06cc\u06a9 \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u062f\u0631 \u0637\u0631\u0627\u062d\u06cc \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631\u0647\u061b \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u0628\u0648\u062f\u0646 \u0641\u0642\u0637 \u0628\u0647 \u0627\u06cc\u0646 \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0647\u0645\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0631\u0648 \u0628\u0644\u062f \u0628\u0627\u0634\u06cc\u060c \u0628\u0644\u06a9\u0647 \u0628\u0627\u06cc\u062f \u0628\u062f\u0648\u0646\u06cc <strong>\u06a9\u062f\u0648\u0645 \u0642\u0627\u0628\u0644\u06cc\u062a \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0627\u062a \u0644\u0627\u0632\u0645\u0647 \u0648 \u06a9\u062f\u0648\u0645 \u0641\u0642\u0637 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0627\u0636\u0627\u0641\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u0647.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0628\u062e\u0634 \u0686\u0647\u0627\u0631\u0645 \u2014 \u067e\u0631\u0648\u0698\u0647 \u0642\u06cc\u0645\u062a\u200c\u0628\u0627\u0646 \u062f\u0631\u0633 \u0628\u06cc\u0633\u062a\u200c\u0648\u06cc\u06a9\u0645 \u0648\u0642\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0645\u06cc\u200c\u0632\u0646\u0647\u060c \u067e\u0634\u062a \u0635\u062d\u0646\u0647 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0645\u06cc\u200c\u0627\u0641\u062a\u0647\u061f \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631\u0628\u0627\u0631\u0647 \u0642\u0637\u0639\u0627\u062a \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062d\u0631\u0641 \u0632\u062f\u06cc\u0645. Retrofit \u0631\u0648 \u0634\u0646\u0627\u062e\u062a\u06cc\u0645\u060c ViewModel \u0648 Repository \u0631\u0648 \u062f\u06cc\u062f\u06cc\u0645\u060c \u062f\u0631\u0628\u0627\u0631\u0647 State\u060c Session \u0648 Token \u0647\u0645 \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u06cc\u0645. \u062d\u0627\u0644\u0627 \u0648\u0642\u062a\u0634\u0647 \u0627\u06cc\u0646 \u0642\u0637\u0639\u0627\u062a \u0631\u0648 \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646\u200c\u0628\u0627\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0642\u0631\u0627\u0631 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[15],"tags":[],"class_list":["post-6097","post","type-post","status-publish","format-standard","hentry","category-15"],"_links":{"self":[{"href":"https:\/\/notes.yummybrands.studio\/index.php?rest_route=\/wp\/v2\/posts\/6097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/notes.yummybrands.studio\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/notes.yummybrands.studio\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/notes.yummybrands.studio\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/notes.yummybrands.studio\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6097"}],"version-history":[{"count":20,"href":"https:\/\/notes.yummybrands.studio\/index.php?rest_route=\/wp\/v2\/posts\/6097\/revisions"}],"predecessor-version":[{"id":6237,"href":"https:\/\/notes.yummybrands.studio\/index.php?rest_route=\/wp\/v2\/posts\/6097\/revisions\/6237"}],"wp:attachment":[{"href":"https:\/\/notes.yummybrands.studio\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6097"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/notes.yummybrands.studio\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6097"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/notes.yummybrands.studio\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}