3

我制作了一个 android 应用程序,在 webview 中显示我的网页的一部分。问题是该网页有一些 AdSense 广告,并且不允许在应用程序中显示它们。所以问题是:有没有办法让它们在应用程序中不显示?

编码 :

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("http://androidomedia.com/angry-birds-space-walkthrough/");
    mWebView.setWebViewClient(new HelloWebViewClient());

}

   private class HelloWebViewClient extends WebViewClient {
       @Override
       public boolean shouldOverrideUrlLoading(WebView webview, String url)
       {
           webview.loadUrl(url);
           return true;
       }
       }
   @Override
   public boolean onKeyDown(int keyCode, KeyEvent event)
   {
       if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())
       {
           mWebView.goBack();
           return true;            
       }
       return super.onKeyDown(keyCode, event);

   }

}`

4

2 回答 2

1

假设内容是动态生成的,您可以在服务器端处理此问题。如果请求来自您的 Android 应用,只需让网络服务器不显示广告单元即可。Explicity 在 android 端设置用户代理并在构建模板时检查它。

于 2012-05-28T20:36:47.420 回答
0

首先,您需要将您的用户代理字符串设置为您可以轻松检测到的内容,如下所示:

mWebView.getSettings().setUserAgentString("AndroidWebView");

其次,在托管您网站的服务器上,您需要动态生成 Google 提供给您的脚本。如果您使用 ASP.NET 来托管您的网站,您可以执行以下操作:

protected void Page_Load(object sender, EventArgs e)
{

                //Ensure that the Adsense ad isn't loaded if the calling user is using a WebView
                if (Request.UserAgent.Contains("AndroidWebView"))
                {
                    return;
                }

                //Create the Google Adsense ad dynamically
                var sb = new StringBuilder();
                sb.AppendLine("google_ad_client = \"ca-pub-123456789\";");
                sb.AppendLine("/* Ad Name Here */");
                sb.AppendLine("google_ad_slot = \"123456785\";");
                sb.AppendLine("google_ad_width = 728;");
                sb.AppendLine("google_ad_height = 90;");
                sb.Append("//-->");

                var scriptTag = new HtmlGenericControl("script");
                scriptTag.Attributes.Add("type", "text/javascript");
                scriptTag.InnerHtml = sb.ToString();

                var scriptTag2 = new HtmlGenericControl("script");
                scriptTag2.Attributes.Add("type", "text/javascript");
                scriptTag2.Attributes.Add("src", "http://pagead2.googlesyndication.com/pagead/show_ads.js");

                phBigAd.Controls.Add(scriptTag);
                phBigAd.Controls.Add(scriptTag2);

    }

之后,将 PlaceHolder 添加到名为 phBigAd 的 ASPX 标记页面中,只要您希望广告出现在网站上:

<asp:PlaceHolder ID="phBigAd" runat="server" />

当然,在附加到 StringBuilder 时,您需要将 Adsense 代码替换为您自己的代码,但以上是您将采用的一般格式。

于 2012-10-18T02:49:01.107 回答