私たちのアプリでは、Facebook を新しい Facebook SDK バージョン 3.0 と統合しました。
Eclipse からテスト デバイスでアプリを起動すると、すべて正常に動作します。Facebook アプリ (ネイティブ アプリがインストールされていない場合は webView) が開き、Facebook にログインしてコールバックし、投稿を公開します。
しかし、このコードを google playstore で apk としてリリースし、そこからダウンロードしてテストすると、Facebook アプリが起動し、ユーザーがログインして公開を許可すると、何も起こらず、ウォール O_o に投稿されません。
コードは次のとおりです。
private void facebookLogin()
{
Session.openActiveSession(this, true, new Session.StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
// TODO Auto-generated method stub
if(session.isOpened())
{
performPublish(PendingAction.POST_PHOTO);
}
}
});
}
private void performPublish(PendingAction action) {
Session session = Session.getActiveSession();
if (session != null) {
pendingAction = action;
if (hasPublishPermission()) {
// We can do the action right away.
handlePendingAction();
} else {
// We need to get new permissions, then complete the action when we get called back.
session.requestNewPublishPermissions(new Session.NewPermissionsRequest(this, PERMISSIONS));
}
}
}
private void handlePendingAction()
{
PendingAction previouslyPendingAction = pendingAction;
// These actions may re-set pendingAction if they are still pending, but we assume they
// will succeed.
pendingAction = PendingAction.NONE;
switch (previouslyPendingAction)
{
case POST_PHOTO:
postPhoto();
break;
case POST_STATUS_UPDATE:
postStatusUpdate();
break;
}
}
private void postPhoto()
{
if (hasPublishPermission())
{
Bitmap logo = g.getLevelBitmaps()[0];
Request request = Request.newUploadPhotoRequest(Session.getActiveSession(), logo, new Request.Callback()
{
@Override
public void onCompleted(Response response)
{
postStatusUpdate();
if(g.isAchievementsActivated())
{
Swarm.init(logoQuestion,3777,"831e03485c37444f9b94de8fdf2e676f");
SwarmAchievement.unlock(10093);
}
//Toast.makeText(logoQuestion, "Posted", Toast.LENGTH_SHORT).show();
performPublish(PendingAction.POST_STATUS_UPDATE);
}
});
Bundle params = new Bundle();
params.putString("description", "Who know's that logo? \n" + hintQuestionText+ " posted from Videogames Logoquiz now available for Android and iOS");
//request.setParameters(params);
request.executeAsync();
}
else
{
pendingAction = PendingAction.POST_PHOTO;
}
}
private void postStatusUpdate()
{
if (hasPublishPermission())
{
String question = "Who know's that logo? "+hintQuestionText+" Get Videogames Logoquiz. It's now available for iOS and Android.";
Request request = Request
.newStatusUpdateRequest(Session.getActiveSession(), question, new Request.Callback()
{
@Override
public void onCompleted(Response response)
{
Toast.makeText(logoQuestion, "Posted", Toast.LENGTH_SHORT).show();
}
});
request.executeAsync();
}
else
{
pendingAction = PendingAction.POST_STATUS_UPDATE;
}
}
hasPublishPermission 関数:
private boolean hasPublishPermission()
{
Session session = Session.getActiveSession();
return session != null && session.getPermissions().contains("publish_actions");
}
私が求めている権限は次のとおりです。
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions","user_photos");
私の Android マニフェストには、facebook を統合するための次の権限があります。
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
テストでは動作するが、同じリリース バージョンでは動作しない理由がわかりません。
誰かが解決策を知っていますか?
皆さん、ありがとうございました!