2014-01-21 5 views
5

私のデフォルト広告としてInnerActiveを使用して、私のWindows Phoneアプリを提供します。私は2013年6月からそれを使用しています。私の年末の分析では、InnerActive広告が私のアプリケーションクラッシュの主な原因であることに気付きました。最悪の部分は、私はコードを制御できないということです。私は既にInneractive Adsをリクエストするすべての操作の周りに "try catch"を配置しました。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); 
    } 
} 

このスタックトレースに役立つかもしれないが、これは私がコントロールしていないコードであるに留意してください。

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 

ソリューション: "Application_UnhandledException" 方法を見つけて、でそれを置き換えるApp.xaml.csファイルで

:Soonts提案後

、これは私が思い付いたものです:

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

あなたがより良い選択肢を見つけたら今すぐ。

答えて

1

まず、InnerActiveに連絡して、ソフトウェアの修正を依頼してください。それは彼らの責任です。

一方、問題の再現方法がわかっている場合は、次のように試すことができます。 Exception.StackTrace内の "Inneractive.Ad.InneractiveAdControl"のハンドラ検索で、未処理の例外をすべて購読する(Application.UnhandledExceptionで始まり、AppDomain.UnhandledExceptionとTaskScheduler.UnobservedTaskExceptionもある)必要に応じて内部的なバナーを非表示または再読み込みします。

+0

もう一度お返事ありがとうございます。私はそれを試してみる。これはちょうどテストする頸部の痛みになるでしょう。 –