2014-01-21 12 views
5

Ich verwende InnerActive als meine Standardanzeige für meine Windows Phone-Apps. Ich benutze es seit Juni 2013 und an meinem Ende des Jahres Analyse erkannte ich InnerActive Anzeigen sind meine Hauptquelle für meine App-Abstürze. Das Schlimmste ist, es ist Code, über den ich keine Kontrolle habe. Ich habe bereits einen Versuch unternommen, um jede Operation, die Inneractive Ads anfordert, zu versuchen.Inneractive Ads verursachen eine Menge App-Abstürze (Windows Phone)

Hat jemand eine Idee, wie kann ich dieses Problem lösen?

Wo ist der Code, den ich verwende, um die Anzeigen zu beantragen:

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); 
    } 
} 

Diese stacktrace helfen könnten, aber im Kopf behalten Code ist dies ich nicht kontrollieren.

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 

Lösung:

Nach Soonts Vorschlag, das ist, was ich kam mit:

In App.xaml.cs Datei "Application_UnhandledException" Methode suchen und ersetzen Sie es mit :

// 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(); 
    } 
} 

Bitte lassen Sie mich k jetzt, wenn Sie bessere Alternativen finden.

Antwort

1

Kontaktieren Sie zuerst InnerActive und sagen Sie ihnen, sie sollten ihre Software reparieren. Es ist ihre Verantwortung.

In der Zwischenzeit, wenn Sie wissen, wie Sie das Problem reproduzieren, können Sie versuchen, folgen. Abonnieren Sie alle nicht behandelten Ausnahmen (starten Sie mit Application.UnhandledException, auch dort sind AppDomain.UnhandledException und TaskScheduler.UnobservedTaskException), in der Handlersuche nach "Inneractive.Ad.InneractiveAdControl" in der Exception.StackTrace, falls gefunden - ignorieren Sie die Ausnahme, und optional das inaktive Banner ausblenden oder neu laden.

+0

danke nochmal Soonts. Ich werde es ausprobieren. Dies wird nur ein Schmerz im Nacken sein, um zu testen. –