Seit einiger Zeit biete ich meine Webseite auch in einem mobilen Modus an. Heute bin ich mal durch meine Werbeaccounts gesurft und habe festgestellt, dass Google im AdSense-Programm auch mobile Werbung anbietet. Dabei muss auf dem ausliefernden Server (also dort, wo der mobile Content generiert wird) ein Skript von Google hinterlegt werden, welches in den Sprachen PHP, ASP, CGI/Perl sowie JSP verfügbar ist. Das Skript holt die Werbung zunächst auf den ausliefernden Server und schleift diese dann an das Endgerät durch. Leider hat das Skript ein Problem: Bei restriktiven Settings in PHP liefert es keine Werbung mehr aus. Konkret geht es um die Einstellung “allow_url_fopen” in der php.ini. Ist diese auf 0 oder Off gestellt, kann das Skript keine Daten vom Google-Server holen und ist damit nutzlos. Dies kann jedoch mittels Curl oder fsockopen behoben werden.

Ein paar Hinweise zur Mobilen Werbung:

  • Die Abrechnung erfolgt auf CPC-Basis (Cost-per-Click), d.h. man verdient nur Geld, wenn die Nutzer auf die Werbung klicken. ( Google AdSense Hilfe )
  • Die Mobile Werbung wird nur auf mobilen Endgeräten angezeigt, daher sollte man entweder den richtigen User-Agent senden oder direkt mit dem Handy drauf surfen. ( Google AdSense Hilfe )

Zunächst braucht man den generierten Werbecode von Google AdSense. Dazu loggt man sich zunächst ein. Nach einem Klick auf “AdSense-Setup” gelangt man über den Menüpunkt “AdSense für mobilen Content” in das Menü für die mobile Werbung. Dort muss man ein paar Einstellungen treffen und zum Schluss wird ein Skript daraus generiert. Da ich derzeit ausschließlich PHP für Webdevelopment verwende, habe ich PHP gewählt.

Google schreibt hierzu in der Google AdSense Hilfe , dass allow_url_fopen und allow_url_include in der Serverkonfiguration aktiviert werden müssen, um die Werbung zu bekommen, was ich ganz anders sehe. Man kann ja andere Wege zum abrufen verwenden ;) So wurde ganz unten folgendes generiert:

1
2
3
4
5
6
7
$google_ad_handle = @fopen(google_get_ad_url(), 'r');
if ($google_ad_handle) {
  while (!feof($google_ad_handle)) {
    echo fread($google_ad_handle, 8192);
  }
  fclose($google_ad_handle);
}

Dieser Code wird nun ersetzt durch:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
if (ini_get('allow_url_fopen') == 0) {
    if(function_exists(curl_init)) {
        $ch=curl_init();
        @curl_setopt($ch, CURLOPT_URL, google_get_ad_url());
        @curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        @curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        $googledata = curl_exec ($ch);
        curl_close ($ch);
    } else {
        $fsockurl = @parse_url(google_get_ad_url());
        $fsock = @fsockopen($fsockurl['host'], 80, $errno, $errstr, 30);
        @fputs($fsock, "GET " . $fsockurl['path'] . " HTTP/1.0\r\n");
        @fputs($fsock, "HOST: " . $fsockurl['host'] . "\r\n");
        @fputs($fsock, "Connection: close\r\n\r\n");
        while (!@feof($fsock)) {
            if ($get_info) {
                $googledata = @fread($fsock, 1024);
            } else {
                if (@fgets($fsock, 1024) == "\r\n") {
                    $get_info = true;
                }
            }
        }
        @fclose($fsock);
    }
} else {
    $google_ad_handle = @fopen(google_get_ad_url(), 'r');
    if ($google_ad_handle) {
    while (!feof($google_ad_handle)) {
        $googledata = fread($google_ad_handle, 8192);
    }
    fclose($google_ad_handle);
    }
}
echo $googledata;

Was macht der Code? Zunächst wird geprüft, ob allow_url_fopen zugelassen ist. Wenn dies der Fall ist, dann wird der originale Code genutzt. Wenn nicht, dann wird zunächst geprüft ob Curl verfügbar ist. Wenn ja, wird damit die Werbung abgeholt, wenn nein, wird ein Socket aufgebaut und mit ein paar RAW-Befehlen über die Socketfunktionen von PHP die benötigten Daten abgeholt. Somit sollte es eigentlich immer möglich sein, an die Werbung zu kommen.

Ich würde das nur selektiv einsetzen, da es ja doch zusätzlicher Traffic für den Besucher ist. Ich habe dies daher mit meiner layerads-Implementierung verbunden.

PS: Wer es nicht findet: Den mobilen Modus meiner Webseite kann man in der mobilen Ansicht oben in der Mitte über “ Exit Mobile Edition” wieder verlassen.

Edit: Ich habs gerade in der mobilen Version nicht eingebaut, da ich das Tutorial in nen Plugin umforme.