2012年5月10日木曜日

facebookアプリのAn active access token must be used to query information about the current user.エラーに悩まされる

facebookアプリを作っているのですが、またつまずいて、やっと解決したので、
それをご報告したいと思います。

今作ってるアプリは、
ログイン⇒ユーザーへの認証⇒自動投稿

という感じの流れなのですが、
自動投稿をすると、うまくいくときもあれば、
エラーで「An active access token must be used to query information about the current user.」と
返ってきてしまうことがありました。

最初は、アクセストークンの認証が切れているのではと思い、
検索してみました。

アクセストークンは、2時間程度で認証が切れてしまうということで、
offline_access」というものを使えば、
認証の時間を長くすることが出来るようです。
(以前は無期限だったのが、2012年5月2日以降は60日間の期間になってしまったみたいです。)

ただ、「offline_access」を指定しても、
エラーが解消されません。

次に調べてみたのは、「/me/feed」を使っていると、
エラーが起こる可能性があるということです。


▼ここの記事について詳細が書かれていました。
http://fb.dev-plus.jp/forum/topic.php?id=67


ただ、英語すぎて私にはちょっと難しすぎました><


それでやっとたどり着いたのが、
FB.apiを使用しているときに、一緒に投稿する画像を指定しているのですが、
その画像を相対パスで書いていたことが問題でした。


以下のコードを、次のように書き換えたら、
あっさりエラーが解消されたのです。


【誤】-------------


function publishStream1()
{
    FB.api('/me/feed', 'post',
    {
        picture : "images/kekka.gif?type=large", 
    message : "メッセージを入れる",
    link :  "http://XXXXXX/",
        name : "リンク先の名前",
    caption : "キャプションを指定",
     description : "ディスクリプションを指定"
    },
    function (response)
    {
        if (!response || response.error) {
            alert(response.error);
        }
        else {
            alert('投稿が完了しました!');
        }
    });
}


-------------



【正】-------------


function publishStream1()
{
    FB.api('/me/feed', 'post',
    {
        picture : "http://XXX/images/kekka.gif?type=large", 
    message : "メッセージを入れる",
    link :  "http://XXXXXX/",
        name : "リンク先の名前",
    caption : "キャプションを指定",
     description : "ディスクリプションを指定"
    },
    function (response)
    {
        if (!response || response.error) {
            alert(response.error);
        }
        else {
            alert('投稿が完了しました!');
        }
    });
}


-------------

てっきり、同じサーバーに画像をアップしているので、
スクリプト内も相対パスでいいんだと思っていました。

でも違ったんですね、
絶対パスで指定したらエラーが解消しました。

facebookhは、ほんとにいろんなところでつまづきます、、><

0 件のコメント:

コメントを投稿