# اتصال Basic4Android · B4A — نسخه ۱ ## مسیر کوتاه ۱. رسانه و جایگاه را در پنل بسازید و تأیید کنید. ۲. همین SDK را نصب کنید. ۳. شناسه UNT_ نمونه را با جایگاه همان فرمت جایگزین کنید. اپ شما به سرور، دامنه اختصاصی، JWT یا کلید API نیاز ندارد. نشانی HTTPS مثال، سرور خود دیدنکس است. پس از تغییر دامنه پلتفرم، نشانی جدید را در همان یک تنظیم جایگزین کنید. شناسه بسته واقعی اپ باید با رسانه تأییدشده برابر باشد. ## نصب و پیش‌نیاز DidnexAds.bas و DidnexPush.bas را از همین ZIP با Project → Add Existing Modules به‌عنوان Class Module اضافه کنید؛ نام ماژول‌ها دقیقاً DidnexAds و DidnexPush باشد. کتابخانه‌های OkHttpUtils2، OkHttp، JSON، JavaObject و Audio را فعال کنید. Main.bas همراه، Activity کامل انتخاب ۱۳ فرمت است. برای Inbox کلاس DidnexPush.bas را نیز اضافه کنید؛ Firebase فقط برای پوش پس‌زمینه انتخابی است. B4A با پشتیبانی ResumableSub و inline Java؛ نمونه metadata نسخه 13 دارد. کلاس را با Initialize از Activity یا B4XPage مالک بسازید؛ InitializeDirect و Connect قدیمی حذف شده‌اند. آرگومان چهارم در اتصال مستقیم Application.PackageName و در پراکسی نشانی HTTPS دیدنکس است. هر کلاس یک تبلیغ هم‌زمان دارد؛ برای بنر و تمام‌صفحه دو نمونه جدا بسازید. در نسخه فنی 0.17.1 خطای فنی با noFill متفاوت است؛ Handler نمونه، sdkVersion، code، stage، operation، exception، frame، line و httpStatus را در Logs ثبت می‌کند. media_unavailable در نسخه قبلی از Catch عمومی بود و الزاماً خرابی ویدیو را نشان نمی‌داد. کلاس را جایگزین و Clean Project کنید؛ داده نصب را پاک نکنید. IntegrityProvider پیش‌فرض Null است؛ اعتبارسنجی بومی فقط با تنظیم provider دارای Proof فعال می‌شود. سیاست اعتبارسنجی سرور مستقل از این گزینه اعمال می‌شود. ظاهر 0.17.1: ویدیوی معمولی هنگام آماده‌بودن و حداقل ۵۰٪ دیده‌شدن، خودکار و بی‌صدا پخش می‌شود؛ دکمه شروع لازم نیست. نشان دیدنکس روی قاب است، لمس بدنه و دکمه مقصد مشترک دارند و صدا/توقف کنترل مستقل دارند. صوت و جایزه نیازمند اقدام کاربرند. AutoPlayVideo=False پخش خودکار را خاموش می‌کند. کارت نسبت واقعی محتوا را حفظ می‌کند و رویداد loaded دارای heightPx پیشنهادی ظرف است. برای مدیریت ظاهر از پنل، سرور 8.8.0 و SDK جدید لازم است؛ سرور قبلی با ظاهر پیش‌فرض سازگار است. ``` ' Globals: Private Ads As DidnexAds ' Activity_Create: Ads.Initialize(Me,"Ads","https://didnex.com",Application.PackageName) ' Inside a resumable sub, after creating a Panel of height >=180dip: Wait For (Ads.ShowBanner("UNT_BANNER",BannerPanel)) Complete (Shown As Boolean) ' Activity_Pause: Ads.SetActive(False) ' Activity_Resume: Ads.SetActive(True) ' Permanent removal: Ads.Close ``` ## Manifest و تنظیمات سیستم‌عامل فایل `sdk/b4a/Examples/Manifest.txt` کنار مثال است. قطعه‌ها را با تنظیمات موجود ادغام کنید. مجوز اینترنت در Android باید در manifest اصلی نسخه Release هم باشد. تبلیغ پایه به مجوز مکان، شناسه تبلیغاتی، دسترسی حافظه یا اعلان نیاز ندارد. ``` ' Add these lines in B4A Manifest Editor, preserving your existing entries. AddPermission(android.permission.INTERNET) AddPermission(android.permission.ACCESS_NETWORK_STATE) ' Inbox/ads need no notification, storage, location or advertising-ID permission. ' For optional background FCM only: also follow sdk/push/b4a/README.md. ' Optional system push: merge integrations/Manifest.txt only after installing FirebaseNotifications. ``` برای Flutter/Unity در iOS، حداقل iOS 15 و PrivacyInfo.xcprivacy بسته را رعایت کنید. ATS را برای نشانی HTTPS باز نکنید. پوش پس‌زمینه تنها پس از رضایت و تنظیم سرویس سیستم‌عامل فعال می‌شود؛ Inbox به Firebase یا مجوز اعلان نیاز ندارد. ## فونت، ظاهر و کنترل سروری ظاهر کارت در هر دو روش مستقیم و پراکسی از پاسخ همان تبلیغ خوانده می‌شود. مدیر در تنظیمات ← ظاهر تبلیغ و SDK، رنگ، زمینه، فونت، گردی کارت، جای نشان و پخش خودکار ویدیوی معمولی را تعیین می‌کند. ابتدا یک‌بار SDK و اپ را به‌روزرسانی کنید؛ سپس تغییرات پشتیبانی‌شده در درخواست بعدی تبلیغ اعمال می‌شوند. فونت Noto Sans Arabic فارسی و لوگو از سرور خود دیدنکس کش می‌شوند؛ خطای این دارایی‌های اختیاری باعث noFill یا خطای تبلیغ نمی‌شود. Unity برای UGUI یک فونت کوچک فارسی همراه و شکل‌دهی حروف در مرز نمایش دارد. سرور کد اجرایی جدید به اپ نمی‌فرستد. فونت حدود ۲۴۵ کیبی‌بایت است و پس از کش برای هر تبلیغ دوباره دریافت نمی‌شود؛ پاک‌شدن کش می‌تواند دریافت دوباره را لازم کند. پخش، لمس و تشخیص دیدپذیری روی دستگاه باقی می‌مانند. توقف دستی، پس‌زمینه و پایان ویدیو رعایت می‌شوند. نشان شبکه و دکمه‌های صدا، توقف و بستن، کلیک تبلیغ‌دهنده ثبت نمی‌کنند. بدنه و دکمه مقصد امضاشده مشترک دارند. لمس بازی تعاملی به خود بازی می‌رسد. در وب مبدأ دیدنکس را در `font-src` سیاست CSP مجاز کنید. ## همه فرمت‌ها فرمت در پنل و روی جایگاه تعیین می‌شود؛ نوع متد را مطابق جدول انتخاب کنید. `playable` از مسیر تمام‌صفحه و `audio` از مسیر درون صفحه استفاده می‌کند. ویدیوی معمولی فقط هنگام فعال‌بودن اپ و حداقل ۵۰٪ دیده‌شدن، خودکار و بی‌صداست؛ صوت و جایزه نیازمند انتخاب کاربرند. محدودیت مرورگر ممکن است پخش دستی را لازم کند. | فرمت | شناسه قراردادی | روش نمایش | |---|---|---| | بنر | `banner` | درون صفحه | | بنر تطبیقی | `adaptive_banner` | درون صفحه | | همسان | `native` | درون صفحه | | ویدیوی همسان | `native_video` | درون صفحه | | ویدیوی درون محتوا | `video` | درون صفحه | | بینابینی | `interstitial` | تمام‌صفحه | | ویدیوی جایزه‌دار | `rewarded` | جایزه‌دار | | بینابینی جایزه‌دار | `rewarded_interstitial` | جایزه‌دار | | آغاز اپ | `app_open` | تمام‌صفحه | | بازی تعاملی | `playable` | تمام‌صفحه | | صوتی | `audio` | درون صفحه | | کاروسلی | `carousel` | درون صفحه | | نظرسنجی | `poll` | درون صفحه | ### بنر ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("banner":"UNT_BANNER") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("banner")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### بنر تطبیقی ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("adaptive_banner":"UNT_ADAPTIVE_BANNER") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("adaptive_banner")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### همسان ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("native":"UNT_NATIVE") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("native")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### ویدیوی همسان ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("native_video":"UNT_NATIVE_VIDEO") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("native_video")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### ویدیوی درون محتوا ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("video":"UNT_VIDEO") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("video")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### بینابینی ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("interstitial":"UNT_INTERSTITIAL") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("interstitial")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### ویدیوی جایزه‌دار ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("rewarded":"UNT_REWARDED") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("rewarded")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### بینابینی جایزه‌دار ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("rewarded_interstitial":"UNT_REWARDED_INTERSTITIAL") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("rewarded_interstitial")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### آغاز اپ ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("app_open":"UNT_APP_OPEN") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("app_open")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### بازی تعاملی ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("playable":"UNT_PLAYABLE") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("playable")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### صوتی ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("audio":"UNT_AUDIO") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("audio")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### کاروسلی ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("carousel":"UNT_CAROUSEL") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("carousel")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### نظرسنجی ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("poll":"UNT_POLL") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("poll")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ### سرور اختیاری · بنر برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("banner":"UNT_BANNER") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("banner")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · بنر تطبیقی برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("adaptive_banner":"UNT_ADAPTIVE_BANNER") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("adaptive_banner")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · همسان برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("native":"UNT_NATIVE") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("native")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · ویدیوی همسان برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("native_video":"UNT_NATIVE_VIDEO") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("native_video")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · ویدیوی درون محتوا برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("video":"UNT_VIDEO") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("video")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · بینابینی برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("interstitial":"UNT_INTERSTITIAL") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("interstitial")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · ویدیوی جایزه‌دار برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("rewarded":"UNT_REWARDED") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("rewarded")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · بینابینی جایزه‌دار برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("rewarded_interstitial":"UNT_REWARDED_INTERSTITIAL") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("rewarded_interstitial")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · آغاز اپ برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("app_open":"UNT_APP_OPEN") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("app_open")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · بازی تعاملی برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("playable":"UNT_PLAYABLE") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("playable")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · صوتی برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("audio":"UNT_AUDIO") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("audio")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · کاروسلی برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("carousel":"UNT_CAROUSEL") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("carousel")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ### سرور اختیاری · نظرسنجی برای این روش، پراکسی خودتان و callback نشست فعلی اپ را تکمیل کنید؛ تابع خالی نمونه اتصال واقعی ایجاد نمی‌کند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("poll":"UNT_POLL") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("poll")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://YOUR-BACKEND.example/ads","https://didnex.com") FullAds.Initialize(Me,"FullAds","https://YOUR-BACKEND.example/ads","https://didnex.com") ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null InlineAds.DiagnosticToken = "" FullAds.DiagnosticToken = "" End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ' Connect these callbacks to your current authenticated app session. Sub InlineAds_SessionToken As String Return "" End Sub Sub FullAds_SessionToken As String Return "" End Sub ``` ## نمونه کامل قابل استفاده فایل `sdk/b4a/Examples/Main.bas` در همین بسته قرار دارد. نام package/namespace مثال متعلق به اپ نمونه است؛ آن را با پروژه میزبان هماهنگ کنید. شناسه‌های UNT_ جایگزین‌اند و برای دریافت تبلیغ واقعی باید عوض شوند. ``` B4A=true Group=Example ModulesStructureVersion=1 Type=Activity Version=13.0 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Didnex #VersionCode: 1 #VersionName: 1 #SupportedOrientations: unspecified #End Region #Region Activity Attributes #FullScreen: False #IncludeTitle: False #End Region Sub Process_Globals End Sub Sub Globals Private InlineAds, FullAds As DidnexAds Private BannerPanel, FullPanel As Panel Private FormatSelect As Spinner Private Units As Map Private RequestBusy As Boolean Private ShowButton As Button Private Status As Label Private LastFailure As String End Sub Sub Activity_Create(FirstTime As Boolean) Activity.Color = Colors.White Units = CreateMap("banner":"UNT_BANNER","adaptive_banner":"UNT_ADAPTIVE_BANNER","native":"UNT_NATIVE","native_video":"UNT_NATIVE_VIDEO","video":"UNT_VIDEO","interstitial":"UNT_INTERSTITIAL","rewarded":"UNT_REWARDED","rewarded_interstitial":"UNT_REWARDED_INTERSTITIAL","app_open":"UNT_APP_OPEN","playable":"UNT_PLAYABLE","audio":"UNT_AUDIO","carousel":"UNT_CAROUSEL","poll":"UNT_POLL") FormatSelect.Initialize("") FormatSelect.AddAll(Array As String("banner","adaptive_banner","native","native_video","video","interstitial","rewarded","rewarded_interstitial","app_open","playable","audio","carousel","poll")) Activity.AddView(FormatSelect,0,0,100%x,48dip) ShowButton.Initialize("ShowButton") ShowButton.Text = "نمایش تبلیغ" Activity.AddView(ShowButton,0,48dip,100%x,48dip) Status.Initialize("") Activity.AddView(Status,0,96dip,100%x,48dip) BannerPanel.Initialize("") Activity.AddView(BannerPanel,0,144dip,100%x,Max(180dip,100%y-144dip)) FullPanel.Initialize("") FullPanel.Color = 0xE60B1020 Activity.AddView(FullPanel,0,0,100%x,100%y) FullPanel.Visible = False ' No backend, app login, JWT or private key. InlineAds.Initialize(Me,"InlineAds","https://didnex.com",Application.PackageName) FullAds.Initialize(Me,"FullAds","https://didnex.com",Application.PackageName) ' Native attestation is optional; enable only with a configured Proof provider. InlineAds.IntegrityProvider = Null FullAds.IntegrityProvider = Null End Sub Private Sub ShowButton_Click If RequestBusy Or FullPanel.Visible Then Return RequestBusy = True ShowButton.Enabled = False LastFailure = "" Status.Text = "در حال دریافت تبلیغ…" Dim Format As String = FormatSelect.SelectedItem Dim UnitId As String = Units.Get(Format) ' Replace the UNT_ values with approved unit IDs from your panel. Dim IsReward As Boolean = Format = "rewarded" Or Format = "rewarded_interstitial" Dim IsFull As Boolean = IsReward Or Format = "interstitial" Or Format = "app_open" Or Format = "playable" If IsFull Then FullPanel.Visible = False If IsReward Then Wait For (FullAds.ShowRewarded(UnitId,FullPanel)) Complete (RewardShown As Boolean) FullPanel.Visible = RewardShown Else Wait For (FullAds.ShowInterstitial(UnitId,FullPanel)) Complete (FullShown As Boolean) FullPanel.Visible = FullShown End If Else InlineAds.Close BannerPanel.Height = Max(180dip,100%y-144dip) Wait For (InlineAds.ShowBanner(UnitId,BannerPanel)) Complete (InlineShown As Boolean) If InlineShown = False Then BannerPanel.Height = 0 If LastFailure = "" Then Status.Text = "نمایش کامل نشد؛ خروجی Logs را بررسی کنید" End If End If RequestBusy = False ShowButton.Enabled = True End Sub Sub InlineAds_Event(Detail As Map) If Detail.GetDefault("type","") = "loaded" And BannerPanel.IsInitialized Then BannerPanel.Height = Min(Max(180dip,Detail.GetDefault("heightPx",BannerPanel.Height)),Max(180dip,100%y-144dip)) End If HandleEvent(Detail) End Sub Sub FullAds_Event(Detail As Map) HandleEvent(Detail) If Detail.GetDefault("type","") = "closed" Then FullPanel.Visible = False End Sub Private Sub HandleEvent(Detail As Map) Dim Kind As String = Detail.GetDefault("type","") Dim Code As String = Detail.GetDefault("code","") Log("Didnex sdk=" & Detail.GetDefault("sdkVersion","unknown") & " type=" & Kind & " code=" & Code & " stage=" & Detail.GetDefault("stage","") & " operation=" & Detail.GetDefault("operation","") & " exception=" & Detail.GetDefault("exception","") & " frame=" & Detail.GetDefault("frame","") & " line=" & Detail.GetDefault("line",0) & " http=" & Detail.GetDefault("httpStatus",0)) Select Kind Case "reward" Status.Text = "جایزه در کیف نصب دیدنکس ثبت شد" ' Receipt is already applied. Do not credit locally again. Case "noFill" LastFailure = Code Status.Text = "فعلاً تبلیغی در دسترس نیست: " & Code Case "error" LastFailure = Code Status.Text = "خطای اتصال یا نمایش: " & Code & "؛ جزئیات در Logs" Case "loaded" Status.Text = "تبلیغ آماده شد" End Select End Sub Sub Activity_Resume InlineAds.SetActive(True) FullAds.SetActive(True) End Sub Sub Activity_Pause(UserClosed As Boolean) InlineAds.SetActive(False) FullAds.SetActive(False) If UserClosed Then InlineAds.Close FullAds.Close End If End Sub ``` ## اعتبارسنجی اختیاری اپ برای Flutter فقط در صورت استفاده از Play Integrity، در android/gradle.properties مقدار `didnex.enablePlayIntegrity=true` و در client گزینه enableIntegrity را فعال کنید. اتصال پایه بدون این وابستگی کار می‌کند. برای Android بومی، DidnexIntegrity.kt و وابستگی Google Play را اضافه کنید؛ provider باید با سیاست پنل هماهنگ باشد. این قابلیت برای توزیع خارج Google Play الزام عمومی نیست. ## خطا، چرخه عمر و جایزه نداشتن تبلیغ، قطع اینترنت یا خطای سرور باید فقط فضای تبلیغ را جمع کند؛ شروع اپ را به تبلیغ وابسته نکنید. بی‌وقفه retry نکنید؛ درخواست بعدی را به فرصت طبیعی بعدی اپ موکول کنید. برای تمام‌صفحه یک نمونه تازه، صفحه قابل نمایش و اقدام مناسب کاربر لازم است؛ از resume برای نمایش خودکار استفاده نکنید. تست اتصال را با diagnosticToken از پنل انجام دهید. رسانهٔ تست متناسب با فرمت بارگذاری می‌شود؛ هزینه، درآمد یا جایزه ندارد. بارگذاری گزارش‌شده تأیید کامپایل یا پخش روی همهٔ دستگاه‌ها نیست. برای آزمون رسانه و درآمد، کمپین و رسانه تأییدشده و بودجه واقعی لازم است. هیچ جایزه‌ای با صرف loaded، click یا نمایش ناقص ایجاد نکنید. فقط رسید `verified=true` و `applied=true` از سمت سرور معتبر است؛ SDK جایزه را پیش‌تر در کیف نصب ثبت کرده، دوباره اعتبار ندهید. برای مصرف، externalId را پیش از ارسال ذخیره کنید و در retry عوض نکنید. ## کیف، پوش و سرور اختیاری - کیف نصب و محدودیت بازیابی: https://didnex.com/docs/publisher/wallet - پوش اختصاصی همین پلتفرم، Manifest، FCM/APNs و نمونه پس‌زمینه: https://didnex.com/docs/publisher/push-b4a - روش سروری برای اتصال جایزه به حساب موجود اپ: https://didnex.com/docs/publisher/server همه ۱۳ فرمت در اتصال مستقیم و پراکسی اختیاری موجودند. پراکسی فقط روی سرور خودتان کلید خصوصی md_ را نگه می‌دارد. هیچ JWT یا کلید را در فایل نمونه یا پنل کپی کد ثابت نکنید. برای APIهای کیف، رضایت و پوش، شکست واقعی را کنترل کنید؛ موجودی یا موفقیت جعلی نشان ندهید. ## تشخیص خطا | وضعیت | بررسی | |---|---| | noFill | رسانه و جایگاه فعال، کمپین سازگار، بودجه، زمان و فیلتر دستگاه/لوکیشن | | package mismatch | شناسه واقعی خروجی اپ و رسانه ثبت‌شده؛ debug flavor ممکن است پسوند داشته باشد | | 403 در وب | Origin دقیق سایت تأییدشده و HTTPS | | شبکه/مهلت | دسترسی دامنه دیدنکس از دستگاه، INTERNET نسخه Release و تنظیم TLS | | تصویر تست فقط | diagnosticToken را پس از پایان تست بردارید؛ کارت تست کمپین زنده نیست | | جایزه ثبت نشد | رضایت، تماشای کامل، ترتیب رویدادها و رسید سرور؛ موجودی را محلی تغییر ندهید | | پوش دیده نشد | ابتدا Inbox را بررسی کنید؛ سپس رضایت، توکن تازه، تنظیم provider و مجوز سیستم‌عامل | ## وضعیت آزمون آزمون‌های قرارداد سرور، وب و بسته‌بندی در مخزن اجرا می‌شوند. وضعیت کامپایل منطبق با هش منبع در SDK Lab و releases.json ثبت می‌شود؛ اجرای دستگاه فقط با رسید مستقل device_playback قابل تأیید است. قبل از انتشار اپ: ساخت Release، اینترنت قطع، DNS نامعتبر، پاسخ ۵۰۰/JSON خراب، رسانه خراب، خروج صفحه حین درخواست، pause/resume و تکرار claim را بررسی کنید. فایل‌های tool/verify یا scripts/sdk-build.mjs مسیر تکرار آزمون را مشخص می‌کنند. هیچ انتشار pub.dev/Maven عمومی در این بسته ادعا نمی‌شود. ## عیب‌یابی تبلیغ زنده در نسخه فنی 0.17.1 نشانگر `sdk=b4a-0.17.1` در Logs اجرای کلاس و Handler جدید را مشخص می‌کند. `error` شکست فنی است و با `noFill` تفاوت دارد. `audience_lock` و `audience_cache` به ثبت نصب، `http_json` به پاسخ JSON، `ad_request` به دریافت تبلیغ و `video_open` به بازکردن ویدیو مربوط‌اند. `operation` مسیر درخواست و `httpStatus` وضعیت HTTP را نشان می‌دهند. کد `invalid_installation` همراه HTTP 401 نیازمند بررسی هویت نصب است و به معنی نبود کمپین نیست. متن خام استثنا، توکن و بدنه پاسخ در جزئیات Event کپی نمی‌شوند؛ نام استثنا و متد/خط Java برای تشخیص آمده‌اند. پاک‌کردن داده یا حذف اپ می‌تواند دسترسی به کیف همان نصب را از بین ببرد. برای دریافت گزارش جدید به ارتقای سرور نیاز نیست. Java داخل کلاس با Android 36 و هدف Java 8 کامپایل و منطق پخش/هندسه آزمایش شده است؛ این بررسی جای کامپایل BASIC/APK و اجرای روی گوشی را نمی‌گیرد. آن دو در این محیط انجام نشده‌اند. ## تبلیغات و پوش در یک بسته کنترلر پوش از همان کلاینت تبلیغات ساخته می‌شود؛ دانلود یا نصب بسته دوم لازم نیست. راهنمای `PUSH.md` داخل همین بسته شامل نمونه اتصال مشترک، رضایت، دریافت، گزارش و چرخه عمر است. روش‌های قدیمی Initialize همچنان سازگارند؛ فایل‌های SDK را از دو ZIP هم‌زمان به پروژه کپی نکنید. ## شناسه جایگاه چیست و از کجا بگیرم؟ پوش در دیدنکس از **شناسه عمومی یکی از جایگاه‌های فعال همان رسانه** برای پیدا کردن اپ یا سایت شما استفاده می‌کند. پیشوند واقعی این شناسه `UNT_` است. این مقدار نام اپ، شناسه بسته، شناسه رسانه با پیشوند `AST_`، توکن FCM یا کلید API نیست و محرمانه نیست. در پنل ناشر، «جایگاه‌های تبلیغ» را باز کنید؛ شناسه زیر نام جایگاه دیده می‌شود. همان شناسه کامل را کپی کنید. راه ساده‌تر: در «پوش ← اتصال رسانه‌ها»، برای رسانه خود «کد پوش» را بزنید و پلتفرم را انتخاب کنید؛ کد با شناسه واقعی شما ساخته می‌شود و نیازی به حدس یا جایگزینی دستی ندارد. در مثال عمومی زیر، `placementId` یا `PlacementId` یا `PLACEMENT_ID` متغیری برای نگهداری همین شناسه است. متن `PASTE_YOUR_PLACEMENT_ID_HERE` فقط محل جایگزینی است و شناسه قابل استفاده نیست. آن را با شناسه کامل جایگاه خودتان که با `UNT_` شروع می‌شود عوض کنید. یک جایگاه فعال کافی است؛ جایگاه مخصوص پوش و نمایش تبلیغ برای عضوکردن مخاطب لازم نیست. رسانه نیز باید فعال و تأییدشده باشد و پوش آن در پنل فعال شده باشد. | مقدار | محل دریافت / کاربرد | | --- | --- | | شناسه جایگاه (`UNT_…`) | پنل ناشر ← جایگاه‌های تبلیغ؛ ورودی ایجاد کنترلر پوش | | شناسه بسته | تنظیمات پروژه اپ؛ باید با رسانه اپ ثبت‌شده یکسان باشد | | دامنه دیدنکس | نشانی همین سرویس؛ سرور اختصاصی ناشر لازم نیست | | کلید خصوصی API | داخل اپ یا مرورگر قرار نمی‌گیرد | اگر `inactive_inventory` دیدید، فعال و تأییدبودن رسانه و فعال‌بودن جایگاه همان رسانه را بررسی کنید. کپی‌کردن شناسه از یک حساب یا رسانه دیگر اتصال را درست نمی‌کند. ## اتصال ساده با شناسه روشن — ۸.۱۷ یک کلاینت را در طول عمر اپ نگه دارید و همان را برای تبلیغ و پوش به کار ببرید. این فراخوانی فقط تنظیم محلی است؛ موفقیت اتصال شبکه با دریافت تبلیغ یا عضویت موفق مشخص می‌شود. init خودکار اجازه اعلان نمی‌گیرد و هیچ پیام واقعی ارسال نمی‌کند. برای تغییر دامنه، origin همان یک تنظیم را تغییر دهید. شناسه عمومی جایگاه (`UNT_…`) باید متعلق به رسانه فعال و تأییدشده خودتان باشد؛ کلید خصوصی وارد اپ نکنید. ``` Sub Globals Private Const PlacementId As String = "PASTE_YOUR_PLACEMENT_ID_HERE" Private Client As Didnex Private Push As DidnexPush End Sub Sub Activity_Create(FirstTime As Boolean) Client.Initialize(Me,"Ads") Push = Client.CreatePush(PlacementId,Me,"Push") ' Client.Ads.ShowBanner(PlacementId, Panel) for inline formats. ' Client.Ads.ShowInterstitial / ShowRewarded for fullscreen formats. End Sub Sub Ads_Event(Detail As Map) Log(Detail.GetDefault("type","")) End Sub ``` این قطعه، الگوی راه‌اندازی است؛ مثال کامل همه فرمت‌ها، مدیریت خطا و چرخه عمر در ادامه همین راهنما و پوشه Examples بسته قرار دارد. در Flutter کد بالا داخل `Future main() async` قرار می‌گیرد؛ `MyApp` ویجت واقعی اپ شماست. در B4A فایل جدید `Didnex.bas` هم به‌عنوان Class اضافه شود. برای دامنه اختصاصی B4A، initializer اصلی `DidnexAds.Initialize(Me,"Ads",origin,Application.PackageName)` همچنان معتبر است. روش اختیاری پراکسی همان قرارداد نمایش را دارد و برای اتصال مستقیم هیچ سرور ناشری لازم نیست. ### قرارداد اندازه `slot.version=1` و `slot.profile` از جایگاه می‌آیند. نسبت یا ارتفاع فایلِ دانلودشده اندازه بیرونی را تغییر نمی‌دهد. تصویر و ویدیو با contain داخل کادر قرار می‌گیرند؛ برای `noFill` و خطا کادر جمع می‌شود. پس از یک‌بار به‌روزرسانی SDK، تعویض فایل هم‌اندازه یا شروع پخش ویدیو باعث تغییر چیدمان نمی‌شود. برای پروفایل غیراستانداردِ پیش‌فرض، متادیتای جایگاه و اندازه میزبان را مطابق همان پروفایل تنظیم کنید؛ در Unity/Godot مستطیل میزبان تحت کنترل اپ است. | پروفایل | نسبت رسانه / اندازه مرجع | نوار ثابت زیر رسانه | |---|---|---| | بنر کوچک / بزرگ | ۳۲۰×۵۰ / ۳۲۰×۱۰۰ | ندارد | | بنر مستطیل / عریض | ۳۰۰×۲۵۰ / ۷۲۸×۹۰ | ندارد | | تطبیقی | نسبت ۳۲۰×۵۰ با عرض میزبان | ندارد | | همسان تصویری | ۱۶:۹ یا مربع | ۸۴ پیکسل منطقی | | همسان ویدیویی / کاروسل | ۱۶:۹ | ۸۴ پیکسل منطقی | | ویدیوی درون محتوا | ۱۶:۹ | ندارد | | صوتی | کادر ۹۶ پیکسل منطقی | ندارد | | نظرسنجی | کادر مرجع ۳۲۰×۳۰۰ | ۸۴ پیکسل منطقی | | بینابینی، جایزه، آغاز اپ و بازی | میزبان تمام‌صفحه با حاشیه امن | قالب ثابت میزبان | این‌ها پروفایل محصول دیدنکس‌اند؛ ادعای گواهی IAB یا ابعاد پیکسلی واحد جهانی برای تمام فرمت‌ها ندارند. فایل می‌تواند چند برابر اندازه مرجع باشد. تصویر کوچکِ خارج از حداقل یا نسبت نامطابق پیش از ثبت کمپین رد می‌شود؛ حداقل و نسبت دقیق در فرم کمپین و `GET /api/display-profiles` قابل دریافت‌اند. برای ویدیوی افقی حداقل ۳۲۰×۱۸۰ و پیشنهاد ۶۴۰×۳۶۰ است. فایل‌های کمپین قدیمی بدون پروفایل با حفظ نسبت داخل کادر ثابت قرار می‌گیرند. برای اعمال renderer جدید در SDK نصب‌شده، اپ باید یک بار به‌روزرسانی شود؛ تغییر سرور به‌تنهایی کد قدیمی را عوض نمی‌کند. ### حدود آزمون این نسخه آزمون قرارداد سرور، رسیدها، noFill، فایل خراب، قطع ارتباط و یکپارچگی بسته‌ها در مخزن وجود دارد. ساخت بومی با هش همین سورس فقط وقتی در `releases.json` مقدار `nativeBuild=passed` دارد تأیید شده است. نبود چنین رسیدی یعنی کامپایل بومی/پخش روی دستگاه تأیید نشده؛ موفقیت تست جاوااسکریپت جای آن را نمی‌گیرد. AARهای قدیمی داخل پوشه سازگاری را معادل ساخت جدید تلقی نکنید؛ برای Android و Godot از پروژه سورس و gradlew استفاده کنید.