1

Facebook iOS SDK3.0を使用しています(クライアントはまだ3.1に移行する準備ができていません)が、アプリが長期間(日); アプリをバックグラウンドに送信し、1〜2分後にフォアグラウンドに戻っても問題はありません。

私のコードは次のとおりです。さらに情報を提供する必要があるかどうかをお知らせください。デバイス(4、4S、5)とiOSバージョン(4.3、5.0、5.1、6.0)でこの問題が発生します

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...   
  if (![self openSessionWithAllowLoginUI:NO]) {
    // still allow loading the public feed even though user is not logged in (the view controller will have a login button overlay)
    [[self pictureFeedVC] loadFeed];
  }
  ...
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  DEBUGLog(@"didBecomeActive");
  DEBUGLog(@"FBSession is Open? %@",FBSession.activeSession.isOpen ? @"YES" : @"NO");

  if (FBSession.activeSession.state == FBSessionStateCreatedOpening) {
    //Dismiss login view controller
    if ([self.tabBarController modalViewController]) {
        [self.tabBarController dismissModalViewControllerAnimated:NO];
    }
    [FBSession.activeSession close];
  }
}

- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
  BOOL result = NO;

  [FBSettings setLoggingBehavior:[NSSet setWithObjects:FBLoggingBehaviorSessionStateTransitions,nil]];
  NSArray *permissions = [NSArray arrayWithObjects:@"publish_actions", @"email", nil];

  FBSession *session = [[FBSession alloc] initWithAppID:nil permissions:permissions urlSchemeSuffix:FB_URL_SCHEME_SUFFIX tokenCacheStrategy:nil];

  if (allowLoginUI || (session.state == FBSessionStateCreatedTokenLoaded)) {
    [FBSession setActiveSession:session];
    [session openWithCompletionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
        [self sessionStateChanged:session state:state error:error];
    }];
    result = session.isOpen;
  }
  return result;
}

- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error
{
  DEBUGLog(@"changed FB state");
  switch (state) {
    case FBSessionStateOpen:
      if (!error) {
        DEBUGLog(@"FBSessionStateOpen");
        [[self pictureFeedVC] loadFeed];
      }
    break;
    case FBSessionStateClosed:
      DEBUGLog(@"FBSessionStateClosed");
    case FBSessionStateClosedLoginFailed:
      DEBUGLog(@"FBSessionStateClosedLoginFailed");
      [session closeAndClearTokenInformation];
      [self.tabBarController showFBLoginView];
      break;
    default:
      break;
    }
}

バックグラウンドで長時間経過すると、DEBUGLog(@"FBSession is Open? %@",FBSession.activeSession.isOpen ? @"YES" : @"NO");inapplicationDidBecomeActive:が印刷されるという問題があります。NO

詳細:このアプリはFacebookログインに完全に依存しており、FacebookユーザーIDを使用してユーザーを識別します。したがって、多くのアクションでは、サーバーがFacebookユーザーIDを取得できるように、Facebookアクセストークンを渡す必要があります。アクションでは、Facebookへのapi呼び出しは必要ありません(もちろん、アクセストークンからユーザーIDを取得する以外に)。私の他の質問は、トークンを更新するために積極的に何かをする必要があるのか​​、それともFBSessionを開いたままにする必要があるのか​​(そうであれば、どのように?)、FBSession.activeSessionフォアグラウンドに戻ったときにが開いた状態にならない理由ですか?

よろしくお願いします!

4

0 に答える 0