2017-02-14 17 views
0

ログインと登録のオプションを持つ「ホーム画面」があるアプリがあります。ユーザーが上記のいずれかを完了すると、データは共有インスタンスに格納されます。セキュリティ上の理由から、私はapplicationDidBecomeActiveを使って、ユーザーがサーバー上でまだアクティブであるかどうか、または共有インスタンスでメソッドを呼び出すことによってブロックされていないことを定期的に確認することを検討していました。ユーザーがアクティブでない場合、アプリはプロンプトを表示してホーム画面に移動します。applicationDidBecomeActiveを使用してユーザーがログインしているかどうかを確認する

私の問題は、アプリが初めて読み込まれるときに `applicationDidBecomeActiveが呼び出され、ユーザーがログインしていないためにループが発生することです。

この問題を解決する正しい方法は何ですか?理想的には私はapplicationDidBecomeActiveを使いたいと思っていますが、私はアプリケーションのアカウントセクションでチェックを実行したいだけです。

助けがあれば助かります。

ありがとうございました。

+0

plsはあなたがapplicationDidBecomeActive方法でチェックする方法のコードを示していますよう

- (void)applicationDidBecomeActive:(UIApplication *)application { //compare current NSDate with expiryDate if(current date is before expiry date){ //active session }else{ //log out the user } } 

あなたは有効期限を生成することができます。 –

答えて

0

これを実装する方法はいくつかあります。

方法1:NotificationCenter.defaultを使用して通知を行い、Accounts-ViewControllerにリスナーを実装します。

ウェイ2:あなたのAppDelegateでアクティブなViewController(使用しているrootViewControllerに依存)を取得し、そのViewControllerのタイプがAccountVCの場合、パブリック関数をトリガーします。

ウェイ3:ウェイ1とウェイ2を別のオブジェクトに結合または使用し、好みの方法でViewControllerに通知します。

その他多数 より具体的なヘルプのコードを投稿してください:)

0

問題を処理するには、次のいずれかの方法を使用できます。

アプローチ1

- (void)checkWhetherAppIsActive { 

    UIApplicationState appState = [[UIApplication sharedApplication] applicationState]; 
    if (appState == UIApplicationStateActive) { 

    }else if (appState == UIApplicationStateInactive) { 

    }else if (appState == UIApplicationStateBackground) { 

    } 
} 

アプローチ2

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillResignActiveNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { 

}]; 

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillEnterForegroundNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { 

}]; 

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillTerminateNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { 

}]; 
0

ユーザがログイン、expiryTimeStampを生成します。アプリがアクティブなときはいつでもcurrentTimestampexpiryTimeStampにチェックすることができます。 currentTimestampexpiryTimeStampの前にある場合は、それをアクティブセッションと見なしてください!

-(void)generateExpiryTimeStamp{ 
    [[NSUserDefaults standardUserDefaults]setObject:[NSDate dateWithTimeIntervalSinceNow:900] forKey:@"tokenExpiry"]; //Expiry date Set to 15mins 
    [[NSUserDefaults standardUserDefaults]synchronize]; 
} 
関連する問題