Posted on 13. June 2017

Собственная реклама в Microsoft Advertising SDK

Обзор

Собственная реклама - это компонентно-ориентированное объявление, которое позволяет издателям гибко размещать отдельные компоненты текста: название, изображение, логотип, описание, призыв к действию - чтобы обеспечить наилучшее дополнение к внешнему виду остальной части приложения. Это позволяет разработчикам самостоятельно использовать шрифты, цвета и анимации для создания ненавязчивого пользовательского интерфейса в своем приложении, в то же время получая высокую доходность от рекламы. Для рекламодателей это также обеспечивает высокоэффективные места размещения, поскольку реклама встроена в приложение, и пользователи склонны больше взаимодействовать с этим спонсируемым контентом. Согласно отчету Mobile Marketing, собственная реклама в приложении обычно получает в пять раз больше пользовательского охвата, чем традиционные баннерные объявления, и, следовательно, получает больше средств от рекламодателей (в соответствии с eMarketer и другими отчетами).

Начиная с этого момента разработчики могут создавать собственные места для рекламы в своих приложениях или играх, используя последнюю версию Microsoft Advertising SDK (10.0.4 или новее). Платформа Microsoft Monetization предоставляет разработчикам максимальную свободу для создания собственных презентаций и доступна ограниченному набору издателей в закрытом экспериментальном проекте. Для доступа к проекту напишите по адерсу aiacare@microsoft.com.

 

С чего начать? 

Как и прежде, начните с загрузки Microsoft Advertising SDK. Это предоставит вам библиотеки для включения собственных объявлений в ваше приложение или игру.

Создайте "Собственный" рекламный блок для своего приложения в разделе «Монетизация с рекламой» в DevCenter (dev.windows.com). Этот рекламный блок вы будете использовать в своем приложении, когда вы запрашиваете объявление в коде.

 

Как добавить  встроенные объявления в свое приложение?

В этом разделе предполагается, что вы знакомы с Microsoft Advertising SDK для вашего  UWP приложения или игры. Если вы еще не работали с этим, ознакомтесь с инстукцией для начала работы

Чтобы показать собственные объявления в вашем приложении, следуйте инструкциям по типу проекта:

 

XAML/.NET

HTML/JavaScript

 

XAML/.NET

В этом разделе приведены примеры C# для вашего проекта XAML/.NET. Вам следует пройти эти простые шаги, чтобы получить собственные объявления в вашем коде.

Шаг 1: Ссылки на установку

Откройте проект в Visual Studio. В диспетчере ссылок (Reference Manager) разверните раздел Universal Windows, нажмите «Расширения», а затем установите флажок рядом с Microsoft Advertising SDK для XAML.

 

using Microsoft.Advertising.WinRT.UI;

 

 

Шаг 2. Настройка управления для собственных объявлений

В соответствующем месте в вашем приложении (например, в MainPage или на другой странице) укажите объект NativeAdsManager и строковые поля, которые представляют идентификатор приложения и идентификатор рекламного блока для вашего собственного объявления. В следующем примере кода присваиваются поля myAppId и myAdUnitId с тестовыми значениями для собственных объявлений, предоставляемых в значениях тестового режима. Эти значения используются только для тестирования; Вы должны заменить их существующеми значениями из Windows DevCenter, прежде чем публиковать свое приложение.

 

NativeAdsManager nativeAdsManager = null;
string appId = "d25517cb-12d4-4699-8bdc-52040c712cab";
string adUnitId = "test";

 

В коде, который запускается при запуске, создайте экземпляр NativeAdsManager.

 

// Ad Events
 
nativeAdsManager = new NativeAdsManager(appId, adUnitId);

 

 

Шаг 3: Запрос объявления

Если вы хотите показывать объявление, необходимо отправить запрос с помощью NativeAdsManager и подключить события.

 

nativeAdsManager.RequestAd();
nativeAdsManager.AdReady += NativeAd_OnAdReady;
nativeAdsManager.ErrorOccurred += NativeAd_ErrorOccurred;

 

Шаг 4: Использование компонентов объявления для создания опыта

Предположим, у вас есть страница XAML, в которой есть разные шаблоны для заголовка, описания, спонсирования, призыва к действию объявления и хранилища, который содержит все эти элементы. Пример StackPanel, содержащий все элементы.

<StackPanel x:Name="NativeAdContainer" BorderThickness="2" BorderBrush="Azure">
   <StackPanel x:Name="IconImageContainer" BorderThickness="2" BorderBrush="Azure" Visibility="Collapsed" >
       <Image x:Name="IconImage" />
   </StackPanel> 
   <TextBox x:Name="TitleBox" Text="The title will go here" Margin="78,0,-78,0"/></TextBox>
   <TextBox x:Name="DescriptionBox" Text="The Description will go here" Visibility="Collapsed"></TextBox>
   <TextBox x:Name="SponsoredBy" Text="The SponsoredBy will go here" Visibility="Collapsed"></TextBox>
   <StackPanel x:Name="MainImageContainer" BorderThickness="2" BorderBrush="Azure" Visibility="Collapsed">
        <Image x:Name="MainImage" Margin="0,8,0,4" />
   </StackPanel>
   <Button x:Name="CallToAction" Margin="0,8,0,4" Visibility="Collapsed" />
</StackPanel>
Основываясь на компонентах объявления, которые вы хотите добавить в ваше приложение, ваш код может отличаться. Вот пример прослушивателя событий OnAdReady, в котором используются Название, Описание, Призыв к Действию и Изображение.
void NativeAd_OnAdReady(object sender, object e)
        {
           NativeAd nativeAd = (NativeAd)e;
           TitleBox.Text = nativeAd.Title;
         
        //if description is not null show description textbox
           var description = nativeAd.Description;
           if (!string.IsNullOrEmpty(description))
           {
               DescriptionBox.Text = nativeAd.Description;
               DescriptionBox.Visibility = Visibility.Visible;
           }
 
           //if sponsoredBy is not null show sponsoredBy textbox
           var sponsoredBy = nativeAd.SponsoredBy;
           if (!string.IsNullOrEmpty(sponsoredBy))
           {
               SponsoredBy.Text = sponsoredBy;
               SponsoredBy.Visibility = Visibility.Visible;
           }
 
           //if CallToAction is not null update Button
           var callToAction = nativeAd.CallToAction;
           if (!string.IsNullOrEmpty(callToAction))
           {
               CallToAction.Content = callToAction;
               CallToAction.Visibility = Visibility.Visible;
           }
 
           // Assets consists further information about Ad
           var assets = nativeAd.AdditionalAssets;
 
           // Loading images
           var icon = nativeAd.IconImage;
           if (icon != null)
           {
               var bitmapImage = new BitmapImage();
               bitmapImage.UriSource = new Uri(nativeAd.IconImage.Url);
               IconImage.Source = bitmapImage;
               // Best view when using the Height and Width of the image given
               IconImage.Height = nativeAd.IconImage.Height;
               IconImage.Width = nativeAd.IconImage.Width;
 
               IconImageContainer.Visibility = Visibility.Visible;
            }
 
            // There might be multiple main images sent by the server
            var mainImages = nativeAd.MainImages;
            if (mainImages.Count > 0)
            {
                var mainImage = mainImages[0];
                var bitmapImage = new BitmapImage();
                bitmapImage.UriSource = new Uri(mainImage.Url);
                MainImage.Source = bitmapImage;
                // Best view when using the Height and Width of the image given
                MainImage.Height = mainImage.Height;
                MainImage.Width = mainImage.Width;
 
                MainImageContainer.Visibility = Visibility.Visible;
            }
 
            // It is required to show the AdIcon in your container
            NativeAdContainer.Children.Add(nativeAd.AdIcon);
 
            // Register any xaml framework element for clicks/impressions
            nativeAd.RegisterAdContainer(NativeAdContainer);

P.S: Разработчик должен «Регистрировать» контейнер для объявлений XAML (любой элемент структуры) с объектом Native Ads. Это необходимо для обработки показов и отслеживания кликов и имеет решающее значение для рекламы. Несоблюдение этого требования может привести к блокировке рекламных блоков и рекламных выплат Microsoft.

HTML/JavaScript

Подробная информация о функции HTML появится в ближайшее время! Пожалуйста, свяжитесь с нами (aiacare@microsoft.com), если ваши приложения находятся в формате HTML/JS, и вам необходима эта функция.

Методические рекомендации

Несмотря на то, что разработчик имеет полный контроль над тем, как создавать рекламные ролики и какие компоненты объявления отображаются пользователю, объявление рекламодателя должно получить сообщение от пользователя. Существует прекрасный баланс, который необходимо достичь, чтобы получить максимальную ценность от собственного объявления.

Вот некоторые рекомендации по обеспечению баланса.

Требуется показать

Существует два актива рекламодателя, которые всегда должны отображаться пользователю в дизайне собственного объявления. Отказ добавления любого из них может привести к низкой производительности вашего рекламного блока и возможно низкой (или отсутствующей) доходности. Этими активами являются:

  • Название объявления
  • Изначальная иконка объявления (эта иконка объявления отправляется как часть объекта NativeAd - свойство с именем AdIcon) или «Спонсировано» или же такие тексты, как «Спонсируемый», «Повышенный», «Рекомендованный»

Несоблюдение этих рекомендаций может привести к удалению adUnits из рекламной системы.


Рекламный опыт

Ваше собственное объявление должно быть четко очерчено от остальной части вашего контента и иметь пространство вокруг него, чтобы предотвратить случайные клики. Используйте границу, фоновое изображение или другую обработку для отделения содержимого объявления. Всегда помните, что случайные клики пользователя на ваше объявление не выгодны в долгосрочной перспективе дохода от ваших объявлений и для удовлетворения конечных пользователей.

Вы всегда должны показывать различимый значок «Объявления» для просмотра данного объявления. По возможности покажите поле «Спонсированные», чтобы четко указать, что контент является объявлением и предоставлен рекламодателем.


Требования к отображению текста

Собственные объявления всегда должны отображать название. Предоставьте достаточное пространство для отображения не менее 25 символов названия. Если название длиннее нормы, замените дополнительный текст на многоточие. 

Убедитесь, что Call-to-Action (призыв к действию) отделен от остальной рекламной информации рекламодателя.

Если вы выберете оставшуюся часть рекламного текста (описание) из ответа объявления, укажите место для отображения не менее 75 символов. Лучше всего использовать анимацию, чтобы показать полный контент описания объявления.


Призыв к действию (Call-to-Action)

В собственных объявлениях всегда должен отображаться призыв к действию, который показывает пользователю, что объявление кликабельное по кнопке или гиперссылке.

Строка CTA (Call-to-Action) всегда должна отображаться польностью, так как она является решающим компонентом объявления рекламодателя.


Изучайте и оптимизируйте

Рекомендуется, создавать и использовать разные рекламные блоки для каждого отдельного размещения собственных объявлений в приложении. Это позволяет создавать отчеты и обучение для каждого места размещения, которое затем можно использовать для оптимизации каждого места отдельно, до достижения оптимальной производительности.

В случае каких-либо дополнительных вопросов, пожалуйста, обратитесь к aiacare@microsoft.com, и мы будем рады вам помочь.

Официальный анонс возможностей рекламы.


Exception: Object reference not set to an instance of an object.
Posted on 1. June 2017

Windows Template Studio

Windows Template Studio - это расширение Visual Studio 2017, которое ускоряет создание новых приложений для универсальной платформы Windows (UWP), используя опыт на основе мастера. Итоговый проект UWP представляет собой хорошо сформированный читабельный код, который включает в себя новейшие функции Windows 10, а также проверенные образцы и лучшую практику. Разбросанные по всему сгенерированному коду ссылки включают в себя Docs, Stack Overflow и блоги с полезной информацией.

Пример сценария: мне нужно приложение, которое использует MVVM, использует основные детали, может приостанавливаться и возобновляться, имеет настройки, карты на одной из страниц и получает Azure hub уведомления. Для этого потребуется фоновая служба, которая выполняет запрос каждые 5 минут ...

Выберите тип и структуру проекта:

Выберите страницы и функции вашего приложения:

 

 

Вы готовы! Создайте свой шаблон проекта и запустите его.

Для получения дополнительной информации ознакомьтесь с repo README!



Exception: Object reference not set to an instance of an object.
Posted on 28. May 2017

Что нового в Windows Ink в Windows 10 Creators Update

 

Windows Ink - это изменение стереотипов о возможностях компьютеров; от инструмента, который отлично подходит для рисования объектов, до того, который учитывает вашу личность и ваши эмоции при создание этих объектов. Речь идет о возвращении человеческих возможностей, которые раньше были не досягаемы с помощью просто мыши и клавиатуры (а также касания), речь идет о том, чтобы персонализировать компьютеры под личность каждого пользователя и расширить их возможности. Это больше чем просто инструмент. Microsoft хочет, чтобы пользователи чувствовали себя уполномоченными создавать с того момента, как они взяли ручку и убедились, что Windows понимает каждого пользователя, знает его желания, понимая их по почерку, слову и настроению. Итак, давайте ознакомимся с новыми возможностями Windows Ink.

Теперь, с Creators Update, Windows Ink стал еще лучше, чем когда-либо! При использовании с Surface Dial, он позволяет вам находить новые способы работы и взаимодействия с Windows. С помощью Windows Ink Microsoft хочет расширить возможности пользователей и сделать его больше, чем просто ручкой с бумагой. Такие приложения, как "Photos" и "Maps" расширили функциональные возможности рукописного ввода в прошлом году и продолжают развивать и добавлять новые сегодня. С помощью Paint 3D, в Creators Update, Windows Ink теперь может создавать 3D-объекты! Microsoft развивает функционал для Windows Ink, а также добавляет новые возможности Smart Ink для Windows Ink. Эти возможности позволяют разработчикам понять предпочтения пользователей, которые используют чернила, используя AI, чтобы помочь создавать, подключать и выполнять действия пользователя с чернилами. Microsoft также улучшили и добавили новые функции в структурные элементы Windows Ink, представляя новые трафареты и добавляя поддержку наклона, чтобы создать более богатый опыт рисования. 

Устройства, поддерживающие Pen для Windows, также расширили свои возможности в несколько раз и планируют новые обновления в следующем году! Microsoft видит высокий спрос не только на устройства, но и на приложения, поддерживающие чернила. Чтобы облегчить пользователям поиск совместимых ручек, Wacom сотрудничает с Windows, и разрабатывает Bamboo Ink Pen. Этот инструмент станет доступен уже этим летом и будет поддерживаться почти на всех ПК с ОС Windows, которые включают в себя возмозможность работы с чернилами. Он оснащен протоколом Microsoft Pen Protocol (MPP), который основан на технологии Surface Pen. Кроме того, мы также рады рассказать о том, что Surface Dial теперь доступен в большем количестве стран, таких как Австралия, Канада и Новая Зеландия, предоставляя большему количеству людей возможность попробовать это невероятное новое устройство ввода. Кроме того, новое оборудование от наших OEM-партнеров, таких как Dell Canvas 27, скоро станет доступно и будет использовать те же самые API-интерфейсы RadialController, которые используются для набора. Сегодня, разработчики работают над билдом для  Surface Dial и это означает, что вы должны быть готовы к новому оборудованию, которое наши OEM-партнеры добавят в экосистему.

Прогресс, которого Microsoft достигли с помощью Windows Ink, был бы невозможным без обратной связи и вклада разработчиков, которые были в этом заинтересованы. С помощью более чем тысячей приложений в Windows Store, которые поддерживают Windows Ink, а также тем количеством, которые публикуются каждый день; тех приложений, которые вошли в список "Топ 10 платных в Store", также поддерживающих Ink, - можно заметить невероятный интерес к этому инструменту для рисования. Это невероятная возможность, которую поддерживают пользователи, и именно это вдохновляет Microsoft расширять функционал Ink с каждым новым выпуском Windows.

 

Что нового в платформе Windows Ink?

Чернила - это лучший способ, которым люди могут выразить себя, этот инструмент открывает новые возможности для разработчиков приложений, чтобы сделать их отличительными и выдающимися от других. От самых последних причуд, таких как раскраски для взрослых для простых игр, таких как крестики-нолики, к приложениям, которые помогают вам организовать вашу жизнь, - есть так много возможностей для создания и рисования объектов. Microsoft удостоверился в том, что пользователи Windows Ink, очень довольны своим опытом в рисовании, поскольку они ищут и устанавливают больше приложений с поддержкой инструмента Ink. С точки зрения платформы, есть два способа помочь разработчикам:

 

  • Для добавления чернила в приложение, Microsoft предоставил разработчикам возможность легко и быстро сделать это с помощью элементов управления, которые можно быстро добавить в любое приложение и получить поддержку Windows Ink.
  • Обеспечение самых гибких платформ для разработчиков для внедрения инноваций. Это дает возможность выбирать, с чего начать разработку для Windows Ink.

 

Представляем Smart Ink

Начнем с нового строительного блока, который доступен разработчикам в Creators Update. Внедряя Ink Analysis, это первое из возможностей выпуска Smart Ink, которое Microsoft вносит на платформу. Smart Ink предлагает технологии AI, чтобы не просто понимать, что вы пишете, но также помогать вам, соединяя точки с тем, что вы, возможно, захотите сделать. С помощью Ink Analysis все начинается просто: с распознавания форм и усовершенствования нарисованного вами квадрата, но также доступно больше функций, например, понимание того, какие слова вы написали в квадратах и ​​затем, ваш рисунок может быть внесен в диаграмму org, используя понимание вашей структуры. Главная цель - понять намерения пользователя и дать разработчикам возможность превратить его в богатые цифровые конструкции, а также использовать понимание со всех частей системы. Ink Analysis позволяет любому разработчику понять рисунок чернил, которые они захватывают, будь то почерк, фигуры, номера телефонов, символы запаса, списки, структура документа и многое другое. Это та же самая технология, которую Microsoft дебютировали в Sticky Notes в обновлении Window 10 Anniversary Update, и теперь она доступна для вас! 

Ниже приведен пример использования Ink Analysis для распознавания фигур. Для этого фрагмента мы будем использовать DirectInk для обработки штрихов чернил. Начните с инициализации InkAnalyzer и подключения его к InkPresenter:

 

private void Initialize()
{
    inkAnalyzer = new InkAnalyzer();
    inkCanvas.InkPresenter.StrokesCollected += InkPresenter_StrokesCollected;
    inkCanvas.InkPresenter.StrokesErased += InkPresenter_StrokesErased;
}
 
// Whenever the user draws a new stroke, you copy the stroke into Ink Analyzer’s stroke collection
private void InkPresenter_StrokesCollected(InkPresenter sender, InkStrokesCollectedEventArgs args)
{
    inkAnalyzer.AddDataForStrokes(args.Strokes);
}
 
// When a stroke is erased in InkCanvas, remove the same stroke from Ink Analyzer's collection.
private void InkPresenter_StrokesErased(InkPresenter sender, InkStrokesErasedEventArgs args)
{
    foreach (var stroke in args.Strokes)
    {
        inkAnalyzer.RemoveDataForStroke(stroke.Id);
    }
}

 

Затем вы хотите загрузить штрихи в анализатор. Обычно это делается с помощью явного пользовательского действия (например, пользователь нажимает кнопку) или после того, когда пользователь был не активным некоторое время.

 

inkAnalyzer.AnalyzeAsync();

 

 

Результатом является древовидное представление всего документа с различными типами узлов, например, абзац, строка, список, слово и рисунок. Если, например, вы хотите найти все фигуры в чернилах, вы можете сделать это с помощью кода ниже:

 

IReadOnlyList drawings = inkAnalyzer.AnalysisRoot.FindNodes(InkAnalysisNodeKind.InkDrawing);
foreach (IInkAnalysisNode drawing in drawings)
{
    var shape = (InkAnalysisInkDrawing)drawing;
    switch (shape.DrawingKind)
    {
        case InkAnalysisDrawingKind.Circle:
            // The user drew a circle. You can replace it with a perfect circle that goes through shape.Points.
            break;
        case InkAnalysisDrawingKind.Rectangle:
            // The user drew a rectangle. 
            // You can find the full list of supported shapes here.
            break;
    }
}

 

Если вы хотите узнать больше о Ink Analysis, вы можете посмотреть видео "Enable Natural Pen Interaction by Using Ink Analysis to Better Understand Users’ Ink", загрузить образец Ink Analysis на GitHub, или перейти по ссылке Ink Analysis API Reference.

 

Улучшенная панель Ink Toolbar

В Anniversary Update был создан настраиваемый набор инструментов для черчения, Ink Toolbar и Ink Canvas, которые любой разработчик может добавить в свое приложение только с двумя линиями разметки.

 

 

Многие из приложений Microsoft включили инструменты рисования, чтобы создать привлекательный пользовательский интерфейс. Например, "Photos" добавили ручку каллиграфии и возможность рисовать любую фотографию в галерее. "Maps" добавили функцию, которая позволяет измерять расстояние от маршрута, нарисованного на карте. Edge добавил возможность рисования на веб-страницах. Никогда еще не было так просто добавить Windows Ink в ваши приложения.

В обновлении Creators Update, Microsoft продолжает улучшать эти элементы управления! Если вы уже используете их в своих приложениях, эти улучшения принесут вам пользу без дополнительной работы!

 

По желанию пользователей, в Creators Update добавлен новый трафарет - транспортир. Этот новый трафарет позволяет легко рисовать круги и дуги любого размера. При рисовании дуги транспортир отображает показание, в котором указывается точный угол дуги. Вы также можете изменить размер трафарета пальцем или зумом пальца.

Microsoft также улучшил правитель трафаретом! Как и транспортир, теперь он обеспечивает угол отсчета, который показывает угол линейки с горизонтальной линией. Правитель также привязывается к 0, 45 и 90 градусам для легкого доступа к наиболее распространенным углам, которые используются нашими пользователями.

Пользователи также просили улучшить предварительный просмотр штрихов в Ink Toolbar, и в обновлении Creators Update, это стало доступным! Microsoft вносит изменения в Ink Toolbar для улучшения работы с темами High Contrast, автоматически отображая только цвета, соответствующие требованиям видимости для текущего пользовательского профиля.

Новые возможности Ink


Сегодня Microsoft анонсировали новые Surface Pro и Surface Pen. Вместе они предоставляют возможности для рисования, которые действительно делают запись в цифровом виде такой же естественной, как с помощью ручки и бумаги. Вот некоторые из основных эффектов:

 

  • Низкие латентные чернила, которые практически устраняют отставание при написании
  • Поддержка наклона для захвата дополнительного измерения в цифровой работе инструмента Ink 
  • Чернила, которые захватывают весь спектр вашего рисования с 4096 уровнями чувствительности к давлению
  • Легкая работа с Ink с силой срабатывания, необходимой для рисования

 

Пользователи оставляли свои пожелания об этих возможностях, и они добавлены! С точки зрения разработчиков, если вы уже используете платформу Windows Ink, все эти возможности автоматически появляются в вашем приложении! Изменений не требуется, и вы уже подготовлены к новой Surface Pro с новой Surface Pen.

Чернила с низкой латентностью - это уникальное дополнение к Windows Ink. Это результат тесного взаимодействия между аппаратным и программным обеспечением. Чип Pixelsense Accelerator в новой Surface Pro является первым устройством для запуска кода ускорения Windows Ink на аппаратном уровне. Таким образом, Microsoft достигли нового рубежа в красочной обработке, практически устраняя запаздывание между кончиком пера и чернилами, вытекающими из него, создавая наиболее естественный опыт рисования с помощью Windows Ink.

 

Tilt (Наклон) - еще одно отличное дополнение к работе с инструментом Ink. Отличная новость заключается в том, что в дополнение к новой Surface Pro / Pen, поддерживающей эту новую возможность, Wacom Pens с функцией наклона работает также просто и легко! Tilt позволяет Windows Ink моделировать естественный карандашный набросок, реагирующий на наклон пера. Эта поддержка теперь встроена в карандашную щетку на панели инструментов Ink. На приведенных выше диаграммах мы демонстрируем, как карандашную щетку можно использовать для затенения линий (слева) и рисовать дуги различной толщины в зависимости от степени наклона (справа).

Как упоминалось выше, интеграция наклона происходит автоматически, если вы используете Ink Toolbar. Однако, если вы не используете платформу Windows Ink для рендеринга чернил и хотите создать собственную кисть, которая реагирует на наклон, это также будет реально! Существует два свойства: TiltX и TiltY (соответствующий угол наклона против каждой оси плоскости экрана), которые включены в сообщения ввода указателя. Вы можете получить доступ к значениям наклона из PointerPointProperties, включенным в входные события указателя, или POINTER_PEN_INFO структуры из ввода WM_POINTER.

 

 

Эти улучшения автоматически отображаются в любом приложении, использующем элементы управления Windows Ink, и Microsoft уверяет пользователей, что они будут развивать и улучшать их с каждой версией Windows.

 

Что нового в Surface Dial и RadialController?

Surface Dial представляет новую входную парадигму для вычислений. Она была разработана вместе с опытом использования Windows Ink, что позволяет ей по-настоящему сиять при использовании вместе с ручкой. Microsoft изучили много пользовательского опыта, созданного для использования новых возможностей, которые предлагает Surface Dial, а также появления новых аппаратных средств и принятия стандарта RadialController. Тщательно изучая отзывы пользователей, Microsoft добавили больше возможностей для работы с RadialController в Creators Update.

Прежде всего, это некоторые новые обновления кнопок для RadialControllers. Эти новые функции, "Pressed" и "Released", в сочетании с существующими функциями для вращения и экрана, позволят вам отслеживать сложные взаимодействия, такие как нажатие и поворот или нажатие и отмена. Пример ниже показывает простой способ захвата действия нажатия и поворота.

 

_radialController.ButtonPressed += OnButtonPressed;
_radialController.ButtonReleased += OnButtonReleased;
 
private void OnRotationChanged(RadialController sender,
                               RadialControllerRotationChangedEventArgs args)
{
    if (args.IsButtonPressed)
    {
        /* When button is pressed, you can do modal interactions, fine-grained changes */
    }
    else
    {
        /* Otherwise, do the normal rotation behavior */
    }
}
private void SendHaptics(SimpleHapticsController hapticController)
{
    var feedbacks = hapticController.SupportedFeedback;
    foreach (SimpleHapticsControllerFeedback feedback in feedbacks)
    {
        if (feedback.Waveform ==
                    KnownSimpleHapticsControllerWaveforms.Click)
        {
            hapticController.SendHapticFeedback(feedback);
            return;
        }
    }
}

 

Теперь у вас также есть доступ к движку Haptics в аппарате Surface Dial. Использование SimpleHapticsController - новый объект, который использует спецификацию HID Simple Haptics - вы можете напрямую отправлять обратную связь пользователю. Также вы можете использовать это, чтобы настроить меню,  добавив новое измерение в ваш пользовательский опыт. Этот объект доступен в аргументах всех входных событий радиального контроллера.

В случаях, когда вы хотите скрыть радиальное меню, чтобы предотвратить блокировку пользовательского интерфейса, у вас есть новые свойства ActiveControllerWhenMenuIsSuppressed и IsMenuSuppressed, чтобы вы могли настроить меню, даже когда оно доступно или скрыто. Когда меню скрыто, оно не будет отображаться при нажатии и удержании для приложения переднего плана. Ваше приложение может прослушивать новое событие во время отключения меню, чтобы дать пользователю указание, что меню заблокировано, или создать альтернативный опыт. Ниже приведен пример кода для этой функции:

RadialControllerConfiguration config = RadialControllerConfiguration.GetForCurrentView();
config.ActiveControllerWhenMenuIsSuppressed = myController;
config.IsMenuSuppressed = true;
   
myController.ButtonHolding += MyController_ButtonHolding;
Пользовательский ввод, выполняемый в потоке пользовательского интерфейса, иногда может привести к сбоям в производительности. С обновлением Creators Update, теперь можно обрабатывать взаимодействия с радиальным контроллером в потоке вне UI, используя RadialControllerIndependentInputSource. Ниже приведен пример того, как получить дополнительную производительность с помощью этого метода.

RadialController controller;
Windows.UI.Input.Core.RadialControllerIndependentInputSource independentInput;
CoreApplicationView view;
             
view = CoreApplication.GetCurrentView();
 
var workItemHandler = new WorkItemHandler((IAsyncAction) =>
{
    independentInput = Windows.UI.Input.Core.RadialControllerIndependentInputSource.CreateForView(view);
 
    controller = independentInput.Controller;
 
    controller.RotationResolutionInDegrees = 5;
 
    controller.RotationChanged += Controller_RotationChanged;
    controller.ScreenContactStarted += Controller_ScreenContactStarted;
    controller.ScreenContactContinued += Controller_ScreenContactContinued;
    controller.ScreenContactEnded += Controller_ScreenContactEnded;
    controller.ControlLost += Controller_ControlLost;
    controller.ButtonClicked += Controller_ButtonClicked;
    controller.ButtonPressed += Controller_ButtonPressed;
    controller.ButtonReleased += Controller_ButtonReleased;
    controller.ButtonHolding += Controller_ButtonHolding;
    controller.ControlAcquired += Controller_ControlAcquired;
 
    // Begin processing input messages as they're delivered.      
    independentInput.Dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessUntilQuit);
});
action = ThreadPool.RunAsync(workItemHandler, WorkItemPriority.High, WorkItemOptions.TimeSliced);
Помимо всех дополнений API, приведеннных выше, вы можете теперь настраивать и легко добавлять новые пункты меню в Radial Menu. В разделе “Wheel Settings” в приложении настроек вы можете добавлять специальные пункты меню, которые запускают комбинации клавиш. Только представьте, как легко стало настроить контроллер для отправки ваших любимых ярлыков в Visual Studio, Photoshop или даже при просмотре в Интернете!


Surface Dial продолжает удивлять пользователей и разработчиков. Благодаря этим новым усовершенствованиям, как разработчики, так и пользователи имеют больше контроля и гибкости в своем пользовательском опыте. Microsoft предлагает рисоединиться к многочисленным приложениям, которые уже представили отличный набор функций Surface Dial, таких как CorelDRAW, Autodesk’s SketchBook, Silicon Bender’s Sketchable и Algoriddim’s djay Pro. Мы бы очень хотели увидеть ваши работы с помощью этой уникальной новой формой ввода в Windows.

Присоединяйтесь к Microsoft и сделайте Windows Ink еще лучше! 

С дополнениями Windows Ink и Surface Dial в Creators Update, инструмент Windows Ink стал больше, чем просто ручкой, которая пишет на экране. Цель заключается в том, чтобы развиваться в области, которая поможет пользователям открывать новое и устранять все барьеры; чтобы пользователи, которые используют, любят и нуждаются в Windows Ink, наслаждались легкостью в использовании. Это включает в себя целый ряд усилий, начиная с аппаратного обеспечения, которое Microsoft создает самостоятельно и с партнерами, до следующих дополнений SDK, которые они делают, чтобы улучшать ваши приложения. 
Если вы хотите помочь и внести свой вклад в разработку новых приложений Windows, публикуйте ваши идеи с хэштэгом #WindowsInk, или напишите на WindowsInk@Microsoft.com или же на @WindowsInk.



Exception: Object reference not set to an instance of an object.
Posted on 24. May 2017

Windows Store - новые возможности управление, монетизации и продвижения

С выпуском Сборки 2017 на прошлой неделе, Windows Store объявил о новых возможностях для привлечения большего числа клиентов, повышения производительности и продвижения и монетизации ваших приложений и игр, включая:

  • Предлагая свои игры для пользователей Xbox One
  • Быстрое обновление ваших данных в Store с помощью импорта / экспорта
  • Выпуск новых игр или приложений с использованием частной бета-версии, ориентированной на ограниченную аудиторию
  • Управление Центром разработки стало быстрее благодаря обновленной панели инструментов
  • Возможность большему количеству пользователей приобретения приложений через загрузку одним кликом, без входа в учетную запись Microsoft
  • Больше интересных Store листингов с видеороликами
  • Монетизация с помощью регулярного биллинга с использованием подписки на покупки в приложении
  • Более качественный анализ эффективности приложения, анализ воронки и анализ сбоев
  • Получение дохода от рекламы за счет увеличения количества рекламных форматов

Чтобы узнать больше, я рекомендую посмотреть сборку Windows Store: управление и продвижение приложений по-своему (B8098) и прочесть этот пост в блоге.

Больше возможностей для ваших приложений и игр

Ваши UWP приложения и игры поддерживаются на любом устройстве Windows 10, поэтому вы можете охватить сотни миллионов пользователей в одном приложении. Store помогает вам расширить эту возможность, привлечь больше клиентов, приобрести новых пользователей и увеличить доход для тех пользователей, у которых есть несколько новых возможностей. Просмотрите сборку Build 2017 Советы и рекомендации для успешных приложений Store (B8102), чтобы узнать наилучший способ использования этих новых возможностей.

Увеличьте свой доход с помощью рекламы в приложении (Новое). Реклама является одной из основных моделей монетизации для многих издателей, и в настоящее время в Store появилось несколько новых рекламных сервисов, которые приносят большой доход и более высокую процентную ставку для объявлений в UWP приложениях: межстраничные баннеры, воспроизводимые объявления и собственные объявления (бета), включая уже существующие баннеры и видеообъявления. Дополнительную информацию см. в разделе Сборка сессии. В целом о Microsoft Monetization Platform (P4112).

Пример воспроизводимого объявления, работающего в UWP игре

Продвигайте свои приложения и возобновляйте взаимодействие с помощью рекламных кампаний (Новое). Центр разработки предлагает возможность приобретать новых пользователей несколькими способами: промокодами, целевыми предложениями и рекламными кампаниями. Создание рекламной кампании требует нескольких кликов и теперь поддерживает межстраничный баннер, собственные и воспроизводимые объявления (бета-версия). Эти рекламные кампании показываются пользователям в других приложениях, а также в таких Microsoft ресурсах, как MSN.com, Skype и Outlook. Чтобы узнать больше иформации, просмотрите сборку Построение сеанса пользователя с помощью рекламы (сеанс P4154).

Получайте больше клиентов с помощью загрузки одним кликом и покупайте игры для Xbox на ПК (Новое). Store позволяет быстрее и легче приобретать приложения, дает возможность клиентам приобретать бесплатные приложения или игры (с возрастным рейтингом 13 лет или ниже) одним щелчком мыши, не требуя от пользователя входа в свою учетную запись Microsoft. В дополнение к этим изменениям, клиенты теперь могут приобретать игры для Xbox непосредственно из PC Store. Эти новые параметры помогают увеличить число пользователей, загружающих ваше приложение или игру.

Распространяйте игры UWP на Xbox One, задействуя сотни миллионов пользователей Xbox One и более 50 миллионов аккаунтов Xbox Live (Скоро). Центр разработки уже позволяет любому разработчику публиковать приложения, не классифицированные как игры для Xbox One. Разработчики теперь могут присоединиться к новой программе Xbox Live Creators для быстрой сертификации игр на Xbox One, без затрат и трений. Вы можете начать разработку и тестирование ваших игр с поддержкой Xbox Live уже сегодня, возможность публикации игр для Xbox One появится летом. Просмотрите сессию сборки Xbox Live Creators Program (P4159), чтобы узнать больше.

Подписки на покупки внутри приложения (Скоро). Приложения могут быть настроены для включения подписок на приложения, то есть продажи услуг в приложении, которые периодически оплачиваются (1/3/6/12/24-месячные периоды продления) с бесплатной пробной версией или без нее. В настоящее время возможности подписки на приложения доступны только для предварительного просмотра, они тестируются несколькими издателями и будут доступны всем разработчикам этим летом. Следите за сборкой приложений в Windows блоге для получения дополнительной информации.

В дополнение к этим функциям помните, что вы можете предложить свое приложение или игру предприятиям или учебным заведениям через Microsoft Store for Business, который предлагает переработанный частный Store для компаний. Вы также можете взять ваше существующее приложение или игру Win32 и рекламировать его через Windows Store с помощью Desktop Bridge.

Модернизация Центра разработки

Более современный и эффективный инструментарий на панели инструментов (Dev Center Insiders). Панель мониторинга Центра разработки была модернизирована на основе ваших отзывов, чтобы увеличить вашу продуктивность. Новая панель управления интегрирована с программами Office, Cortana и Groove. Она имеет новый интерфейс, красивую аналитику, новые страницы на уровне аккаунта, интегрированный набор приложений и оптимизированное переключение программ. Есть несколько вещей, которые делают новую панель инструментов более полезной, особенно для учетных записей с несколькими приложениями, играми или программами. Попробуйте сегодня, присоединившись к Dev Center Insider Program.

Руководство по началу работы с новой панелью управления

Приглашайте пользователей за пределами вашей организации для совместной работы над вашими приложениями и играми (Новое). Теперь есть поддержка для приглашения пользователей вне вашей компании, чтобы внести вклад в проекты вашего аккаунта. Это делает сотрудничество и партнерские отношения между компаниями и пользователями намного проще. Пользователями вашей учетной записи управляют те же роли и разрешения, которые вы применяете к пользователям вашего арендатора AAD, гарантируя, что вы остаетесь в полном контроле.

Достичь большего количества клиентов

Чтобы помочь клиентам найти ваше приложение или игру, а затем увеличить вероятность их загрузки, в Store добавлены новые фильтры поиска и способы сделать ваш листинг более привлекательным, а также способы массового обновления списков в Store, оптимизация обновления на нескольких языках. 

Помощь клиентам найти ваши приложения или игры с новыми возможностями поиска (Работа над внедрением). Начиная с сегодняшнего дня мы запускаем опцию, чтобы указать, использует ли ваше приложение Cortana, Ink или Continuum, или если ваши игры предлагают смешанную реальность, 4K, HDR, многопользовательский, кооперативный или общий разделенный экран. Просмотр на странице свойств вашего представления, поддерживаются ли эти возможности, и этим летом клиенты смогут фильтровать свои поисковые запросы, чтобы показывать только приложения или игры, которые поддерживают возможности, которые они ищут.

Фильтры поиска, которые появятся в Store летом

Создание более привлекающих объявлених в Store с помощью видеороликов (Работа над внедрением). Многие из вас сказали нам, что видеоролики являются одним из лучших способов привлечения клиентов. После пилотирования этой функции в начале этого года, мы начинаем использовать возможности загрузки трейлеров для использования в вашем списке в Store уже сегодня, в течение нескольких месяцев все аккаунты будут иметь к этому доступ. Мы сделали несколько других обновлений к типам изображений, которые вы можете предоставить для отличного листинга в Store, включая активы с высоким 4K-разрешением.

 

Создавайте и обновляйте списки товаров быстрее с помощью импорта / экспорта (Скоро). Создание и обновление списков магазинов занимает много кликов на один язык и может занять часы для отправки с листингом на многих языках. Центр разработки позволяет импортировать и экспортировать списки, поэтому вы можете вносить изменения в автономном режиме в массовом порядке, а затем сразу же загружать все свои данные о листинге, вместо того, чтобы вручную вводить каждую строку и изображение для каждого языка. Мы добавим эту функцию на все аккаунты в течение следующих месяцев.

Страница отправки, показывающая прогресс с использованием импорта / экспорта

Планирование вашего выпуска

После того, как вы создали приложение и продумали подходы привлечения пользователей, вам необходимо запланировать выпуск. Store поддерживает несколько вариантов видимости, включая выпуск, доступный только через промокоды, публичный, но не доступный для поиска выпуск (скрытый), публичный выпуск или перенос различных пакетов опубликованного приложения в определенные группы людей. Это широко используется, уже на сегодняшний день создано более 30 000 пакетов. Мы добавляем дополнительные опции, позволяющие вам выпускать частные бета-версии и планировать выпуск очень точно.

Публикация с точной датой и временем (Работа над внедрением). Раньше Центр разработки позволял вам определить, когда отправка начнет публиковаться, но точно не сообщал, когда будет выпуск будет доступен. Теперь вы можете указать точную дату и время в формате UTC или по местному времени во время отправки. Сегодня мы начинаем внедрять новые параметры Расписания, в течение нескольких месяцев все аккаунты будет иметь доступ.

Закрытое тестирование (Скоро). Скоро вы сможете публиковать новое приложение или игру, которые видны только людям из определенной группы, которую вы определяете; Любой, кто не входит в вашу бета-группу, не сможет увидеть страницу со списками Store или загрузить продукт. Эта функция используется выбранными приложениями для предварительного просмотра, и мы выпустим эту функцию для всех разработчиков в течение ближайших нескольких месяцев.

Помните, что вы также можете использовать API сервисы Store, чтобы упростить управление вашим приложением. Существуют API-интерфейсы для отправки и выпуска приложений, игр и дополнений, управления пакетами, доступа к информации аналитики, чтения и ответа на отзывы и запуска рекламных кампаний.

Оптимизация цен и настройка сделок и продаж

Как только ваши приложения и игры будут опубликованы в Windows Store, вы можете изменить свое приложение или дополнительную цену, расширить свое взаимодействие с клиентами или предложить скидки, чтобы привлечь больше клиентов.

Создание новых типов клиентских сегментов (Новое). В Центре разработки есть несколько функций поддержки, включая продажи, целевые предложения, уведомления и аналитику. Теперь вы можете создавать сегменты по разбивке рынка, сумме покупки и, оценил ли пользователь ваше приложение или нет. Скоро вы сможете использовать прогнозирующую модель оттока для создания сегментов пользователей, которым, как предполагается, не нужно использовать приложение (оттока), поэтому вы можете использовать профилактический подход.

Просмотр контента или цены, ориентированных на определенный сегмент (Новое). Новая функция целевых предложений позволяет вам нацеливать определенные сегменты ваших клиентов на привлекательный персонализированный контент внутри приложения, чтобы увеличить участие, удержание и монетизацию. Примером является дисконтирование определенных продуктов в приложении для клиентов, которые являются плательщиками первого раза. Для получения дополнительной информации и просмотра демонстрации того, как использовать эту функцию, просмотрите сессию Build, максимизирующую взаимодействие с пользовательским контентом (P4116) или прочитайте больше.

Точно контролируйте свою цену и планируйте изменения (Работа над внедрением). Вы можете с точностью планировать изменения цен для клиентов Windows 10, используя валюту, которая имеет смысл для вас, глобально или для определенных рынков. Внедрение этой функции начинается сегодня и завершится через несколько месяцев.

Увеличьте количество клиентов и привлеките их с более гибким ценообразованием при продаже (Работа над внедрением). Увеличьте количество клиентов и привлеките их с более гибким ценообразованием при продаже (запуск в режиме разворота). Мы добавили больше опций в цену продажи, чтобы вы могли настроить скидки по процентам (например, скидка 40%), предлагать скидки клиентам, которые владеют одним из ваших других приложений (например, «скидка 50%, если вы владеете другой игрой»), нацелить скидку на сегмент пользователей (например, предлагать скидки пользователям, которые еще не оценили игру) и даже использовать новый сегмент клиентов, которые никогда не покупали в Windows Store. Мы выяснили, что когда клиент совершает первую покупку, он обычно продолжает покупать больше товаров в этом исходном приложении или игре, а также в других продуктах в Store. Сегодня начинается внедрение расширенных цен на продажу, и все счета должны иметь доступ к этим функциям к лету. Обратите внимание: когда вы предлагаете скидку для сегмента своих клиентов, вы также можете использовать нашу функцию целевых уведомлений, чтобы предупредить этих клиентов о скидке. Смотрите Build 2017 session Maximizing revenue through advanced pricing, sales and scheduling (P4116), чтобы узнать больше.

Конфигурация Центра разработки

Ценообразование в Store

Просмотр всех возможных уровней цен в Excel (Работа над внедрением). При корректировке цен многие из вас попросили иметь более простой способ просмотра уровней цен во всех валютах. На странице «Цены и доступность» теперь можно загрузить таблицу цен в формате CSV (доступно для редактирования в Excel). Сегодня начинается развертывание, и все учетные записи должны иметь доступ к загрузке таблицы цен через несколько месяцев.

Улучшение анализа

Когда ваше приложение опубликовано и доступно для использования, вам нужно проанализировать его эффективность, чтобы помочь скорректировать данные о вашей компании или приложении, чтобы улучшить приобретение, удовлетворение или участие. Наши новые возможности аналитики позволяют более эффективно анализировать несколько приложений, определять области улучшения воронки конверсии, улучшать отладку и в целом находить шаблоны и тенденции для улучшения вашего приложения.

Просмотр аналитики для нескольких приложений с использованием современного дизайна (Dev Center Insiders). Наряду с выпуском нового инструмента, мы обновили и улучшили наши функции аналитики, чтобы у вас был доступ к большему количеству информации. В новом обзоре Google Analytics быстро суммируются ключевые отчеты, такие как Acquisitions, Usage, Installs and Health, и вы можете выбрать до 5 приложений для аналитики одновременно. Вы можете заранее посмотреть на этот новый проект, присоединившись к Dev Center Insider Program.

 

Анализ конверсионной воронка клиента (Dev Center Insiders). Воронка сбора данных показывает общее число клиентов, которые заполняют каждый этап последовательности: от просмотра страницы в Store до использования приложения, а также коэффициента конверсии. Чтобы сравнить эффективность кампании, вы можете отфильтровать демографические данные клиентов и специальные кампании. Отчет предназначен для пользователей Windows 10 за последние 90 дней, а просмотры страниц также включают просмотры людей, которые не вошли в учетную запись Microsoft. Попробуйте прямо сейчас, присоединившись к Dev Center Insider Program.

Автоматически получать предупреждения, когда есть аномалии в тенденциях приобретения (Dev Center Insiders). Часто можно пропустить значительные изменения. Чтобы помочь вам отслеживать изменения данных, вы будете получать уведомление по электронной почте, когда мы обнаружим значительное изменение тренда с вашими приобретениями. Мы также будем включать средний рейтинг вашего приложения за последние 10 дней, чтобы вы могли увидеть, были ли они затронуты. Вы также сможете использовать «Health» и другие отчеты для определения срочных исправлений адреса или отвечать на отзывы, что поможет вам повысить рейтинг. Чтобы получить эти письма сейчас, присоединяйтесь к Windows Insider.

Отлаживайте свои приложения более эффективно, анализируя сбои и отладки, это имеет решающее значение для повышения производительности и качества ваших приложений и игр. Сегодня отчет о работоспособности позволяет определить, какие конфигурации ОС и версий приложений генерируют большинство сбоев, а также ссылку на детали сбоев с отдельными трассировками стека. Этим летом мы начнем загружать файлы CAB для сбоев, которые происходят на устройствах, участвующих в программе Windows Insider.

Понимание использования и анализ когорта (Скоро). Отчет Usage помогает вам понять, как часто и как долго пользователи используют приложение, и измеряет время интерактивного взаимодействия между активными пользователями и активными устройствами, используя отраслевые стандарты DAU / MAU и сохранение. Вскоре отчет будет включать в себя когортную аналитику, которая поможет вам понять, как происходит смена использования с течением времени. Присоединяйтесь к программе Dev Center Insider, чтобы быть готовым использовать этот анализ, когда он выйдет на все аккаунты в течение следующих нескольких месяцев.

Что же будет дальше?

Мы надеемся, что вы воспользуетесь этими ресурсами и узнаете больше о возможностях, описанных в этом блоге, выполнив следующие действия:

Оставляйте свои отзывы, чтобы помочь определить приоритеты функций и обновлений. Воспользуйтесь ссылкой для обратной связи в Dev Center, которую найдете в правом верхнем углу панели инструментов (если вы используете новую панель инструментов - в программе Dev Center Insider).



Exception: Object reference not set to an instance of an object.
Posted on 18. May 2017

Announcing Project Rome iOS SDK

Project Rome - это платформа для обеспечения беспрепятственного межсетевого и кросс-платформенного использования.  Цель Project Rome очень проста - работа пользователя с приложением не должна быть привязана к одному устройству больше, чем данные, которые должны привязываться к одному устройству. Ваши приложения, также как и ваши данные, должны перемещаться вместе с вами.

Раньше это означало переход между устройствами при сохранении одного пользовательского интерфейса на другом устройстве Windows. Несколько месяцев назад функции Project Rome были расширены на платформу Android, что позволяет вам начать сеанс пользования приложением на телефоне Android и продолжить его на ПК с операционной системой Windows, на Xbox One или даже в Surface Hub.

На сегодняшний день, поддержка Project Rome также доступна для платформы iOS. Здесь вы можете скачать Project Rome SDK для iOS.


Рассмотрение музыкального приложения Contoso

Пример Contoso Music хорошо показывает сценарии работы пользователя с приложением на разных устройствах.

Это приложение для потоковой передачи музыки UWP, которое работает на нескольких устройствах Windows, привязанных к одной и той же учетной записи Microsoft (MSA). Используя Project Rome, приложение работает таким образом, чтобы пользователь, передающий песню на ПК с ОС Windows, мог передать эту песню на свой Xbox. После этого, он всегда может переместить текущий плейлист на свой Windows Phone перед тем, как выйти на пробежку.

Расширение для iOS

Представим себе, что, основываясь на успехе версий Windows и Android, разработчик создает iOS-версию Contoso Music. Изучая его телеметрию через несколько месяцев, видим, что все приложения успешны также, как и его версии для Windows и Android. Однако в отзывах пользователей есть общая тема: Пользователи затрудняются с переключением между устройствами. Итак, планируем добавить такую возможность, чтобы пользователь могу слушать музыку на iPhone через наушники, а затем войти в гостиную и незамедлительно переключиться на воспроизведение той же музыкальной композиции через свой Xbox, подключенный к качественным динамикам.

С Project Rome iOS SDK мы можем создать мост между устройствами iOS и устройствами Windows в два этапа:

 

  • RemoteSystems API позволяет приложению обнаруживать устройства Windows, которыми владеет пользователь. RemoteSystems API позволит приложению Contoso Music обнаруживать эти устройства в той же сети или через облако.
  • После обнаружения устройств, RemoteLauncher API  запустит приложение Contoso Music на другом устройстве Windows.

 

Как это работает?

Чтобы переключиться с воспроизведения музыки с устройства iOS на устройство Windows, приложение должно распознать другое устройство. Для этого требуется использование MSA OAuth, чтобы получить разрешение на запрос для устройств, а затем обнаруживать дополнительные устройства, как показано на диаграмме ниже.


 

 

 

// Asynchronously initialize the Rome Platform.
  // Pass in self as class implements the CDOAuthCodeProviderDelegate protocol.
  [CDPlatform startWithOAuthCodeProviderDelegate:self completion:^(NSError* clientError) {
                                              if (clientError)
                                              {
                                                  // Handle error
                                                  return;
                                              }
 
                                              // Handle success, show discovery screen
                                      }];
 
// Implementation of CDOAuthCodeProviderDelegate
// The Rome SDK calls this delegate method when it needs an OAuth Access Code from the application.
- (NSError*)getAccessCode:(NSString*)signinUrl completion: (void (^)(NSError* error, NSString* accessCode))completion {
 
// Stash away the callback the SDK gives us
_getTokenCallback = completion;
 
  // Show the interactive OAuth Web View flow.
  // Once the OAuth flow completes or fails, invoke this callback.
  ...
 
// Return nil as there was no error
  return nil;
}

 

 

После инициализации, приложение может распознавать все устройства на графике устройства пользователя MSA, инициировав распознание с помощью CDRemoteSystemDiscoveryManager. Информация об обнаруженных устройствах создается через протокол CDRemoteSystemDiscoveryManagerDelegate. В примере Microsoft каждое обнаруженное устройство сохраняется в свойстве NSMutableArray.

 

// Create instance and pass ‘self’ as the delegate as it implements CDRemoteSystemDiscoveryManagerDelegate.
CDRemoteSystemDiscoveryManager* remoteSystemDiscoveryManager = [[CDRemoteSystemDiscoveryManager alloc] initWithDelegate:self];
 
// Start discovery.
[remoteSystemDiscoveryManager startDiscovery];
 
// CDRemoteSystemDiscoveryManagerDelegate implementation
- (void)remoteSystemDiscoveryManager:
            (CDRemoteSystemDiscoveryManager*)discoveryManager
                             didFind:(CDRemoteSystem*)remoteSystem {
  @synchronized(self) {
     [self.discoveredSystems addObject:remoteSystem];
      // Refresh UI based upon updated state in discoveredSystems e.g. populate table
   }
}
 
- (void)remoteSystemDiscoveryManager:
            (CDRemoteSystemDiscoveryManager*)discoveryManager
                           didUpdate:(CDRemoteSystem*)remoteSystem {
  NSString* id = remoteSystem.id;
 
// Loop through and update the Remote System instance if previously seen.
  @synchronized(self) {
    for (unsigned i = 0; i < self.discoveredSystems.count; i++) {
      CDRemoteSystem* currentRemoteSystem =
          [self.discoveredSystems objectAtIndex:i];
      NSString* currentId = currentRemoteSystem.id;
 
      if ([currentId isEqualToString:id]) {
        [self.discoveredSystems replaceObjectAtIndex:i withObject:remoteSystem];
        break;
      }
    }
 
       // Refresh UI based upon updated state in discoveredSystems e.g. populate table
  }
}

 

 

Теперь пользователь может выбрать устройство, на которое он хочет перенести проигрывание музыки, из списка обнаруженных устройств. Из выбранной CDRemoteSystem образец создания CDRemoteSystemConnectionRequest показан на диаграмме последовательности ниже. Используя CDRemoteLauncher, можно удаленно запускать приложение на выбранном устройстве, а также добавлять необходимую дополнительную контекстуальную информацию, такую как воспроизводимая в данный момент песня.

 

 

Здесь вы можете ознакомиться с тем, как дистанционно запустить http://www.bing.com  на вашем устройстве:

 

// Create a connection request using the CDRemoteSystem instance selected by the user
  CDRemoteSystemConnectionRequest* request =
       // Using the RemoteSystem above, [self.discoveredSystems addObject:remoteSystem];
      [[CDRemoteSystemConnectionRequest alloc] initWithRemoteSystem:system];
 
NSString* url = @”http://www.bing.com”;
 
  [CDRemoteLauncher
           launchUri:uri
           withRequest:request
           withCompletion:^(CDRemoteLauncherUriStatus status) {
            // Update UI on launch status
            }];

 

 

Как видите достаточно легко расширить поддержку кросс-устройств для iOS в своем приложении.

В Завершении

Project Rome разрушает барьеры, изменяя представления о том, что такое «приложение», и фокусируясь на пользователе независимо от того, где он находится или какое устроство использует. Теперь приложение не обязательно должно означать что-то, что привязано к одному устройству, вместо этого оно может быть чем-то, что существует между вашими устройствами и оптимизировано для нужного устройства в нужное время.

Чтобы узнать больше о Project Rome, ознакомьтесь с предоставленными ниже ссылками.

 

 

 



Exception: Object reference not set to an instance of an object.
Posted on 12. May 2017

Поддержка COM-сервера и OLE-документа для Desktop Bridge

Windows 10 Creators Update добавляет поддержку автономного (OOP) COM и OLE для приложений на Desktop Bridge - так называемого Packaged COM. В прошлом, приложения Win32 создавали COM-расширения, которые могли бы использовать другие приложения. Например, Microsoft Excel раскрывает Excel.Application, поэтому сторонние приложения могут автоматизировать операции в Excel, используя свою богатую объектную модель. Но в первоначальном выпуске Desktop Bridge с Windows 10 Anniversary Update  приложение не может выставлять точки расширения COM, поскольку все записи реестра находятся в его частном улье и публично не отображаются в системе. Packaged COM предоставляет механизм для записей COM и OLE, объявляемых в манифесте,  чтобы они могли использоваться внешними приложениями. Базовая система обрабатывает активацию объектов, чтобы их можно было потреблять клиентами COM - все это еще невыполненные обещания Universal Install Platform (UWP): не оказывать никакого воздействия на установку и удаление.

Как это работает

Packaged COM считываются из манифеста и сохраняются в новом каталоге, которым управляет система развертывания UWP. Это решает одну из главных проблем в COM, в которой любое приложение или установщик может писать в реестр и повреждать систему, например, перезаписывая существующие регистрации COM или оставляя записи реестра при удалении. 

Во время выполнения COM-вызова, то есть вызова CLSIDFromProgID() или CoCreateInstance(), система сначала просматривается в каталоге Packaged COM, и если она не найдена, возвращается обратно в системный реестр. Затем, COM-сервер активируется и запускает ООP из клиентского приложения.

Когда использовать Packaged COM

Packaged COM очень полезен для приложений, которые предоставляют сторонние точки расширения, однако не все приложения нуждаются в этом. Если ваше приложение использует COM только для личного использования, вы можете полагаться на записи COM в частном улье (Registry.dat), чтобы поддержать ваше приложение. Все бинарные файлы в одном и том же пакете имеют доступ к этому реестру, но любые другие приложения в системе не могут видеть их в вашем частном улье. Packaged COM позволяет вам чётко контролировать, какие серверы могут быть опубликованы и использованы сторонними разработчиками.

Ограничения

Поскольку записи Packaged COM хранятся в отдельном каталоге, приложения, которые непосредственно читают реестр (например, вызывая RegOpenKeyEx () или RegEnumKeyEx ()), не будут видеть никаких записей и следовательно - не сработают. В этих сценариях приложениям, которые предоставляют расширения, необходимо будет работать со своими партнерами, чтобы выполнить вызовы COM API или предоставить другой механизм связи между приложениями.

Поддержка распространяется на серверы OOP, что позволяет выполнять два ключевых требования. Во-первых, поддержка сервера OOP означает, что Desktop Bridge может сохранить свою работоспособность. Запустив расширения OOP, диспетчер обновлений может закрыть COM-сервер и обновить все двоичные файлы, потому что в нем нет используемых библиотек DLL, загружаемых другими процессами. Во-вторых, OOP допускает более надежный механизм расширения. Если внутрипроцессный COM-сервер зависает, также зависнет и приложение; для OOP размещенное приложение будет по-прежнему функционировать и сможет решить, как обращаться с неподобающим ООP-сервером.

Мы не поддерживаем все записи регистрации COM и OLE, полный список поддерживаемых нами компонентов можно найти в иерархии элементов манифеста пакета приложения Windows 10 на MSDN: https://docs.microsoft.com/uwp/schemas/appxpackage/uapmanifestschema/root-elements

Рассмотрим внимательнее

Ключами к включению этой функциональности являются новые категории расширений манифеста «windows.comServer» и «windows.comInterface». Расширение «windows.comServer» соответствует типичным регистрационным записям, найденным в CLSID (т.е. HKEY_CLASSES_ROOT \ CLSID \ {MyClsId} ) Для приложения, поддерживающего исполняемые серверы и их классы COM (включая их записи регистрации OLE), суррогатные серверы, классы ProgID и TreatAs. Расширение «windows.comInterface» соответствует типичным регистрационным записям как в HKCR \ Interface \ {MyInterfaceID}, так и в HKCR \ Typelib \ {MyTypelibID}, и поддерживает интерфейсы, ProxyStubs и Typelibs.

Если вы уже ранее регистрировали классы COM, эти элементы будут выглядеть очень знакомыми и простыми, чтобы отображать существующие ключи реестра в записи манифеста. Вот несколько примеров.

Пример # 1: Регистрация .exe COM-сервера

В этом первом примере мы упакуем ACDual для Desktop Bridge. ACDual - это пример MFC OLE, который поставляется в более ранних версиях Visual Studio. Данное приложение является .exe COM-сервером, ACDual.exe, с Document CoClass, который реализует интерфейс IDualAClick. Затем он может использоваться пользователем. Ниже предоставлено изображение сервера ACDual и простого клиентского приложения WinForms, которое его использует:

Рис. 1 приложение Client WinForms, автоматизирующее AutoClick COM-сервер

Ссылка Store: https://www.microsoft.com/store/apps/9nm1gvnkhjnf

Ссылка GitHub: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/PackagedComServer

 

Отличие реестра от AppxManifest.xml

Чтобы понять, как работает Packaged COM, важно сравнить типичные записи в реестре с вложенными COM-записями манифеста. Обычно для минимального COM-сервера требуется CLSID с ключом LocalServer32, а также интерфейс, указывающий на ProxyStub для обработки перекрестного процесса маршалинга. ProgIDs и TypeLibs облегчают чтение и программирование. Давайте посмотрим на каждый раздел и сравним, как выглядит системный реестр, по сравнению с фрагментами Packaged COM. Прежде всего, посмотрим на следующие записи ProgID и CLSID, которые регистрируют сервер в системном реестре:

; ProgID registration
[HKEY_CLASSES_ROOT\ACDual.Document]
@="AClick Document"
[HKEY_CLASSES_ROOT\ACDual.Document\CLSID]
@="{4B115281-32F0-11CF-AC85-444553540000}"
[HKEY_CLASSES_ROOT\ACDual.Document\DefaultIcon]
@=”C:\\VCSamples\\MFC\\ole\\acdual\\Release\\ACDual.exe,1”
 
; CLSID registration
[HKEY_CLASSES_ROOT\CLSID\{4B115281-32F0-11CF-AC85-444553540000}]
@="AClick Document"
[HKEY_CLASSES_ROOT\CLSID\{4B115281-32F0-11CF-AC85-444553540000}\InprocHandler32]
@="ole32.dll"
[HKEY_CLASSES_ROOT\CLSID\{4B115281-32F0-11CF-AC85-444553540000}\LocalServer32]
@="\"C:\\VCSamples\\MFC\\ole\\acdual\\Release\\ACDual.exe\""
[HKEY_CLASSES_ROOT\CLSID\{4B115281-32F0-11CF-AC85-444553540000}\ProgID]
@="ACDual.Document"

 

Для сравнения перевод в манифест пакета прост. ProgID и CLSID поддерживаются через расширение windows.comServer, которое должно находиться под элементом приложения вашего приложения вместе со всеми вашими другими расширениями. Что касается ProgID, вы можете иметь несколько регистраций ProgID для вашего сервера. Обратите внимание, что по умолчанию значение ProgID не указано для предоставления дружественного имени, так как эта информация сохраняется с регистрацией CLSID, и одна из целей схемы манифеста заключается в уменьшении дублирования информации. Регистрация CLSID включена через элемент ExeServer с атрибутом Executable, который представляет собой относительный путь к .exe, содержащемуся в пакете. Относительные пути пакетов решают одну общую проблему: декларативно регистрировать COM-серверы: в файле .REG вы не знаете, где находится ваш исполняемый файл. Часто все файлы в пакете помещаются в корень пакета. Элемент регистрации Class находится в элементе ExeServer. Вы можете указать один или несколько классов для ExeServer.

    
<Applications>
    <Application Id="ACDual" Executable="ACDual.exe" EntryPoint="Windows.FullTrustApplication">
      <uap:VisualElements DisplayName="ACDual" .../>
    <Extensions>      
      <com:Extension Category="windows.comServer">
        <com:ComServer>
          <!-- CLSID -->
          <com:ExeServer Executable="ACDual.exe" DisplayName="AutoClick">
            <com:Class Id ="4B115281-32F0-11cf-AC85-444553540000" DisplayName="AClick Document" ProgId="AutoClick.Document.1" VersionIndependentProgId="AutoClick.Document">
            </com:Class> 
          </com:ExeServer>      
          <!-- ProgId -->
          <com:ProgId Id="AutoClick.Document" CurrentVersion="AutoClick.Document.1" />
          <com:ProgId Id="AutoClick.Document.1" Clsid="4B115281-32F0-11cf-AC85-444553540000" />
        </com:ComServer>
      </com:Extension>
 <!-- Продолжение ниже -->

Следующим шагом будет TypeLib и регистрация интерфейса. В этом примере TypeLib является частью основного исполняемого файла, и интерфейс использует стандартный маршалер (oleaut32.dll) для своего ProxyStub, поэтому регистрация происходит следующим образом:

 

[HKEY_CLASSES_ROOT\Interface\{0BDD0E81-0DD7-11CF-BBA8-444553540000}]
@="IDualAClick"
[HKEY_CLASSES_ROOT\Interface\{0BDD0E81-0DD7-11CF-BBA8-444553540000}\ProxyStubClsid32]
@="{00020424-0000-0000-C000-000000000046}"
[HKEY_CLASSES_ROOT\Interface\{0BDD0E81-0DD7-11CF-BBA8-444553540000}\TypeLib]
@="{4B115284-32F0-11CF-AC85-444553540000}"
"Version"="1.0"
 
 
;TypeLib registration
[HKEY_CLASSES_ROOT\TypeLib\{4B115284-32F0-11CF-AC85-444553540000}]
[HKEY_CLASSES_ROOT\TypeLib\{4B115284-32F0-11CF-AC85-444553540000}\1.0]
@="ACDual"
[HKEY_CLASSES_ROOT\TypeLib\{4B115284-32F0-11CF-AC85-444553540000}\1.0\0]
[HKEY_CLASSES_ROOT\TypeLib\{4B115284-32F0-11CF-AC85-444553540000}\1.0\0\win32]
@=" C:\\VCSamples\\MFC\\ole\\acdual\\Release\\AutoClik.TLB"
[HKEY_CLASSES_ROOT\TypeLib\{4B115284-32F0-11CF-AC85-444553540000}\1.0\FLAGS]
@="0"
[HKEY_CLASSES_ROOT\TypeLib\{4B115284-32F0-11CF-AC85-444553540000}\1.0\HELPDIR]
@=""

 

При переводе этого в манифест пакета расширение windows.comInterface поддерживает одну или несколько регистраций TypeLib, ProxyStub и интерфейса. Как правило, он помещается в элемент «Приложение», поэтому для удобства чтения его легче связать с регистрацией классов, но он также может находиться в элементе «Пакет». Также обратите внимание, что нет необходимости запоминать CLSID универсального маршалера (ключ, где ProxyStubClsid32 = {00020424-0000-0000-C000-000000000046}). Это просто флаг: UseUniversalMarshaler = "true".

 

         <!-- Начало выше-->
         <com:Extension Category="windows.comInterface">
          <com:ComInterface>
          <!-- Interfaces -->
          <!-- IID_IDualAClick -->
          <com:Interface Id="0BDD0E81-0DD7-11cf-BBA8-444553540000" UseUniversalMarshaler="true">
            <com:TypeLib Id="4B115284-32F0-11cf-AC85-444553540000" VersionNumber="1.0" />
          </com:Interface>
 
          <!-- TypeLib -->
          <com:TypeLib Id="4B115284-32F0-11cf-AC85-444553540000">
            <com:Version DisplayName = "ACDual" VersionNumber="1.0" LocaleId="0" LibraryFlag="0">
              <com:Win32Path Path="AutoClik.tlb" />
            </com:Version>
          </com:TypeLib>
        </com:ComInterface>
      </com:Extension>
    </Extensions>
    </Application>
  </Applications>
  

 

Теперь вы можете инициализировать и использовать сервер с любого языка, поддерживающего COM-серверы и OLE-серверы с двумя интерфейсами.

Пример # 2: поддержка OLE

В следующем примере мы упакуем существующий сервер документов OLE, чтобы продемонстрировать возможности Desktop Bridge и Packaged COM. Пример, который мы будем использовать, - это пример приложения MFC Scribble, который предоставляет вставляемый тип документа Scribb Document. Scribble - простой сервер, который позволяет OLE-контейнеру, например WordPad, вставлять документ Scribb.

Рис. 2. WordPad, на котором размещен встроенный Scribb Document

Ссылка Store: https://www.microsoft.com/store/apps/9n4xcm905zkj

Ссылка GitHub: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/PackagedOleDocument

 

Отличие реестра от AppxManifest.xml

Существует много ключей для указания различных атрибутов OLE. Опять же, магия здесь заключается в том, что платформа была обновлена для работы с Packaged COM, и все, что вам нужно сделать, это перевести эти ключи в ваш манифест. В этом примере записи для Scribble включают ProgID, его ассоциации типов файлов и CLSID с записями.

 

;SCRIBBLE.REG
;
;FileType Association using older DDEExec command to launch the app
[HKEY_CLASSES_ROOT\.SCB]
@=”Scribble.Document”
[HKEY_CLASSES_ROOT\Scribble.Document\shell\open\command]
@=”SCRIBBLE.EXE %1”
 
 
;ProgId
[HKEY_CLASSES_ROOT\Scribble.Document]
@= Scribb Document
[HKEY_CLASSES_ROOT\Scribble.Document\Insertable]
@=””
[HKEY_CLASSES_ROOT\Scribble.Document\CLSID]
@= “{7559FD90-9B93-11CE-B0F0-00AA006C28B3}}”
 
 
;ClsId with OLE entries
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}]
@="Scribb Document"
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\AuxUserType]
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\AuxUserType\2]
@="Scribb"
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\AuxUserType\3]
@="Scribble"
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\DefaultIcon]
@="\"C:\\VC2015Samples\\scribble\\Release\\Scribble.exe\",1"
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\InprocHandler32]
@="ole32.dll"
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\Insertable]
@=""
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\LocalServer32]
@="\"C:\\VC2015Samples\\scribble\\Release\\Scribble.exe\""
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\MiscStatus]
@="32"
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\ProgID]
@="Scribble.Document"
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\Verb]
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\Verb\0]
@="&Edit,0,2"
[HKEY_CLASSES_ROOT\CLSID\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\Verb\1]
@="&Open,0,2"

 

 

Прежде всего, стоит обсудить ассоциацию типов файлов. Это расширение, которое поддерживалось в первой версии расширений Desktop Bridge. Обратите внимание, что указание здесь ассоциации типов файлов автоматически добавляет поддержку открытой командной  оболочки.

Далее, подробнее расмотрим записи ProgID и CLSID. В данном случае простой пример имеет только ProgID, а не VersionIndependentProgID.

Большая часть волнений в этом примере находится под CLSID, где находятся все ключи OLE. Ключи реестра обычно сопоставляются с атрибутами класса, например:

 

Вставляемый ключ под ProgID или CLSID, сопоставляется с атрибутом InsertableObject = "true"

Если ключ InprocHandler32 является Ole32.dll, используйте атрибут EnableOleDefaultHandler = "true"

AuxUserType\ 2 отображается в ShortDisplayName

AuxUserType\ 3 сопоставляется с приложением DisplayName

 

В тех случаях, когда в ключе было много значений, например, глаголов OLE, мы разделяем их на отдельные атрибуты. Ниже показан полный манифест:

 

  
 <Applications>
  <Application Id="Scribble" Executable="Scribble.exe" EntryPoint="Windows.FullTrustApplication">
    <uap:VisualElements DisplayName="Scribble App" .../>
    <Extensions>
      <uap:Extension Category="windows.fileTypeAssociation">
        <uap3:FileTypeAssociation Name="scb" Parameters="%1">
          <uap:SupportedFileTypes>
            <uap:FileType>.scb</uap:FileType>
          </uap:SupportedFileTypes>
        </uap3:FileTypeAssociation>
      </uap:Extension>
 
      <com:Extension Category="windows.comServer">
        <com:ComServer>
          <com:ExeServer Executable="Scribble.exe" DisplayName="Scribble">
            <!-- ClsId Registration -->
            <com:Class Id="7559FD90-9B93-11CE-B0F0-00AA006C28B3" DisplayName="Scribb Document" ShortDisplayName="Scribb" ProgId="Scribble.Document.1" VersionIndependentProgId ="Scribble.Document" EnableOleDefaultHandler="true" InsertableObject="true">
              <com:DefaultIcon Path="Scribble.exe" ResourceIndex="1" />
              <com:MiscStatus OleMiscFlag="32"/>
              <com:Verbs>
                <com:Verb Id="0" DisplayName="&Edit" AppendMenuFlag="0" OleVerbFlag="2" />
                <com:Verb Id="1" DisplayName="&Open" AppendMenuFlag="0" OleVerbFlag="2" />
              </com:Verbs>
            </com:Class>
          </com:ExeServer>
          <!-- ProgId Registration -->
          <com:ProgId Id="Scribble.Document" CurrentVersion="Scribble.Document.1" />
          <com:ProgId Id="Scribble.Document.1" Clsid="7559FD90-9B93-11CE-B0F0-00AA006C28B3" />
        </com:ComServer>
      </com:Extension>
    </Extensions>
  </Application>
</Applications>

 

Дополнительная поддержка

 

В двух приведенных выше примерах рассмотрены наиболее распространенные случаи использования COM-сервера и поддержки документов OLE. Packaged COM также поддерживает дополнительные серверы, такие как Surrogates и TreatAs классы. Более подробную информацию вы можете найти в иерархии элементов манифеста пакета Windows 10 приложений на MSDN: https://docs.microsoft.com/uwp/schemas/appxpackage/uapmanifestschema/root-elements

 

Заключение

С UWP и Windows 10 приложения могут использовать несколько новых интересных функций, используя существующие вложения кода в таких областях, как COM. Благодаря платформе Desktop Bridge и усовершенствованиям инструментов, существующее программное обеспечение ПК теперь может быть частью экосистемы UWP и использовать тот же набор новых функций платформы и возможностей операционной системы.

Для получения дополнительной информации о Desktop Bridge посетите Windows Dev Center.

Готовы ли вы отправить свое приложение в Windows Store? Дайте знать!



Exception: Object reference not set to an instance of an object.
Posted on 5. April 2017

Выпущены Windows 10 Creators Update и Creators Update SDK

Сегодня Microsoft открыли доступ к загрузке Windows 10 Creators Update и вместе с ним к Creators Update SDK. И сегодня выдающийся день для всех Windows разработчиков, чтобы получить SDK и начать создавать прекрасные приложения, которые будут использовать все преимущества новых возможностей платформы, чтобы доставить опыт, который вы и ваши пользователи будут любить.

Разработчики Microsoft прилагают много усилий, чтобы внедрять инновации в Windows и приподносят возможности этих инноваций разработчикам и пользователям Windows. Microsoft выпустила Windows 10 Anniversary Update всего лишь восемь месяцев назад, и уже видим, что более 80% компьютеров под управлением Windows 10 используют Anniversary Updatе (версия 1607) или более поздние версии.

 

Можно смело сказать, что с сегодняшним выпуском обновления Windows 10 Creators Update, пользователи снова быстро перейдут к последней и лучшей версии Windows. Для разработчиков это самое время, чтобы подготовиться к следующей волне.

Что нового в Creators Update

Вот лишь несколько новых и мощных возможностей в Creators Update:

 

  • Улучшения визуального слоя (эффекты, анимация и переходы) и повышение количества эффектов на уровень XAML с улучшенными элементами управления, которые упрощают добавление улучшений в приложения
  • Улучшения рукописного ввода, в том числе анализ рукописного ввода и улучшенное распознавание, а также панель инструментов с новыми эффектами (наклонный карандаш) и инструменты (транспортир для рисования кривых и кругов)
  • Более мощные и гибкие API для Surface Dial
  • Значительные усовершенствования Bluetooth с Bluetooth LE GATT Server, периферийный режим для более простого обнаружения устройств Windows и поддержка слабосвязанных устройств Bluetooth (эти устройства с низким энергопотреблением не обязательно должны быть явно сопряжены)
  • Более эффективное взаимодействие с пользователем посредством уведомлений, которые теперь можно сгруппировать по приложению, привязать к данным и содержать встроенные элементы управления, такие как индикаторы выполнения
  • Улучшения  Desktop Bridge, чтобы как можно быстрее принести приложения Win32 в Windows 10 и Windows Store
  • Возможность иметь бесшовные перекрестные устройства с Project Rome и недавно выпущенным Android SDK для Project Rome
  • Более целенаправленное и эффективное привлечение пользователей через приложения Facebook с функцией установки приложения с помощью Windows SDK для Facebook
  • Улучшения фонового выполнения, которые позволяют задачам делать больше с увеличенной памятью и временем
  • Улучшенная безопасность приложений с возможностью интеграции Windows Hello
  • Улучшение аналитики приложений с помощью обновленного Dev Portal, который позволяет управлять несколькими приложениями и улучшенными отчетами
  • Более быстрое скачивание и обновление приложений с возможностью компоновки пакетов приложений и потоковой установки
  • Повышенная эффективность и гибкость благодаря новой возможности Visual Studio 2017 для одновременного запуска двух разных версий SDK на одном устройтсве
  • Значительные улучшения Windows Console и Windows Subsystem для Linux, которые позволяют использовать наиболее часто используемые платформы Linux, инструменты и сервисы
  • Возможность для разработчиков игр достигать новых аудиторий путем публикации игр UWP на Xbox через программу Xbox Live Creators
  • Удивительные 3D-впечатления от HoloLens и новых гарнитур смешанной реальности через платформу Windows Mixed Reality
     Здесь вы можете найти более полный список вместе с последней документацией разработчика.
     Microsoft расскажет все эти (и гораздо больше) на конференции Microsoft Build 2017, включая те вещи, которые мы запланировали на будущее.
     
     Начать сейчас
     Для начала ознакомьтесь с записью Clint Rutkas, чтобы узнать, как получить последнюю версию Visual Studio и SDK. Посмотрите запись блога Даниэля Джейкобсона, чтобы рассмотреть некоторые улучшения для разработчиков UWP в Visual Studio 2017.

 



Exception: Object reference not set to an instance of an object.
Posted on 4. April 2017

Объявление о UWP Community Toolkit 1.4

На сегодняшний день UWP Community Toolkit обновляется 4й раз. В предыдущей версии были добавлены новые элементы управления, поэтому в текущей версии разработчики концентрировались на стабилизации и улучшении существующих элементов управления и служб.

Среди этих доработок: улучшенная доступность для всех элементов управления в соответствии с нашими правилами вклада. Теперь каждый элемент управления можно использовать с клавиатуры, мыши и сенсорного ввода. Разработчики также обеспечили, чтобы элементы управления предоставили достаточно информации для экранного диктора, чтобы сделать их совместимыми с программами чтения с экрана.

Также разработчики представили новый проект (и новый пакет NuGet) под названием Microsoft.Toolkit.Uwp.DeveloperTools. Цель этого проекта - предоставить инструменты поддержки для разработчиков. Для первой версии проекта мы начали с двух элементов управления:

  • FocusTracker: Может использоваться в вашем приложении для отображения информации о текущем сфокусированном элементе управления (имя, тип и т. д.). Это очень усилит доступность Вашего приложения.
  • AlignmentGrid: Может использоваться для отображения сетки, помогая вам выровнять элементы управления на своих страницах.

Инструменты разработчика не предназначены для развертывания с вашим приложением,но используются во время разработки, чтобы улучшить общее качество вашего приложения.

 

 

Наряду с вышеперечисленными улучшениями и стабилизациями, также добавили новые функции в этой версии. Вот несколько основных дополнений:

1. Carousel: Новый элемент управления, показывающий элементы в списке, где выбранный элемент всегда находится в центре, а другие элементы - вокруг него. Это влияет не только на контент, но и на изменения компоновки, поэтому он может автоматически адаптироваться к различным форм-факторам. Carousel может быть горизонтальным или вертикальным.

2. ViewExtensions: ApplicationViewExtensions, StatusBarExtensions и TitleBarExtensions предоставляют декларативный способ установки свойств AppView, StatusBar и TitleBar из XAML.

3. NetworkHelper: дает  возможность отслеживать изменения в сетевом соединении и позволяет пользователям запрашивать сетевую информацию без дополнительных поисков.

4. Saturation: обеспечивает поведение, позволяющее выборочно насыщать элемент XAML. Мы также представили CompositionBehaviorBase, чтобы облегчить создание новых композиционных поведений (Blur теперь использует это).

5. Поддержка API потоковой передачи Twitter: службе Twitter не хватало поддержки потокового сервиса Twitter; Мы добавили поддержку живых твитов и событий.

6. Поле поиска для образца приложения: новое приложение образец позволяет вам искать образец непосредственно из главного меню.

 

Это лишь частичный список изменений в UWP Community Toolkit 1.4. Полный обзор нововведений в версии 1.4 можно найти в выпуске GitHub.

Вы можете начать работу, следуя этим инструкциям, или просмотреть последние функции, установив пример приложения UWP Community Toolkit из Windows Store.

Напоминаем, что набор инструментальных средств можно использовать в любом приложении (на ПК, Xbox One, мобильном устройстве, HoloLens и устройствах Surface Hub), ориентированном на Windows 10 November Update (10.0.10586) или выше. Несколько функций, которые доступны для более новых обновлений ОС, четко обозначены в документации и в примере приложения.

Если вы хотите внести свой вклад, присоединяйтесь к проекту на GitHub!



Exception: Object reference not set to an instance of an object.
Posted on 3. April 2017

Desktop Bridge: Creators Update

В Creators Update добавлены новые функции для разработчиков приложений и конечных пользователей. Новые возможности помогут разработчиками выпустить приложения для пользователей с богатым опытом.


Перенос пользователей и данных

Пользователям предлагается загрузить версию своего настольного приложения из магазина. Если у пользователя уже есть предыдущая версия приложения для рабочего стола, переход будет максимально плавным.

В результате Creators Update будет обеспечивать плавный переход вместе с некоторыми рекомендациями для разработчиков приложений.

Подробный пост по этой теме с образцами кода см. в этой пошаговой инструкции.


Переход пользователя: контакты панели задач и иконки на начальном экране

Многие пользователи обычно прикрепляют свои любимые или наиболее часто используемые приложения к панели задач или меню «Пуск», чтобы быстро получать доступ к приложениям.

С помощью Creators Update разработчики приложений могут повторно перенаправить значки панели задач и иконки начальной панели на версии приложений из Windows Store.


Пользовательский переход: ассоциации типов файлов и обработчики протоколов

Пользователь может выбрать свое любимое приложение по умолчанию для заданного типа файла или протокола. С Creators Update разработчики могут также изменить выбор пользователя, чтобы использовать версию Windows Store того же приложения.


Перенос данных

Для наилучшей практики рекомендуется, чтобы разработчики попробовали перенести предыдущие данные пользователя из настольного приложения при первом запуске версии магазина того же приложения.

Пользователям понравится, что они смогут возобновить работу с того места, где остановились.


Переход пользователя: удаление предыдущего настольного приложения

В качестве примера наилучшей практики, разработчики должны предлагать удалить предыдущее настольное приложение после первого запуска версии приложения из Windows Store. Это помогает избежать путаницы пользователей и потенциального повреждения данных пользователей.

Помните, что пользователь может отказаться от удаления предыдущего настольного приложения, поэтому предыдущая и сохраненная версия приложения могут работать вместе. Разработчик приложения должен решить, следует ли блокировать запуск версии Windows Store-приложения до тех пор, пока не будет удалено предыдущее настольное приложение.


Проводник Windows Explorer: предварительный просмотр, эскизы, подробные свойства и группировка по типу

Другой акцент в выпуске Creators Update - удовлетворенность пользователей.

Версии магазина настольных приложений теперь могут воспользоваться преимуществами проводника Windows Explorer, чтобы побудить пользователей чаще заниматься своими приложениями.


Обработчик предварительного просмотра

Обработчики предварительного просмотра запускаются, когда выбран элемент для отображения легкого, богатого, нередактируемого предварительного просмотра содержимого файла в панели чтения. Вы можете сделать это, не запуская приложение, связанное с файлом.

 

Пример XML:

<Extensions>
   <Extension Category="windows.fileTypeAssociation">
      <FileTypeAssociation Name="Foo">
         <SupportedFileTypes>
            <FileType>.bar</FileType>
         </SupportedFileTypes>
         <DesktopPreviewHandler CLSID="20000000-0000-0000-0000-000000000001" />
      </FileTypeAssociation>
   </Extension>
</Extensions>

Обработчик эскизов

В проводнике Windows Explorer эскизы могут предоставляться только для чтения внутри файлов, когда для просмотра установлены иконки среднего размера или выше.

Пример XML:

 

 <Extensions>
   <Extension Category="windows.fileTypeAssociation">
      <FileTypeAssociation Name="Foo"> 
         <SupportedFileTypes> 
            <FileType>.bar</FileType>
         </SupportedFileTypes> 
         <ThumbnailHandler CLSID="20000000-0000-0000-0000-000000000001" Cutoff="20x20" Treatment="Video Sprockets" /> 
      </FileTypeAssociation> 
   </Extension>
 </Extensions> 

 

 

Обработчик свойств

Служба Microsoft Windows Search использует обработчики свойств для извлечения значений свойств из элементов и использует системную схему свойств, чтобы определить, как нужно индексировать определенное свойство. Кроме того, обработчики свойств могут использоваться для предоставления более подробной информации об определенном файле в диалоговом окне свойств или в области сведений.

 

Пример XML:

<Extensions>
   <Extension Category="windows.fileTypeAssociation">
      <FileTypeAssociation Name="Foo">
         <SupportedFileTypes>
            <FileType>.bar</FileType>
         </SupportedFileTypes>
         <DesktopPropertyHandler CLSID="20000000-0000-0000-0000-000000000001" />
      </FileTypeAssociation>
   </Extension>
</Extensions>

 

Группировка файлов по их «типу»

Разработчики могут указать, какими являются «типы» их файлов, которые позволят конечным пользователям группировать свои файлы по «типу» в Windows Explorer.

 

Пример XML:

<uap:Extension Category="windows.fileTypeAssociation">
   <uap:FileTypeAssociation Name="scoobydoo">
      <uap:SupportedFileTypes>
         <uap:FileType>.m4a</uap:FileType>
         <uap:FileType>.mta</uap:FileType>
      </uap:SupportedFileTypes>
      <rescap:KindMap>
         <rescap:Kind value="Item" />
         <rescap:Kind value="Communications" />
         <rescap:Kind value="Task" />
      </rescap:KindMap>
   </uap:FileTypeAssociation>
</uap:Extension>

 

Поддержка установки пользовательских шрифтов приложениями

Приложения Microsoft Windows Store могут совместно использовать свои пользовательские шрифты в других приложениях Windows. Это делается путем внесения нескольких простых изменений в манифест приложения.

Пример XML:

<Extensions>
   <uap4:Extension Category="windows.sharedFonts">
      <uap4:SharedFonts>
         <uap4:Font File="Fonts\JustRealize.ttf" />
         <uap4:Font File="Fonts\JustRealizeBold.ttf" />
      </uap4:SharedFonts>
   </uap4:Extension>
</Extensions>

Общедоступная внепроцессная поддержка COM-сервера, также известная как Packaged COM

Теперь разработчики могут добавить поддержку внепроцессных расширений COM и OLE для хранения версий магазина настольных приложений. Эта технология называется Packaged COM. Исторически настольные приложения создавали COM-расширения, которые могли использовать другие приложения. Тем не менее, в выпуске Windows 10 Anniversary Update Desktop Bridge приложение не может выставлять свои точки расширения COM, поскольку все записи реестра находятся в его частном хранилище и не отображаются публично в системе. Packaged COM предоставляет механизм для записей COM и OLE, объявляемых в манифесте, в то время как базовая подсистема обрабатывает активацию объектов, сохраняя при этом беспроигрышную установку.

 

Правила брандмауэра

Когда приложениям требуется, чтобы пользователи добавляли приложение в качестве исключения для брандмауэра, это приводит к путанице пользователей, дополнительные пользовательские клики и / или отказ в исключении по ошибке.

Windows Security Alert пытается обучить пользователя, но это является еще одним решением, которое пользователь должен сделать, прежде чем он сможет использовать свое приложение.

 

Кроме того, последующие обновления приложений приведут к тому, что откроется один и тот же диалог и пользователь будет проходить через один и тот же поток.

С помощью Creators Update разработчики могут заранее зарегистрироваться для правил брандмауэра, поэтому пользователям не нужно делать выбор в пользу брандмауэра до запуска своих приложений (в том числе после последующих обновлений приложений).

 

Пример XML:

<Extensions>
   <desktop2:Extension Category="windows.firewallRules">
      <desktop2:FirewallRules Executable="foo.exe">
         <desktop2:Rule Direction="in" IPProtocol="TCP" Profile="all" />
         <desktop2:Rule Direction="in" IPProtocol="UDP" LocalPortMin="1337" LocalPortMax="1338" Profile="domain" />
         <desktop2:Rule Direction="in" IPProtocol="UDP" LocalPortMin="1337" LocalPortMax="1338" Profile="public" />
         <desktop2:Rule Direction="out" IPProtocol="UDP" LocalPortMin="1339" LocalPortMax="1340" RemotePortMin="15" RemotePortMax="19" Profile="domainAndPrivate" />
         <desktop2:Rule Direction="out" IPProtocol="GRE" Profile="private" />
      </desktop2:FirewallRules>
   </desktop2:Extension>
</Extensions>

 

Другие важные функции

 

  • Приложения могут быть предварительно установлены
  • Поддержка интерфейса прикладного программирования для обмена сообщениями (MAPI)
  • Windows App Certification Kit теперь включает тестовые примеры для приложений Desktop Bridge
  • Использование флага URL позволяет приложениям напрямую открывать файлы по URL-адресу вместо загрузки локализованной в кеш-версии файла

 



Exception: Object reference not set to an instance of an object.
Posted on 28. March 2017

Microsoft Store Services SDK запускают межстраничные баннера

Microsoft анонсировала поддержку межстраничных баннеров в Microsoft Store Services SDK. Межстраничные баннерные объявления стали одним из лучших запросов функциональных возможностей центра разработки для Windows, после того, как мы ввели поддержку межстраничных видеообъявлений.
Что такое межстраничные баннеры?
Межстраничные баннеры - очень популярный способ монетизации приложений и игр, поскольку они предлагают более высокие эффективные цены за тысячу показов, чем стандартные баннерные объявления. Они могут зарабатывать до 8-10 раз больше стандартных баннеров по следующим причинам:

  • Полное внимание пользователей: Полноэкранные объявления полностью привлекают внимание пользователей.
  • Большая площадь: Увеличенная в объеме площадь предоставляет рекламодателям больше возможностей показывать контент, который привлекает потенциальных клиентов.
  • Взаимодействие с пользователем: Межстраничные объявления требуют от пользователя перехода от рекламного объявления и, следовательно, его вовлеченность всегда высока.

Пример межстраничного объявления для мобильных устройств

 

Пример межстраничного объявления для планшетных/ ПК устройств

Этот новый формат объявлений доступен в последней версии Microsoft Store Services SDK для приложений универсальной платформы Windows (UWP) для Windows 10.
Если Вы еще не начали монетизировать свое приложение или игру с объявлениями с помощью Microsoft Store Services SDK, сейчас подходящее время начать. Cотрудники Microsoft подобрали несколько рекламных сетей, чтобы межстраничные баннерные объявления могли приносить хороший доход разработчикам, и также продолжают работу с большим количеством сетей, чтобы увеличить возможности заработка этого и других форматов рекламы. Чтобы узнать больше о вариантах добавления объявлений в Ваши приложения с помощью данного SDK, ознакомтесь с этой статьей.

Как начать?
Поскольку сейчас проходит бета-тестирование, пожалуйста, пишите по адресу aiacare@microsoft.com  ,чтобы отправить свое приложение или игру в бета-версию. После того, как будет созданный межстраничный рекламный блок, вы можете продолжить используя следующие шаги, чтобы включить его в свое приложение или игру.

Чтобы добавить межстраничное объявление в свою игру или приложение, используйте класс InterstitialAd из Microsoft Store Services SDK. Если вы уже знакомы с инструкциями по добавлению межстраничных видеообъявлений в игру или приложение, процесс добавления межстраничных баннерных объявлений будет практически идентичным. Единственное различие состоит в том, что при вызове метода RequestAd для извлечения объявления вы указываете тип AdType.Display для типа объявления (это новое значение перечисления в последней версии SDK).

 

using Microsoft.Advertising.WinRT.UI;
…
…
// declare the object and set your app parameters
InterstitialAd myInterstitialAd = null;
string myAppId = "d25517cb-12d4-4699-8bdc-52040c712cab";
string myAdUnitId = "11389925";
…
…
// instantiate the Ad
myInterstitialAd = new InterstitialAd();
myInterstitialAd.AdReady += MyInterstitialAd_AdReady;
myInterstitialAd.ErrorOccurred += MyInterstitialAd_ErrorOccurred;
myInterstitialAd.Completed += MyInterstitialAd_Completed;
myInterstitialAd.Cancelled += MyInterstitialAd_Cancelled;
…
…
// request for the ad a few seconds before you intend to display
myInterstitialAd.RequestAd(AdType.Display, myAppId, myAdUnitId);
…
…
// display the ad
if (InterstitialAdState.Ready == myInterstitialAd.State)
{
    myInterstitialAd.Show();
}
…
…

Подробные инструкции и примеры кода для добавления межстраничного баннера или межстраничного видеообъявления в игру или приложение, смотрите в этой статье.

Какие практические методы наиболее эффективны?

Из-за большего размера межстраничные баннеры требуют больше пропускной способности на пользовательских устройствах, чем стандартные баннерные объявления. Для этого необходимо использовать метод RequestAd для получения межстраничного баннерного объявления за 3-4 секунды до его отображения. Чтобы максимально использовать межстраничные объявления в ваших играх или приложениях, ознакомьтесь с руководящими принципами межстраничных объявлений.



Exception: Object reference not set to an instance of an object.