Настройка достижения Facebook от Flash - PullRequest
0 голосов
/ 09 ноября 2011

Я настраиваю достижения для игры, над которой я работаю. Flash отправляет команду, чтобы разблокировать достижение, а также URL-адрес достижения. На моем сервере есть код, который передает порядок отображения и URL-адрес достижения из Flash в Facebook. Когда я нажимаю кнопку, чтобы разблокировать достижение во Flash, оно успешно разблокируется в моей игре, и я вижу его на тикере. Когда я нажимаю кнопку внутри iFrame, чтобы разблокировать достижение, оно не разблокируется. Запись $ result вернет 1, но не будет отображаться в тикере или считаться разблокированной.

postachievement.php

<?php
    include 'src/facebook.php';
    $facebook = new Facebook(array(
    'appId'  => '[APP_ID]',
    'secret' => '[APP_SECRET]', ));

     $access_token = $facebook->getAccessToken();

     //$uid = $facebook->getUser();
     $uid = "[Static ID for Testing]";

     $achievement = $_POST['achievement'];

     $achievement_URL = 'https://graph.facebook.com/' . $uid . '/achievements';
     $achievement_result = https_post($achievement_URL,
         'achievement=' . $achievement
         . '&access_token=' . $access_token);
         error_log($result);

         function https_post($uri, $postdata) 
     {
        $ch = curl_init($uri);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
        $result = curl_exec($ch);
        curl_close($ch);

        return $result;
     }

Achievements.as

package Facebook
{
public class Achievements
{
    public static var trophy:Achievements;
    private static var achievement:String;              // URL of the Achievement

    public function Achievements()
    {
        trophy = this;
    }

    public static function testAchievement1():void
    {
        achievement     = "https://(URL)/zombies/game/achievements/test6.html";
        Database.data.giveAchievement(achievement);
    }

    public static function testAchievement2():void
    {
        achievement     = "https://(URL)/zombies/game/achievements/test7.html";
        Database.data.giveAchievement(achievement);
    }

    public static function testAchievement3():void
    {
        achievement     = "https://(URL)/zombies/game/achievements/test8.html";
        Database.data.giveAchievement(achievement);
    }   

    public static function testAchievement4():void
    {
        achievement     = "https://(URL)/zombies/game/achievements/test9.html";
        Database.data.giveAchievement(achievement);
    }   

    public static function testAchievement5():void
    {
        achievement     = "https://(URL)/zombies/game/achievements/test10.html";
        Database.data.giveAchievement(achievement);
    }   
}
}

Некоторые фрагменты из класса Database, в которых рассматриваются достижения.

Database.as

// Give Achievement
private static var achieveLoader:URLLoader = new URLLoader();
private static var achieveRequest:URLRequest = new URLRequest;
achieveRequest.url  = "https://(URL)/zombies/game/postachievement.php";

    // Grant Player an Achievement
public function giveAchievement(_achievement:String):void
{
    var vars:URLVariables = new URLVariables();
    vars.achievement        = _achievement;

    achieveRequest.method = URLRequestMethod.POST;
    achieveRequest.data = vars;
    achieveLoader = new URLLoader();
    achieveLoader.dataFormat = URLLoaderDataFormat.TEXT;
    achieveLoader.load(achieveRequest);
}

1 Ответ

0 голосов
/ 10 ноября 2011

Это получение токена доступа игрока, а не приложений.Я получил токен доступа приложения и статически поместил его в переменную.Пока токен доступа приложения не изменится, это будет работать.

...