【问题标题】:How to get the event when clicking the microsoft ad in uwp在uwp中点击微软广告时如何获取事件
【发布时间】:2018-12-28 07:31:41
【问题描述】:

我正在使用 Microsoft Advertising SDK for xaml。我的应用现在可以展示广告了。但我想知道用户点击广告时的事件。

以下事件均无效。

    <ads:AdControl x:Name="adAd" Grid.Row="3" ApplicationId="" AdUnitId=""
         Width="300" Height="250" AdRefreshed="OnAdRefreshed" 
         ErrorOccurred="OnErrorOccurred"
         Tapped="OnAdTapped" OnPointerDown="OnAdPointerDown" 
         PointerPressed="OnAdPointerPressed"/>

【问题讨论】:

  • AdControl.IsEngagedChanged 应该可以工作。而且我看不出为什么您的代码示例中的 3 个事件“不起作用”。
  • Not work 是指当我点击广告时,Tapped, OnPointerDown, PointerPressed 事件不会触发。而且 IsEngagedChanged 也不会触发。
  • 嗨@Vincent 我已经编辑了答案,请检查。

标签: uwp windows-store-apps uwp-xaml ads


【解决方案1】:

以下事件均无效。

实际上,您不能直接使用上述事件,因为它会被广告WebView中显示的超链接点击忽略。

如果你想检测AdControl的点击事件,你可以使用一些间接的方式使用VisualTreeHelper来获取ADWebView并监听它的NavigationStarting事件

public static T MyFindListBoxChildOfType<T>(DependencyObject root) where T : class
{
    var MyQueue = new Queue<DependencyObject>();
    MyQueue.Enqueue(root);
    while (MyQueue.Count > 0)
    {
        DependencyObject current = MyQueue.Dequeue();
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(current); i++)
        {
            var child = VisualTreeHelper.GetChild(current, i);
            var typedChild = child as T;
            if (typedChild != null)
            {
                return typedChild;
            }
            MyQueue.Enqueue(child);
        }
    }
    return null;
}


private void AdTest_AdRefreshed(object sender, RoutedEventArgs e)
{
    var ADWebView = MyFindListBoxChildOfType<WebView>(AdTest);
    ADWebView.NavigationStarting += ADWebView_NavigationStarting;
}

private void ADWebView_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
    System.Diagnostics.Debug.WriteLine("AD clicked---------------");
}

为避免页面导航干扰,请在OnNavigatedFrom覆盖方法中取消订阅NavigationStarting

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    base.OnNavigatedFrom(e);
    ADWebView.NavigationStarting -= ADWebView_NavigationStarting;
}

【讨论】:

  • 搜索了所有文档,到现在为止,这几乎是最好的答案了,虽然还是有一点小问题。
  • 尽管这是一个“解决方案”,但它是一个过于复杂的解决方案,而 OP 主要是在寻找单个事件处理程序。如果我们不得不求助于这个样板代码来处理单击,那么 UWP 可能存在一些潜在的问题。
猜你喜欢
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
相关资源
最近更新 更多