アプリからFacebookへ投稿したとき、他の人から見れない

344 views
Skip to first unread message

Kenji Arai

unread,
Dec 17, 2013, 9:58:43 PM12/17/13
to android-g...@googlegroups.com
初めまして。お世話になります。

現在、facebookへ投稿する機能を盛り込んだアプリを開発中です。
こちらの記事も参考にさせてもらいながら、なんとか、リリース用apkでも投稿可能な状態まで進みました。

ただ、それでもまだ問題があるので、相談させて頂きただきます。よろしくお願いします。

アプリからfacebookへ投稿した後、まずは自分のウォールやタイムラインを確認すると、そこでは見る事が出来ています。
投稿直後の公開範囲は、友達までになっています。
その状態で、「他のユーザーへの自分のタイムラインの表示のされ方を確認」で確認してみたり、
実際に友達に自分のタイムラインを見てもらったりしているのですが、そこに表示が出来ていない状態です。

後で公開範囲を「公開」等に変えてみても変化がありません。

この公開範囲の設定について、どのように行うのか、ご教示いただきたいです。

今回作成したコードはこちらです。
よろしくお願いします。


public class FbActivity extends Activity {

private static final String TAG = "FbActivity";
private static final String FB_APP_ID = "app_id";

private boolean is_post = false;
private UiLifecycleHelper uiHelper;
private Session session;
private EditText fb_edit;
private Session.StatusCallback facebookCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
}
};


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

LayoutInflater inflater = LayoutInflater.from(this);
SocialPostContainer td = (SocialPostContainer)inflater.inflate(R.layout.container_fb, null);
td.init();
setContentView(td);
fb_edit = td.getEdit();
td.getTitle().setText("Facebook");
td.getCancel().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自動生成されたメソッド・スタブ
finish();
}
});
td.getPost().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自動生成されたメソッド・スタブ
is_post = true;
loginFacebook();
}
});

// ライフサイクルヘルパーの初期化
uiHelper = new UiLifecycleHelper(FbActivity.this, facebookCallback);
uiHelper.onCreate(savedInstanceState);    
        // Facebook ログイン管理
        Session session = Session.getActiveSession();
        if (session == null) {
            if (savedInstanceState != null) {
                session = Session.restoreSession(this, null, facebookCallback, savedInstanceState);
            }
            if (session == null) {
                session = new Session(this);
            }
            Session.setActiveSession(session);
            if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
                //session.openForPublish(getOpenRequest());
                session.openForRead(new OpenRequest(this));
            }
        }
 
        // ログイン状態の確認
        if (! session.isOpened()) {
        loginFacebook();
        }
    }

private void loginFacebook() {
        Session session = Session.getActiveSession();
        Log.d(TAG,"doLogin: session state is " + session.getState() + ", isOpend:" + session.isOpened() + ", isClosed:" + session.isClosed());
        if (!session.isOpened()) {
            if (session.isClosed()) {
                session = new Session(this);
                Session.setActiveSession(session);          
            }
            //session.openForPublish(getOpenRequest());
            session.openForRead(new OpenRequest(this));
        } else {
            Session.openActiveSession(this, true, facebookCallback);
        }
}

private void logoutFacebook() {
Session session = Session.getActiveSession();
if (!session.isClosed()) {
// セッションとトークン情報を廃棄する。
session.closeAndClearTokenInformation();
}
}

private void onSessionStateChange(final Session session, final SessionState state, Exception exception) {
if (session.isOpened()) {
// GraphAPIのmeリクエストを呼び出す。
Request.newMeRequest(session, new FacebookGraphUserCallback("wait...") {
@Override
public void onCompleted(GraphUser user, Response response) {
super.onCompleted(user, response);
Log.d(TAG, "user = " + user.getInnerJSONObject());
if (is_post) postFB();
}
}).executeAsync();
}

@Override
public void onResume() {
super.onResume();
Session session = Session.getActiveSession();
if (session.getState().equals(SessionState.CLOSED_LOGIN_FAILED) || session.getState().equals(SessionState.CLOSED)) {
            Toast.makeText(this, "Facebook認証に失敗しました。", Toast.LENGTH_LONG).show();
            finish();
        }
uiHelper.onResume();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}

@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Session session = Session.getActiveSession();
Session.saveSession(session, outState);
outState.putBoolean(PENDING_PUBLISH_KEY, pendingPublishReauthorization);
uiHelper.onSaveInstanceState(outState);

class FacebookGraphUserCallback implements Request.GraphUserCallback {

private ProgressDialog mProgress = null;

public FacebookGraphUserCallback(String message) {
mProgress = new ProgressDialog(FbActivity.this);
mProgress.setMessage(message);
mProgress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgress.show();     

}
@Override
public void onCompleted(GraphUser user, Response response) {
mProgress.dismiss();
}
}
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization";
private boolean pendingPublishReauthorization = false;
private void postFB() {
   Session session = Session.getActiveSession();

   if (session != null){
       // Check for publish permissions    
       List<String> permissions = session.getPermissions();
       if (!isSubsetOf(PERMISSIONS, permissions)) {
           pendingPublishReauthorization = true;
           Session.NewPermissionsRequest newPermissionsRequest = new Session
                   .NewPermissionsRequest(this, PERMISSIONS);
           session.requestNewPublishPermissions(newPermissionsRequest);
           return;
       }
       
       Bundle postParams = new Bundle();
       postParams.putString("name", getString(R.string .app_name));
       postParams.putString("caption", "Build great social apps and get more installs.");
       postParams.putString("description", fb_edit.getText().toString());
       postParams.putString("link", "https://developers.facebook.com/android");

       Request.Callback callback= new Request.Callback() {
           public void onCompleted(Response response) {
               JSONObject graphResponse = response
                                          .getGraphObject()
                                          .getInnerJSONObject();
               String postId = null;
               try {
                   postId = graphResponse.getString("id");
               } catch (JSONException e) {
                   Log.i(TAG,
                       "JSON error "+ e.getMessage());
               }
               FacebookRequestError error = response.getError();
               if (error != null) {
                   Toast.makeText(getApplicationContext(),
                        error.getErrorMessage(),
                        Toast.LENGTH_SHORT).show();
                   } else {
                       Toast.makeText(getApplicationContext(), 
                            postId,
                            Toast.LENGTH_LONG).show();
               }
           }
       };

       Request request = new Request(session, "me/feed", postParams, 
                             HttpMethod.POST, callback);

       RequestAsyncTask task = new RequestAsyncTask(request);
       task.execute();
   }
}
private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
   for (String string : subset) {
       if (!superset.contains(string)) {
           return false;
       }
   }
   return true;
}
}



Takayuki Hagiwara

unread,
Dec 19, 2013, 12:57:23 AM12/19/13
to android-g...@googlegroups.com
萩原です

 その症状ですと、Facebook側での設定がサンドボックスモードになっているのが原因だと考えられます。

http://web.showjin.me/sandbox_mode.html


 サンドボックスモードを解除するか、テスターの方を開発者として加えれば解消します

2013年12月18日 11:58 Kenji Arai <kenji...@koyonplete.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
--^----^--------------------------------------
萩原崇之@自宅警備員.biz
hagiwara...@gmail.com
はてな:http://d.hatena.ne.jp/kagigotonet/
Google+:https://plus.google.com/115287053726902051396
twitter:takayuki_h
study mail:
mixi : http://mixi.jp/show_profile.pl?id=27017384

Kenji Arai

unread,
Dec 19, 2013, 2:43:48 PM12/19/13
to android-g...@googlegroups.com

ありがとうございます!
ちょっとUI変更になっているようですが、そうであろうページにたどり着きました!
早々に試してみます!



2013年12月19日木曜日 14時57分23秒 UTC+9 萩原崇之:
> このグループから退会し、メールの受信を停止するには、android-group-japan+unsubscribe@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、android-group-ja...@googlegroups.com にメールを送信してください。
Reply all
Reply to author
Forward
0 new messages