4

AndroidでFacebookAPIを使用して友達の壁に投稿しようとすると多くの問題が発生します。これは私が現在持っているものです:

if (facebook.isSessionValid()) {
                        String response = facebook.request((userID == null) ? "me" : userID);

                        Bundle params = new Bundle();
                        params.putString("message", "put message here");
                        params.putString("link", "http://mylink.com");    
                        params.putString("caption", "{*actor*} just posted this!");
                        params.putString("description", "description of my link.  Click the link to find out more.");
                        params.putString("name", "Name of this link!");
                        params.putString("picture", "http://mysite.com/picture.jpg");

                        response = facebook.request(((userID == null) ? "me" : userID) + "/feed", params, "POST");       

                        Log.d("Tests",response);
                        if (response == null || response.equals("") || 
                                response.equals("false")) {
                            Log.v("Error", "Blank response");
                        }
                    } else {
                        // no logged in, so relogin
                        Log.d("1234567890", "sessionNOTValid, relogin");

                    }
                }catch(Exception e){
                    e.printStackTrace();
                }

しかし、これはこのエラーで返されます:

12-11 21:34:06.604: D/FACEBOOK RESPONSE(14954): {"error":{"message":"(#200) Feed story publishing to other users is disabled for this application","type":"OAuthException","code":200}}
4

2 に答える 2

15

このFacebookアプリケーションは最近作成した可能性があります。つまり、2013年2月の重大な変更が有効になっています。

2月の重大な変更には次のものが含まれます。

グラフAPIを介して友達の壁に投稿する機能を削除する

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

この機能は2月から無効になります。有効にする場合は(2月まで一時的にのみ)、アプリのダッシュボード>[設定]>[詳細設定]>[2013年2月の重大な変更]を無効にします。

ただし、2月以降、この機能によりアプリで同じエラーが再度スローされるため、そうしないことを強くお勧めします。

于 2012-12-12T00:14:48.203 に答える
2

私はあなたを助けるかもしれない解決策を持っています、私は私のコードとその動作のためにこれを使用しています。

private void publishFeedDialog(String friend_uid){

    try{
            Session mCurrentSession = Session.getActiveSession();

            SessionTracker mSessionTracker = new SessionTracker(
                    getBaseContext(), new StatusCallback() {
                        public void call(Session session, SessionState state,
                                Exception exception) {
                        }
                    }, null, false);
            String applicationId = Utility
            .getMetadataApplicationId(getBaseContext());
            mCurrentSession = mSessionTracker.getSession();

            if (mCurrentSession == null
                    || mCurrentSession.getState().isClosed()) {
                mSessionTracker.setSession(null);
                Session session = new Session.Builder(getBaseContext())
                .setApplicationId(applicationId).build();
                Session.setActiveSession(session);
                mCurrentSession = session;
            }

            if (!mCurrentSession.isOpened()) {
                Session.OpenRequest openRequest = null;
                openRequest = new Session.OpenRequest(
                        NewFriendList.this);

                if (openRequest != null) {
                    openRequest
                    .setDefaultAudience(SessionDefaultAudience.FRIENDS);
                    openRequest.setPermissions(Arrays.asList("email", "publish_actions"));
                    openRequest
                    .setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);



                    mCurrentSession.openForPublish(openRequest);
                }
            }



            if (regobj != null && friend_uid != null ) {

                final Activity activity = this;
                Bundle params = new Bundle();
                //This is what you need to post to a friend's wall
                params.putString("from", "" + regobj.MyFBID);
                params.putString("to", friend_uid);
                //up to this
                params.putString("name", "Facebook SDK for Android");
                params.putString("caption", "Build great social apps and get more installs.");
                params.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps.");
                params.putString("link", "https://developers.facebook.com/android");
                params.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png");
                WebDialog feedDialog = (new WebDialog.FeedDialogBuilder(this, mCurrentSession, params))
                        .setOnCompleteListener(new OnCompleteListener() {

                        @Override
                        public void onComplete(Bundle values, FacebookException error) {
                            if (error == null) {
                                // When the story is posted, echo the success
                                // and the post Id.
                                final String postId = values.getString("post_id");
                                if (postId != null) {
                                    Toast.makeText(activity,
                                        "Posted story, id: "+postId,
                                        Toast.LENGTH_SHORT).show();
                                } else {
                                    // User clicked the Cancel button
                                    Toast.makeText(activity, 
                                        "Publish cancelled", 
                                        Toast.LENGTH_SHORT).show();
                                }
                            } else if (error instanceof FacebookOperationCanceledException) {
                                // User clicked the "x" button
                                Toast.makeText(activity, 
                                    "Publish cancelled", 
                                    Toast.LENGTH_SHORT).show();
                            } else {
                                // Generic, ex: network error
                                Toast.makeText(activity, 
                                    "Error posting story", 
                                    Toast.LENGTH_SHORT).show();
                            }
                        }



                    }).build();
                feedDialog.show();
            }
    }catch(Exception e)
    {
        Log.d("Error", ""+e.toString());
    }
}

このコードは1人のユーザーに対してのみ機能します。複数のユーザーに送信する場合は、WebDialogの代わりにRequestsDialogBu​​ilderを使用できます。

于 2013-07-31T09:37:10.067 に答える