کیف جایزه بدون سرور
ثبت و مصرف یکتا در کیف نصب دیدنکس؛ ماندگاری و بازیابی.
کیف جایزه نصب، در زیرساخت دیدنکس
اپ یا سایت به سرور شخصی و ورود کاربر نیاز ندارد. موجودی دیجیتال، دریافتها و مصرفهای یکتا در دیدنکس ذخیره میشوند. این موجودی از کیف مالی ناشر/تبلیغدهنده جدا است؛ مبلغ نقدی یا موجودی بانکی نیست.
توکن نصب و ماندگاری
SDK برای جایزه و پوش از action=register در /ad/v1/audience توکن تصادفی میگیرد؛ سرور فقط هش بخش محرمانه را نگه میدارد. وب localStorage، Flutter و Kotlin فضای خصوصی برنامه، Swift/Flutter iOS Keychain، Unity فضای PlayerPrefs و B4A فایل داخلی برنامه را به کار میبرند. اینها فضای همان اپاند؛ PlayerPrefs یا فایل داخلی جای احراز هویت دستگاه و مقاومت در برابر دستگاه روتشده نیستند. توکن را عمومی یا بین نصبها مشترک نکنید. مسدودبودن ذخیره وب/پل Flutter میتواند نگهداری را به حافظه همان اجرا محدود کند.
حذف داده برنامه، برخی نصبهای دوباره، تغییر دستگاه یا از دستدادن توکن میتواند دسترسی به کیف قبلی را از بین ببرد. بازیابی از طریق ایمیل کاربر بهصورت خودکار وجود ندارد. برای هویت چنددستگاهی، روش سروری ناشر را انتخاب کنید. اپ همچنان میتواند بدون ورود و با همین کیف نصب کار کند.
خواندن و مصرف
POST /ad/v1/audience
{"action":"balance","installationToken":"INS_PRIVATE_TOKEN"}
// {rewardScope:"installation",balances:[{label:"Coin",amount:10}]}
POST /ad/v1/audience
{"action":"spendReward","installationToken":"INS_PRIVATE_TOKEN",
"label":"Coin","amount":3,"externalId":"UNIQUE_FEATURE_PURCHASE_16_PLUS"}
// Same externalId + same payload = same spend, never a second deduction.
// Same ID + different amount/label = 409 reward_spend_conflict.
// Not enough balance = 409 insufficient_reward_balance.SDK برای نمایش جایزه، register و claim را خودکار انجام میدهد. برای مصرف یک قابلیت در اپ، externalId را پیش از ارسال پایدار نگه دارید و در retry همان شناسه را بفرستید. callback محل دوباره افزایش موجودی نیست. پس از timeout، از حدس یا شمارنده محلی بهعنوان موجودی معتبر استفاده نکنید.
رابط هر پلتفرم
// Flutter, direct client:
final wallet = await client.audience.balance(unitId);
await client.audience.spend(unitId, label:'Coin', amount:3, externalId:purchaseId);
// Web:
await DidnexAds.audience(unitId).balance();
await DidnexAds.audience(unitId).spend('Coin',3,purchaseId);
// Unity:
await ads.RewardBalanceAsync(unitId);
await ads.SpendRewardAsync(unitId,"Coin",3,purchaseId);
// Kotlin: call on worker thread, or requestAsync(...):
audience.call(unitId,"balance");
// Swift:
try await audience.call(unitID:unitId,action:"balance")
// B4A:
Wait For (Ads.Audience(UnitId,"balance",CreateMap())) Complete (Result As Map)revokeInstallation توکن و عضویت پوش را لغو میکند. سوابق یکتای دریافت/مصرف برای جلوگیری از تکرار حفظ میشوند. API نصب به پنل، حساب ناشر، کلیدهای خصوصی یا کیف نصب دیگر دسترسی نمیدهد.