2014-01-21 1 views
5

Я использую InnerActive, поскольку мое объявление по умолчанию предоставляет мои приложения для Windows Phone. Я использую его с июня 2013 года, и в своем анализе на конец года я понял, что объявления InnerActive являются основным источником моих сбоев в работе приложений. Хуже всего то, что это код, я не контролирую. Я уже размещал «try catch» вокруг каждой операции, которая запрашивает Inneractive Ads.Inneractive Ads вызывают много сбоев приложений (Windows Phone)

Есть ли у кого-нибудь идеи, как я могу решить эту проблему?

Где код я использую для запроса объявлений:

private void LoadInnerActiveAds() 
{ 
    try 
    { 
     if (DeviceNetworkInformation.IsNetworkAvailable) 
     { 
      // Watch location 
      if (_allowAdLocationTracker) 
      { 
       IaLocationClass iaLocation = new IaLocationClass(); 
       iaLocation.Done += new EventHandler<IaLocationEventArgs>(InnerActiveLocation_Done); 
       iaLocation.StartWatchLocation(); 
      } 

      optionalParams = new Dictionary<InneractiveAd.IaOptionalParams, string>(); 
      //optionalParams.Add(InneractiveAd.IaOptionalParams.Key_Gender, "m"); 
      optionalParams.Add(InneractiveAd.IaOptionalParams.Key_Ad_Alignment, InneractiveAd.IaAdAlignment.CENTER.ToString()); 
      optionalParams.Add(InneractiveAd.IaOptionalParams.Key_OptionalAdWidth, "480"); 
      optionalParams.Add(InneractiveAd.IaOptionalParams.Key_OptionalAdHeight, "80"); 
     } 

     //Show Add Banner. Remarks: pay attention to use Application Id from NAX 
     //naxAd.Childred.Count()==0 => just to add one banner control on a page. Without this, code would add as many banners as you navigate to page where banner is placed 
     if (optionalParams != null && AdsUIContainer.Children.Count == 0) 
     { 
      InneractiveAd iaBanner = new InneractiveAd(AdsAppId, InneractiveAd.IaAdType.IaAdType_Banner, 30, optionalParams); 
      iaBanner.AdFailed += new InneractiveAd.IaAdFailed(InneractiveAd_AdFailed); 

      Deployment.Current.Dispatcher.BeginInvoke(() => { UpdateUI(iaBanner); }); 
     } 
    } 
    catch (Exception ex) 
    { 
     InneractiveAd_AdFailed(ex); 
    } 
} 

Это StackTrace может помочь, но имейте в виду, что это код, который я не контролируем.

Frame    Image                Function                                                               Offset         
0        system_xml_ni        System.Xml.XmlTextReaderImpl.Throw                                     0x00000036     
1        system_xml_ni        System.Xml.XmlTextReaderImpl.ParseDocumentContent                      0x00000438     
2        system_xml_ni        System.Xml.XmlTextReaderImpl.Read                                      0x00000036     
3        system_xml_ni        System.Xml.XmlReader.ReadToFollowing                                   0x0000003c     
4        inneractive_ad_ni    Inneractive.Ad.InneractiveAdControl.ParseCPDXml                        0x0000007c     
5        inneractive_ad_ni    Inneractive.Ad.InneractiveAdControl.webClient_UploadStringCompleted    0x000000aa     
6        system_net_ni        System.Net.WebClient.OnUploadStringCompleted                           0x00000010     
7        system_net_ni        System.Net.WebClient.UploadStringOperationCompleted                    0x00000034 

Решение:

После Soonts предложение, это то, что я придумал:

В App.xaml.cs файле найти метод "Application_UnhandledException" и заменить его :

// Code to execute on Unhandled Exceptions 
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
{ 
    if (e.ExceptionObject.StackTrace.Contains("Inneractive.Ad.InneractiveAdControl")) 
    { 
     // Recover from the error 
     e.Handled = true; 
     return; 
    } 

    if (Debugger.IsAttached) 
    { 
     // An unhandled exception has occurred; break into the debugger 
     Debugger.Break(); 
    } 
} 

Пожалуйста, позвольте мне k теперь, если вы найдете лучшие альтернативы.

ответ

1

Прежде всего, обратитесь в InnerActive, чтобы сообщить им, чтобы исправить их программное обеспечение. Это их ответственность.

Между тем, если вы знаете, как воспроизвести проблему, вы можете попробовать следующее. Подпишитесь на все необработанные исключения (начиная с Application.UnhandledException, также есть AppDomain.UnhandledException и TaskScheduler.UnobservedTaskException), в поиске обработчиком «Inneractive.Ad.InneractiveAdControl» в Exception.StackTrace, если он найден - игнорирует исключение, и, возможно, скрывать или перезагружать встроенный баннер.

+0

еще раз спасибо. Я это попробую. Это будет боль в области шеи для тестирования. –