From 3a1f5d418f9f71e7b3c38dc9279c1b1eee524ea1 Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Fri, 4 Jan 2019 18:39:29 +0300 Subject: [PATCH] Ads development --- FoxTube/Assets/Data/Patchnotes.xml | 30 ++---------- FoxTube/Classes/Methods.cs | 16 ++++++- FoxTube/Classes/SecretsVault.cs | 3 ++ FoxTube/Controls/Adverts/CardAdvert.xaml | 44 +++++++++++++++++ FoxTube/Controls/Adverts/CardAdvert.xaml.cs | 53 +++++++++++++++++++++ FoxTube/Controls/ChannelCard.xaml | 2 +- FoxTube/Controls/PlaylistCard.xaml | 4 +- FoxTube/Controls/VideoCard.xaml | 4 +- FoxTube/FoxTube.csproj | 7 +++ FoxTube/Pages/VideoGrid.xaml.cs | 25 ++-------- 10 files changed, 137 insertions(+), 51 deletions(-) create mode 100644 FoxTube/Controls/Adverts/CardAdvert.xaml create mode 100644 FoxTube/Controls/Adverts/CardAdvert.xaml.cs diff --git a/FoxTube/Assets/Data/Patchnotes.xml b/FoxTube/Assets/Data/Patchnotes.xml index 61b1368..c9513eb 100644 --- a/FoxTube/Assets/Data/Patchnotes.xml +++ b/FoxTube/Assets/Data/Patchnotes.xml @@ -1,21 +1,11 @@  - + ### What's new: -- Loading thumbnail for cards in max resolution -- Missynchronization fixed. Supporting all existing qualities -- Livestreams support (including chat and live stats update) -- Player fixes -- New logo is added -- Wrong elapsed and remaining displaying (if time span is greater than 1 hr) time fixed -- Russian localization updated -- Context menu for items cards -- Small bug fixes -- Settings storage system updated -- Changelogs now will be here -- Changelogs are multilingual now +- Adverts are added (in items grid, in comments and chat) +- Long channel names on crads fixed ### Known issues: @@ -27,18 +17,8 @@ ### Что нового: -- По умолчанию для карточек загружается максимальное разрешение картинки -- Пофикшен рассинхрон и теперь поддерживаются все возможные разрешения -- Добавлена поддержка прямого эфира (включая чат и обновление зрителей в реальном времени) -- Пофикшен плеер -- Добавлен новый логотип -- Исправлен баг неправильного отображения оставшегося времени если осталось больше часа -- Обновлена локализация -- Контекстное меню карточек -- Мелкие багфиксы -- Обновлена система хранения настроек -- Теперь чейнджлоги будут здесь, а не в файле -- Чейнджлог теперь ведется на двух языках +- Добавлена реклама (в сетку карточек, в комментарии и в чат) +- Исправлен баг с длинными именами каналов на карточках ### Что по-прежнему не работает: diff --git a/FoxTube/Classes/Methods.cs b/FoxTube/Classes/Methods.cs index 8327e1b..7ea2a79 100644 --- a/FoxTube/Classes/Methods.cs +++ b/FoxTube/Classes/Methods.cs @@ -1,5 +1,7 @@ -using FoxTube.Pages; +using FoxTube.Controls.Adverts; +using FoxTube.Pages; using Google.Apis.YouTube.v3; +using Microsoft.Advertising.WinRT.UI; using System; using System.Collections.Generic; using System.Diagnostics; @@ -34,6 +36,18 @@ namespace FoxTube get { return (Window.Current.Content as Frame).Content as MainPage; } } + public static CardAdvert CardAdvert { get; private set; } + + public static void InitializeAds() + { + NativeAdsManagerV2 manager = new NativeAdsManagerV2(SecretsVault.AppId, SecretsVault.AdUnitId); + manager.AdReady += (s, e) => + { + card = new CardAdvert(e.NativeAd); + e.NativeAd.RegisterAdContainer(card); + }; + } + public static void CloseApp() { CoreApplication.Exit(); diff --git a/FoxTube/Classes/SecretsVault.cs b/FoxTube/Classes/SecretsVault.cs index 707599e..01f7a0f 100644 --- a/FoxTube/Classes/SecretsVault.cs +++ b/FoxTube/Classes/SecretsVault.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using FoxTube.Controls.Adverts; using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using Google.Apis.YouTube.v3; @@ -36,6 +37,8 @@ namespace FoxTube ApplicationName = "FoxTube" }; public static YouTubeService Service => IsAuthorized ? new YouTubeService(Initializer) : NoAuthService; + public static string AppId => "d25517cb-12d4-4699-8bdc-52040c712cab"; + public static string AdUnitId => "test"; public static bool AdsDisabled { get; private set; } = true; //User info diff --git a/FoxTube/Controls/Adverts/CardAdvert.xaml b/FoxTube/Controls/Adverts/CardAdvert.xaml new file mode 100644 index 0000000..8582208 --- /dev/null +++ b/FoxTube/Controls/Adverts/CardAdvert.xaml @@ -0,0 +1,44 @@ + + + + diff --git a/FoxTube/Controls/Adverts/CardAdvert.xaml.cs b/FoxTube/Controls/Adverts/CardAdvert.xaml.cs new file mode 100644 index 0000000..d03c1d0 --- /dev/null +++ b/FoxTube/Controls/Adverts/CardAdvert.xaml.cs @@ -0,0 +1,53 @@ +using System.Linq; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Microsoft.Advertising.WinRT.UI; +using Windows.UI.Xaml.Media.Imaging; +using System.Diagnostics; + +namespace FoxTube.Controls.Adverts +{ + /// + /// Advert which is looks similar to video cards + /// + public sealed partial class CardAdvert : UserControl + { + NativeAdV2 advert; + public CardAdvert(NativeAdV2 ad) + { + InitializeComponent(); + advert = ad; + Initialize(); + } + + public void Initialize() + { + title.Text = advert.Title; + image.Source = new BitmapImage(advert.MainImages.First().Url.ToUri()); + if (advert.AdIcon == null) + contentGrid.ColumnDefinitions[0].Width = new GridLength(0); + else + icon.ProfilePicture = advert.AdIcon.Source; + + if (string.IsNullOrWhiteSpace(advert.SponsoredBy)) + sponsor.Visibility = Visibility.Collapsed; + else + sponsor.Text = advert.SponsoredBy; + + if (!string.IsNullOrWhiteSpace(advert.Rating)) + info.Text += $" {advert.Rating}"; + + if (string.IsNullOrWhiteSpace(advert.CallToActionText) && string.IsNullOrWhiteSpace(advert.Price)) + desc.Visibility = Visibility.Collapsed; + else if (!string.IsNullOrWhiteSpace(advert.CallToActionText)) + desc.Text = advert.CallToActionText; + else + desc.Text = advert.Price; + } + + private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e) + { + Height = e.NewSize.Width * 0.75; + } + } +} diff --git a/FoxTube/Controls/ChannelCard.xaml b/FoxTube/Controls/ChannelCard.xaml index 5b55ca9..79ccc3d 100644 --- a/FoxTube/Controls/ChannelCard.xaml +++ b/FoxTube/Controls/ChannelCard.xaml @@ -36,7 +36,7 @@ - + diff --git a/FoxTube/Controls/PlaylistCard.xaml b/FoxTube/Controls/PlaylistCard.xaml index a0b904c..ac6d930 100644 --- a/FoxTube/Controls/PlaylistCard.xaml +++ b/FoxTube/Controls/PlaylistCard.xaml @@ -41,10 +41,10 @@ - + - + diff --git a/FoxTube/Controls/VideoCard.xaml b/FoxTube/Controls/VideoCard.xaml index 4874c3d..804e5cb 100644 --- a/FoxTube/Controls/VideoCard.xaml +++ b/FoxTube/Controls/VideoCard.xaml @@ -44,10 +44,10 @@ - + - + diff --git a/FoxTube/FoxTube.csproj b/FoxTube/FoxTube.csproj index b7a4d4d..4e452f8 100644 --- a/FoxTube/FoxTube.csproj +++ b/FoxTube/FoxTube.csproj @@ -112,6 +112,9 @@ Advert.xaml + + CardAdvert.xaml + ChannelCard.xaml @@ -283,6 +286,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/FoxTube/Pages/VideoGrid.xaml.cs b/FoxTube/Pages/VideoGrid.xaml.cs index 8a3dda6..f56f555 100644 --- a/FoxTube/Pages/VideoGrid.xaml.cs +++ b/FoxTube/Pages/VideoGrid.xaml.cs @@ -1,39 +1,24 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; -using Windows.Foundation; -using Windows.Foundation.Collections; +using FoxTube.Controls.Adverts; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Controls.Primitives; -using Windows.UI.Xaml.Data; -using Windows.UI.Xaml.Input; -using Windows.UI.Xaml.Media; -using Windows.UI.Xaml.Navigation; -using System.Diagnostics; -using System.Timers; -using Windows.UI.Core; -using Microsoft.Toolkit.Uwp.UI.Controls; - -// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 namespace FoxTube.Pages { /// - /// An empty page that can be used on its own or navigated to within a Frame. + /// Items cards container /// public sealed partial class VideoGrid : Page { public VideoGrid() { - this.InitializeComponent(); + InitializeComponent(); } public void Add(UIElement card) { list.Items.Add(card); + if (list.Items.Count % 5 == 0) + list.Items.Add(new CardAdvert()); empty.Visibility = Visibility.Collapsed; }