1

アプリには、ユーザーがニュースフィードの投稿に「いいね」できるメソッドがあります。を使用した単純なグラフ リクエストで実行されHttpMethod.POSTます。しかし、 を使用して「似ていない」アクションを実行しようとするとHttpMethod.DELETE、エラー コールバックが返されます。

02-08 00:35:57.298: I/Detail(2628): {Response:  responseCode: 403, graphObject: null, error: 
{HttpStatus: 403, errorCode: 200, errorType: OAuthException, errorMessage: (#200) 
Feed story publishing to other users is disabled for this application}, isFromCache:false}

これは、Facebook と統合するすべてのアプリで、Facebook に見えるすべてのダイアログとスタイルを使用するようにする最新の試みと関係があると思いますが、間違っている可能性があります。疑わしいロードマップの投稿は次のとおりです。

Graph API 経由でフレンド ウォールに投稿する機能の削除 Graph API 経由でユーザーのフレンド ウォールに投稿する機能を削除します。具体的には、[user_id] がセッション ユーザーと異なる [user_id]/feed に対する投稿、または target_id ユーザーがセッション ユーザーと異なる stream.publish 呼び出しは失敗します。ユーザーが友人のタイムラインに投稿できるようにするには、フィード ダイアログを呼び出します。ユーザー メンションのタグ付けまたはアクションのタグ付けを介して友達を含むストーリーは、友達のタイムラインに表示されます (友達がタグを承認した場合)。詳細については、このブログ投稿を参照してください。

私が間違っている可能性があること、またはFacebookが私を台無しにしているという考えはありますか? ありがとう!

編集:リクエストを実行するために使用しているコードは次のとおりです。

Request likeRequest = new Request(Utility.fbSession, null, null, null, new Request.Callback() {
    @Override
    public void onCompleted(Response response) {
        String responseString = response.toString();
        Log.i("Detail", responseString);
        updateDetail();
    }
});
HttpMethod nextLikeCall = HttpMethod.DELETE;
likeRequest.setHttpMethod(nextLikeCall);
likeRequest.setGraphPath(itemId+"/likes");
likeRequest.executeAsync();
4

2 に答える 2

1

グラフデータから投稿IDを取得するときは、XXXXX_YYYYYのような形式である必要があります。XXXXXは単にユーザーIDであり、YYYYYは実際の投稿IDです。あなたがする必要があるのは、グラフがあなたに与える投稿IDのYYYYY部分だけを抽出して使用することです。したがって、graph.facebook.com / XXXXX_YYYYY / likes ....の代わりに、graph.facebook.com / YYYYY/likesを送信します。これは、好きなものと嫌いなものの両方で機能します。サブストリング抽出メソッドを一緒にハッキングする前に、最初にグラフエクスプローラーでテストできます。

Androidで文字列のセクションを抽出する方法はわかりませんが、Objective-C / iOSでは、次のように実行できます(コードはテストされていません。参照/アイデア用):

SString *actualPostIdStr;      //The String we will put the actual postId in
NSString *oldIdStr          =   //<the string in format XXXXX_YYYYY>
NSInteger charCount         =   [oldIdStr length]; //get the length of the original XXXXX_YYYYY string
NSRange fRangeCount         =   [oldIdStr rangeOfString:@"_"]; //get count of characters to remove (XXXXXX)


if (fRangeCount.location != NSNotFound){
    NSInteger startingPos   =   fRangeCount.location + 1; //get the starting character position of the actual postId
    actualPostIdStr         =   [[oldIdStr substringWithRange:NSMakeRange(startingPos, charCount - startingPos)] copy];
}

お役に立てれば。

編集:
わかりました、それで私は一日中いいねをいじっています...この方法は時々うまくいかないようですが、それはすべてあなたが好き/嫌いにしようとしているグラフオブジェクトのタイプに依存します。たとえば...プレーンなステータス投稿の場合、この方法は完全に機能します。しかし、メッセージ/ストーリー投稿オブジェクトを含む写真を高く評価しようとすると、問題が発生しました。写真付きのこのタイプの投稿オブジェクトのグラフデータには、ステータス投稿グラフデータにあるプレーンな「id」に加えて、「object_id」と呼ばれる追加のパラメータがあります。この場合、写真とストーリーの投稿で、「object_id」を渡す必要があります。これは、嫌いなものを成功させるために変更されていません。

この混乱は、FB側のバグのように見えるか、変更を加えてグラフAPIからのいいね/嫌いを許可せず、前者を忘れて/まだ教えていないようです:)うまくいけば前者。それまでの間は、上記の回答を使用する必要がありますが、見つけられる限り多くの異なるタイプの投稿オブジェクトでテストし、異なるID(「id」の部分)のif条件を使用するようにしてください。 ... "object_id" ...など)が必要です。

于 2013-03-18T20:08:39.700 に答える
0

Daniel McCarthyの方法がうまくいかないことがあります。この場合、Graph API リクエスト XXX_YYYY を取得し、フィールドobject_idを見つけて、この object_id fid とは異なります。

于 2013-04-28T20:48:45.467 に答える