هویت مشتری، logIn و logOut

ورود و خروج موبایل با شناسه پایدار، هویت Anonymous و ورود وب با Identity Ticket یا OTP.

ابتدا حساب را در سیستم خودتان احراز هویت کنید، سپس همان شناسه پایدار را به SDK معرفی کنید. شناسه مشتری جای رمز، session یا مجوز سمت سرور نیست. شناسه عددی را به رشته تبدیل کنید؛ ایمیل و شماره تلفن خام را برای شناسه حساب به‌کار نبرید.

ورود و تغییر حساب در موبایل

import 'package:inappify_sdk/inappify_sdk.dart';

Future<bool> identifyCustomer(String authenticatedUserId) async {
  final result = await InappifySdk.logInResult(authenticatedUserId);
  return result.isSuccess;
}

Future<bool> signOutCustomer() async {
  final result = await InappifySdk.logOutResult();
  return result.isSuccess;
}
import com.inappify.sdk.*

suspend fun identifyCustomer(client: InappifyV2Client, userId: String) =
    client.logIn(userId)

suspend fun signOutCustomer(client: InappifyV2Client) = client.logOut()

فلاتر حالت ساده logIn(id) و logOut() با خروجی bool هم دارد. Kotlin از همان InappifyResult استفاده می‌کند. ورود فقط شناسه می‌گیرد؛ کلید API در configure بوده است. تا پایان انتقال هویت، دکمه خرید را غیرفعال و داده UI حساب قبلی را کنار بگذارید.

شناسه سفارشی موبایل ۱ تا ۱۰۰ code point است و نباید کاراکتر کنترلی، فاصله ابتدا/انتها، Unicode نامعتبر یا پیشوند رزروشده Anonymous داشته باشد. فقط هویت واقعی حساب جاری را ارسال کنید.

Anonymous و خروج

نبود appUserIdentifier در configure می‌تواند هویت قبلی را بازیابی کند؛ معادل خروج نیست. از شناسه Anonymous ساخته‌شده توسط SDK/سرور استفاده کنید. پیشوند جدید $INAAnonymousID: و شناسه‌های قدیمی پشتیبانی‌شده را در کد میزبان بازنویسی نکنید.

logOut نشست ناشناس مناسب را برقرار می‌کند؛ بازپرداخت، پاک‌کردن خریدهای پرداخت‌شده یا بستن client نیست. خطای شبکه وسط خروج را به موفقیت قطعی تبدیل نکنید و داده حساب قبلی را به حساب جدید نمایش ندهید. خرید ناتمام با هویت اصلی خودش حفظ می‌شود؛ تغییر حساب مجوز واگذاری دستی آن نیست.

ورود Flutter Web

logInResult('customer_123') روی وب پشتیبانی نمی‌شود. اگر کاربر قبلاً در اپ شما وارد شده، backend احرازشده میزبان یک ticket کوتاه‌عمر و یک‌بارمصرف صادر کند:

import 'package:inappify_sdk/inappify_sdk.dart';

Future<bool> authenticateWeb({
  required String publicWebKey,
  required String hostUserId,
  required Future<String> Function() fetchFreshTicket,
}) async {
  final result = await InappifySdk.configureAuthenticatedWebSessionResult(
    apiKey: publicWebKey,
    expectedCustomerIdentifier: hostUserId,
    identityTicketProvider: fetchFreshTicket,
    country: 'IR',
    appVersion: '2.0.0',
  );
  return result.isSuccess;
}

این helper فقط هنگام نیاز ticket تازه می‌گیرد و هویت مورد انتظار را تطبیق می‌دهد. ticket را در مرورگر نسازید یا پس از پاسخ مبهم کورکورانه تکرار نکنید. برای ورود صریح پس از configure، یکی از loginWithIdentityTicketResult(identityTicket: ...) یا alias آن exchangeIdentityTicketResult(...) را صدا بزنید؛ هر دو را برای یک ticket اجرا نکنید.

ورود JavaScript و OTP

import type { InAppify } from '@inappifylabs/web-sdk';

export async function loginWithTicket(client: InAppify, freshTicket: string) {
  return client.logIn({ identityTicket: freshTicket });
}

export async function loginWithOtp(client: InAppify, challengeId: string, code: string) {
  return client.logIn({ challengeId, code });
}

برای OTP، ابتدا requestOtp({phone, captchaKey?, captchaAnswer?}) و در صورت نیاز createOtpCaptcha() را اجرا و challenge برگشتی را نمایش دهید. سپس challengeId و کد واردشده کاربر را بدهید. معادل فلاتر requestOtpResult، createOtpCaptchaResult و verifyOtpResult(challengeId:, code:) است. ارسال پیامک باید حاصل اقدام کاربر باشد، نه تست خودکار زنده.

در وب logOut() از client JS و logOutResult() از Flutter استفاده می‌شود. موقتی‌بودن اختلال شبکه یا storage را به‌تنهایی logout تلقی نکنید؛ sessionState، snapshot و sessionStateChanges را بررسی کنید.

دریافت آفرینگ · راهنمای وب