ویژگی‌های مشتری و همگام‌سازی آفرینگ

setAttributes با Map، حذف null و رشته خالی، reserved attributes و محدودیت syncAttributesAndOfferingsIfNeeded.

ویژگی‌ها ورودی هدف‌گذاری هستند؛ هویت حساب یا حق دسترسی ایجاد نمی‌کنند. کلید و مقدار را با شرط پنل یکسان نگه دارید.

ثبت، حذف و دریافت پیشنهاد تازه

Flutter روی Android و iOS

import 'package:inappify_sdk/inappify_sdk.dart';

Future<void> updateMobileSegment() async {
  final written = await InappifySdk.setAttributesResult({
    'segment': 'returning', 'removed': null, 'also_removed': '',
  });
  if (!written.isSuccess) return;
  final refreshed = await InappifySdk.syncAttributesAndOfferingsIfNeeded();
  if (!refreshed.isSuccess) return;
  refreshed.data?.getCurrentOfferingForPlacement('upgrade');
}

Kotlin

import com.inappify.sdk.*

suspend fun updateMobileSegment(client: InappifyV2Client) {
    val written = client.setAttributes(mapOf(
        "segment" to "returning", "removed" to null, "also_removed" to "",
    ))
    if (written is InappifyResult.Failure) return
    when (val result = client.syncAttributesAndOfferingsIfNeeded()) {
        is InappifyResult.Success -> {
            val selected = result.data.getCurrentOfferingForPlacement("upgrade")
        }
        is InappifyResult.Failure -> { /* Retain/retry according to the error. */ }
    }
}

setAttributes یک Map از String به String? می‌گیرد. null و رشته خالی مقدار را حذف می‌کنند؛ رشته فقط شامل فاصله، مقدار است. ذخیره، صف ماندگار، retry و quarantine بر عهده SDK است؛ متدهای عمومی جداگانه queue/flush/sync/delete در API جدید وجود ندارند. نتیجه موفق ذخیره را با تضمین ارسال همه تغییرها در لحظه برابر ندانید. با خطای شبکه، همان هویت را نگه دارید و داده صف را پاک نکنید.

نام و اندازه مقدار

در موبایل کلید سفارشی از الگوی [A-Za-z][A-Za-z0-9_-]{0,39} و مقدار حداکثر ۵۰۰ code point پیروی می‌کند. ارسال‌ها batchهای حداکثر ۵۰تایی و صف حداکثر ۱۰۰۰ کلید دارد. رد قطعی validation با خطای 422 طبق قواعد فعلی quarantine می‌شود. Go V2 این مسیر را write-only ارائه می‌کند؛ انتظار نداشته باشید لیست خروجی setter یا CustomerInfo همه ویژگی‌ها را برگرداند.

در وب، ویژگی‌های سفارشی و reserved باید در تنظیم Web App قابل‌نوشتن باشند. JavaScript تغییرها را همان لحظه به سرور می‌فرستد و صف آفلاین مشابه native ندارد؛ محدودیت validation وب را به مقادیر موبایل تعمیم ندهید.

Reserved attributes

import 'package:inappify_sdk/inappify_sdk.dart';

Future<void> reservedExamples() async {
  await InappifySdk.setEmail('person@example.com');
  await InappifySdk.setDisplayName('Alex');
  await InappifySdk.setPhoneNumber('+989120000000');
  await InappifySdk.setCampaign('spring');
  await InappifySdk.setKeyword('upgrade');
  final allowed = await InappifySdk.canSetReservedAttributeResult(r'$email');
  if (allowed.isSuccess && allowed.data == true) {
    await InappifySdk.setReservedAttributeResult(
      attribute: InappifyReservedAttribute.email, value: '',
    );
  }
}

در Kotlin معادل‌ها client.setEmail("person@example.com")، setDisplayName("Alex") و setPhoneNumber("+989120000000") هستند و Result می‌دهند. سایر helperها: setApnsToken، setFcmToken، setIdfa، setIdfv، setIp، setCampaign و setKeyword؛ هرکدام یک رشته می‌گیرند. ارسال مقدار خالی برای حذف است. کلید reserved مثل $email را برای capability دقیقاً با همان پیشوند بدهید.

کلیدنکته
$email، $displayName، $phoneNumberاز setter مناسب استفاده کنید
$apnsTokens، $fcmTokens، $idfa، $idfvقابلیت پلتفرم، مجوز و اجازه نوشتن را بررسی کنید
$ipKotlin/Go V2 می‌پذیرند؛ validator فعلی iOS رد می‌کند و reserved وب نیست
$campaign، $keywordاطلاعات attribution؛ جای احراز هویت نیستند

سهمیه رفرش مشترک

Kotlin و Flutter روی Android/iOS تا ۵ اجرای پذیرفته‌شده در بازه شناور ۶۰ ثانیه دارند. اجرای ناموفق نیز سهمیه مصرف می‌کند. تغییر حساب سهمیه client را صفر نمی‌کند. فراخوانی اضافه بدون شبکه، کش همان نشست را می‌دهد یا RATE_LIMITED_NO_CACHE با زمان انتظار. صف خالی مانع fetch تازه در سهمیه نیست.

در JS مستقیم از await client.setAttributes({segment: 'returning', removed: null}) و سپس await client.syncAttributesAndOfferingsIfNeeded() استفاده کنید. این متد در وب ابتدا customer snapshot و سپس offerings را تازه می‌کند. پل Flutter Web 0.2.1 آن را پیاده نکرده است.

کش، کشور و نسخه موبایل را دستی تغییر ندهید؛ setTargetingContext در facade جدید وجود ندارد. آفرینگ‌ها · جدول پلتفرم‌ها