عبور از وضعیت در اقدامات ایمیل

شما می‌توانید هنگام ارسال اقدامات ایمیل برای تنظیم مجدد رمز عبور یا تأیید ایمیل کاربر، وضعیت را از طریق یک URL ادامه ارسال کنید. این به کاربر این امکان را می‌دهد که پس از اتمام اقدام، به برنامه بازگردانده شود. علاوه بر این، می‌توانید مشخص کنید که آیا لینک اقدام ایمیل را مستقیماً از یک برنامه تلفن همراه هنگام نصب آن به جای یک صفحه وب مدیریت کنید یا خیر.

این می‌تواند در سناریوهای رایج زیر بسیار مفید باشد:

  • کاربری که در حال حاضر وارد سیستم نشده است، ممکن است سعی در دسترسی به محتوایی داشته باشد که نیاز به ورود به سیستم دارد. با این حال، ممکن است کاربر رمز عبور خود را فراموش کرده باشد و بنابراین جریان تنظیم مجدد رمز عبور را فعال کند. در پایان این جریان، کاربر انتظار دارد به بخشی از برنامه که سعی در دسترسی به آن داشته است، بازگردد.

  • یک برنامه ممکن است فقط به حساب‌های تأیید شده دسترسی ارائه دهد. برای مثال، یک برنامه خبرنامه ممکن است از کاربر بخواهد قبل از عضویت، ایمیل خود را تأیید کند. کاربر باید مراحل تأیید ایمیل را طی کند و انتظار داشته باشد که برای تکمیل عضویت خود به برنامه بازگردانده شود.

  • به طور کلی، وقتی کاربری فرآیند بازنشانی رمز عبور یا تأیید ایمیل را در یک برنامه اپل آغاز می‌کند، انتظار دارد که این فرآیند در داخل برنامه تکمیل شود؛ قابلیت ارسال وضعیت از طریق continue URL این امر را ممکن می‌سازد.

قابلیت ارسال وضعیت از طریق یک URL ادامه‌دار، ویژگی قدرتمندی است که Firebase Auth ارائه می‌دهد و می‌تواند تجربه کاربری را به میزان قابل توجهی بهبود بخشد.

ارسال آدرس اینترنتی وضعیت/ادامه در اکشن‌های ایمیل

برای ارسال امن یک URL ادامه‌دار، دامنه‌ی مربوط به URL باید در کنسول Firebase در لیست مجاز قرار گرفته باشد. این کار در بخش احراز هویت با اضافه کردن این دامنه به لیست دامنه‌های مجاز در زیر تب روش ورود (Sign-in method) انجام می‌شود، البته اگر از قبل وجود نداشته باشد.

هنگام ارسال ایمیل تنظیم مجدد رمز عبور یا ایمیل تأیید، باید یک نمونه ActionCodeSettings ارائه شود. این رابط پارامترهای زیر را دریافت می‌کند:

پارامتر نوع توضیحات
url رشته

لینک (آدرس اینترنتی وضعیت/ادامه) را تنظیم می‌کند که در زمینه‌های مختلف معانی متفاوتی دارد:

  • وقتی لینک در ویجت‌های اکشن وب مدیریت می‌شود، این لینک عمیق در پارامتر کوئری continueUrl است.
  • وقتی لینک مستقیماً در برنامه مدیریت می‌شود، این پارامتر query continueUrl در لینک عمیق Dynamic Link است.
iOSBundleId رشته شناسه بسته را تنظیم می‌کند. این کد سعی می‌کند لینک را در یک برنامه اپل در صورت نصب بودن آن باز کند. برنامه باید در کنسول ثبت شود. اگر هیچ شناسه بسته‌ای ارائه نشود، مقدار این فیلد برابر با شناسه بسته اصلی برنامه تنظیم می‌شود.
androidPackageName رشته نام بسته اندروید را تنظیم می‌کند. این تابع در صورت نصب بودن برنامه اندروید، سعی می‌کند لینک را در آن باز کند.
androidInstallApp بول مشخص می‌کند که آیا برنامه اندروید نصب شود یا خیر، اگر دستگاه از آن پشتیبانی کند و برنامه از قبل نصب نشده باشد. اگر این فیلد بدون packageName ارائه شود، خطایی نمایش داده می‌شود که توضیح می‌دهد packageName باید همراه با این فیلد ارائه شود.
androidMinimumVersion رشته حداقل نسخه برنامه‌ای که در این جریان پشتیبانی می‌شود. اگر minimumVersion مشخص شده باشد و نسخه قدیمی‌تری از برنامه نصب شده باشد، کاربر برای ارتقاء برنامه به فروشگاه Play هدایت می‌شود. برنامه اندروید باید در Console ثبت شود.
handleCodeInApp بول اینکه آیا لینک اکشن ایمیل ابتدا در یک برنامه تلفن همراه یا یک لینک وب باز شود یا خیر. پیش‌فرض false است. وقتی روی true تنظیم شود، لینک کد اکشن به عنوان یک لینک جهانی یا لینک برنامه اندروید ارسال می‌شود و در صورت نصب توسط برنامه باز می‌شود. در حالت false، کد ابتدا به ویجت وب ارسال می‌شود و سپس در صورت نصب، در ادامه به برنامه هدایت می‌شود.
dynamicLinkDomain رشته (منسوخ شده، از `linkDomain` استفاده کنید) دامنه پیوند پویا (یا زیر دامنه) را برای استفاده برای پیوند فعلی در صورت باز شدن با استفاده از Firebase Dynamic Links تنظیم می‌کند. از آنجایی که می‌توان چندین دامنه پیوند پویا را برای هر پروژه پیکربندی کرد، این فیلد امکان انتخاب صریح یکی را فراهم می‌کند. اگر هیچ کدام ارائه نشود، دامنه اول به طور پیش‌فرض استفاده می‌شود. linkDomain رشته دامنه‌ی سفارشی اختیاری Firebase Hosting که هنگام باز شدن لینک از طریق یک برنامه‌ی موبایل مشخص استفاده می‌شود. این دامنه باید در Firebase Hosting پیکربندی شده و متعلق به پروژه باشد. این نمی‌تواند یک دامنه‌ی پیش‌فرض Hosting (`web.app` یا `firebaseapp.com`) باشد. این دامنه جایگزین تنظیم منسوخ‌شده‌ی `dynamicLinkDomain` می‌شود.

مثال زیر نحوه ارسال لینک تأیید ایمیل را نشان می‌دهد که ابتدا در یک برنامه تلفن همراه به عنوان یک لینک پویای Firebase با استفاده از دامنه لینک پویای سفارشی example.page.link (برنامه iOS با آدرس com.example.ios یا برنامه اندروید با com.example.android که در آن برنامه در صورت عدم نصب، نصب می‌شود و حداقل نسخه 12 است) باز می‌شود. لینک عمیق حاوی payload ادامه URL https://www.example.com/?email=user@example.com خواهد بود.

final user = FirebaseAuth.instance.currentUser;

final actionCodeSettings = ActionCodeSettings(
  url: "http://www.example.com/verify?email=${user?.email}",
  iOSBundleId: "com.example.ios",
  androidPackageName: "com.example.android",
);

await user?.sendEmailVerification(actionCodeSettings);

احراز هویت فایربیس (Firebase Auth) هنگام ارسال لینکی که قرار است در یک برنامه تلفن همراه باز شود، از لینک‌های پویای فایربیس (Firebase Dynamic Links) استفاده می‌کند. برای استفاده از این ویژگی، لینک‌های پویا باید در کنسول فایربیس پیکربندی شوند.

  1. فعال کردن لینک‌های پویا در فایربیس:

    1. در کنسول فایربیس، بخش Dynamic Links را باز کنید.

    2. اگر هنوز شرایط پیوندهای پویا را نپذیرفته‌اید و یک دامنه پیوندهای پویا ایجاد نکرده‌اید، اکنون این کار را انجام دهید.

    3. اگر قبلاً یک دامنه Dynamic Links ایجاد کرده‌اید، آن را یادداشت کنید. یک دامنه Dynamic Links معمولاً مانند مثال زیر است:

      example.page.link

    4. هنگام پیکربندی برنامه اپل یا اندروید خود برای رهگیری لینک ورودی، به این مقدار نیاز خواهید داشت.

  2. پیکربندی برنامه‌های اندروید:

    1. اگر قصد دارید این لینک‌ها را از برنامه اندروید خود مدیریت کنید، نام بسته اندروید باید در تنظیمات پروژه کنسول فایربیس مشخص شود. علاوه بر این، SHA-1 و SHA-256 گواهی برنامه نیز باید ارائه شوند.
    2. همچنین باید فیلتر intent را برای لینک عمیق در فایل AndroidManifest.xml خود پیکربندی کنید.
    3. برای اطلاعات بیشتر در این مورد، به دستورالعمل‌های دریافت لینک‌های پویای اندروید مراجعه کنید.
  3. پیکربندی برنامه‌های اپل:

    1. اگر قصد دارید این لینک‌ها را از برنامه خود مدیریت کنید، شناسه بسته (bundle ID) باید در تنظیمات پروژه کنسول Firebase مشخص شود. علاوه بر این، شناسه فروشگاه برنامه (App Store ID) و شناسه تیم توسعه‌دهنده اپل (Apple Developer Team ID) نیز باید مشخص شوند.
    2. همچنین باید دامنه پیوند جهانی FDL را به عنوان یک دامنه مرتبط در قابلیت‌های برنامه خود پیکربندی کنید.
    3. اگر قصد دارید برنامه خود را در iOS نسخه‌های ۸ و پایین‌تر توزیع کنید، باید شناسه بسته خود را به عنوان یک طرح سفارشی برای URL های ورودی تنظیم کنید.
    4. برای اطلاعات بیشتر در این مورد، به دستورالعمل‌های دریافت لینک‌های پویا از پلتفرم‌های اپل مراجعه کنید.

مدیریت اقدامات ایمیل در یک برنامه وب

می‌توانید مشخص کنید که آیا می‌خواهید ابتدا لینک کد اکشن را از یک برنامه وب مدیریت کنید و سپس پس از اتمام موفقیت‌آمیز، به صفحه وب یا برنامه موبایل دیگری هدایت شوید، مشروط بر اینکه برنامه موبایل در دسترس باشد. این کار با تنظیم handleCodeInApp به false در شیء ActionCodeSettings انجام می‌شود. در حالی که شناسه بسته یا نام بسته اندروید لازم نیست، ارائه آنها به کاربر اجازه می‌دهد تا پس از تکمیل کد اکشن ایمیل، به برنامه مشخص شده هدایت شود.

آدرس اینترنتی مورد استفاده در اینجا، همانی است که در بخش قالب‌های عملیات ایمیل پیکربندی شده است. یک آدرس اینترنتی پیش‌فرض برای همه پروژه‌ها در نظر گرفته شده است. برای کسب اطلاعات بیشتر در مورد نحوه سفارشی‌سازی کنترل‌کننده عملیات ایمیل، به بخش سفارشی‌سازی کنترل‌کننده‌های ایمیل مراجعه کنید.

در این حالت، لینک درون پارامتر کوئری continueURL یک لینک FDL خواهد بود که payload آن URL مشخص شده در شیء ActionCodeSettings است. در حالی که می‌توانید لینک ورودی از برنامه خود را بدون هیچ وابستگی اضافی رهگیری و مدیریت کنید، توصیه می‌کنیم از کتابخانه کلاینت FDL برای تجزیه لینک عمیق برای خود استفاده کنید.

هنگام مدیریت اقدامات ایمیل مانند تأیید ایمیل، کد اکشن از پارامتر کوئری oobCode باید از لینک عمیق تجزیه شود و سپس از طریق applyActionCode اعمال شود تا تغییر اعمال شود، یعنی ایمیل تأیید شود.

مدیریت اقدامات ایمیل در یک برنامه تلفن همراه

می‌توانید مشخص کنید که آیا می‌خواهید ابتدا لینک کد اکشن را در برنامه موبایل خود مدیریت کنید، مشروط بر اینکه نصب شده باشد. در برنامه‌های اندروید، شما همچنین می‌توانید از طریق androidInstallApp مشخص کنید که برنامه در صورتی که دستگاه از آن پشتیبانی می‌کند و قبلاً نصب نشده است، نصب شود. اگر روی لینک از دستگاهی که از برنامه موبایل پشتیبانی نمی‌کند کلیک شود، به جای آن از یک صفحه وب باز می‌شود. این کار با تنظیم handleCodeInApp به true در شیء ActionCodeSettings انجام می‌شود. نام بسته اندروید یا شناسه بسته برنامه موبایل نیز باید مشخص شود. آدرس اینترنتی جایگزین که در اینجا استفاده می‌شود، زمانی که هیچ برنامه موبایلی در دسترس نیست، همانی است که در بخش الگوهای اقدام ایمیل پیکربندی شده است. یک آدرس اینترنتی پیش‌فرض برای همه پروژه‌ها در نظر گرفته شده است. برای کسب اطلاعات بیشتر در مورد نحوه سفارشی‌سازی کنترل‌کننده اقدام ایمیل، به سفارشی‌سازی کنترل‌کننده‌های ایمیل مراجعه کنید.

در این حالت، لینک برنامه تلفن همراه ارسال شده به کاربر، یک لینک FDL خواهد بود که بار مفید آن، URL کد اکشن است که در کنسول پیکربندی شده و دارای پارامترهای پرس و جو oobCode ، mode ، apiKey و continueUrl می‌باشد. مورد دوم، URL اصلی مشخص شده در شیء ActionCodeSettings خواهد بود. در حالی که می‌توانید لینک ورودی از برنامه خود را بدون هیچ وابستگی اضافی رهگیری و مدیریت کنید، توصیه می‌کنیم از کتابخانه کلاینت FDL برای تجزیه لینک عمیق برای خود استفاده کنید. کد اکشن را می‌توان مستقیماً از یک برنامه تلفن همراه، مشابه نحوه مدیریت آن از جریان وب که در بخش سفارشی‌سازی کنترل‌کننده‌های ایمیل توضیح داده شده است، اعمال کرد.

هنگام مدیریت اقدامات ایمیل مانند تأیید ایمیل، کد اکشن از پارامتر کوئری oobCode باید از لینک عمیق تجزیه شود و سپس از طریق applyActionCode اعمال شود تا تغییر اعمال شود، یعنی ایمیل تأیید شود.