vendredi 27 février 2015

Facebook Scores API not working as expected

This issue can be related to: Facebook Scores API not publishing open graph stories


I post correctly scores (in graph explorer and activity log looks good), but something happens when I beat a friend´s score. I suppose Facebook should log something like "You beat your friend..." in the activity log, but instead of that, my activity logs clear completely. All the activity from that application is removed, and I can´t post more activity (if I do, an OG action or another score is not logged in the activity from that moment, in the code gives me a successful post).



#pragma mark Score
void Facebook::postScore(long score) {
this->setDirtyScore(score);
Request::requestForMyScore([=](int error, const Vector<GraphScore *> &scores){
if (!error) {
if (scores.size()) {
log("Score: old: %ld - new: %ld", scores.at(0)->getScore(), score);
if (scores.at(0)->getScore() < score) {
this->doPostScore(score);
} else {
this->clearDirtyScore();
}
} else {
//No score
this->doPostScore(score);
}
}
})->execute();
}

void Facebook::doPostScore(long score) {
Request::requestForPostScore(score, [=](int error, bool success){
if (success) {
this->clearDirtyScore();
}
})->execute();
}

void Facebook::setDirtyScore(long score) {
_data->set(FacebookDataDirtyScoreKey, score);
}

long Facebook::getDirtyScore() {
return _data->getLong(FacebookDataDirtyScoreKey);
}

void Facebook::clearDirtyScore() {
_data->clear(FacebookDataDirtyScoreKey);
}

Request *Request::requestForScores(const ScoresRequestCallback &callback) {
string appId = Session::getActiveSession()->getAppId();
CCASSERT(appId.length() > 0, "Request::requestForScores - check your code sir");
Request *request = new Request(appId + "/scores");
if (callback) {
RequestCallback wrapper = [=](int error, GraphObject *result){
Vector<GraphScore *> scores;
if (error == 0) {
scores = result->getPropertyAsList<GraphScore>("data");
}
callback(error, scores);
};
request->setCallback(wrapper);
}
request->autorelease();
return request;
}

Request *Request::requestForMyScore(const ScoresRequestCallback &callback) {
Request *request = new Request("me/scores");
if (callback) {
RequestCallback wrapper = [=](int error, GraphObject *result){
Vector<GraphScore *> scores;
if (error == 0) {
scores = result->getPropertyAsList<GraphScore>("data");
}
callback(error, scores);
};
request->setCallback(wrapper);
}
request->autorelease();
return request;
}

Request *Request::requestForPostScore(long score, const PostScoreRequestCallback &callback) {
Request *request = new Request("me/scores");
request->setMethod(Method::POST);
if (callback) {
RequestCallback wrapper = [=](int error, GraphObject *result){
callback(error, !error);
};
request->setCallback(wrapper);
}
ValueMap params;
params["score"] = utils::StringUtils::toString(score);
request->setParams(params);

return request;
}


Any suggestions? Seems to be a FB problem, but maybe I´m doing something wrong.


Aucun commentaire:

Enregistrer un commentaire