私は、監視対象の iBeacon が配置されている領域に入ったときにアプリが終了状態からバックグラウンドになったときに HTTP 要求を送信する必要がある iBeacon 対応の iOS アプリに取り組んでいます。一部の資格情報の読み取りに失敗することを除いて、すべて正常に動作しますキーチェーンに保存されます。これが Keychain や iBeacon、あるいはその両方と関係があるかどうかはわかりません。しかし、これは私のコードがどのように見えるか、
資格情報を保存すると (アプリのキーチェーン ラッパー コードを使用します)、
KeychainItemWrapper* keyChain = [[KeychainItemWrapper alloc] initWithIdentifier:keyChainIdentifier accessGroup:nil];
[keyChain setObject:@"MY_APP_CREDENTIALS" forKey:(__bridge id)kSecAttrService];
[keyChain setObject:myUserName forKey:(__bridge id)kSecAttrAccount];
[keyChain setObject:myPassword forKey:(__bridge id)kSecValueData];
[keyChain setObject:(__bridge id)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly forKey:(__bridge id)kSecAttrAccessible];
さて、iBeacon部分は、
- (void)locationManager:(CLLocationManager *)manager
didDetermineState:(CLRegionState)state
forRegion:(CLBeaconRegion *)region
{
if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive)
{
// don't send any notifications
return;
}
if (state == CLRegionStateInside)
{
NSLog(@"Inside beacon region");
KeychainItemWrapper* keyChain = [[KeychainItemWrapper alloc] initWithIdentifier:keyChainIdentifier accessGroup:nil];
NSString *username =[keyChain objectForKey:(__bridge id)kSecAttrAccount];
NSString *password =[keyChain objectForKey:(__bridge id)kSecValueData];
[self.locationManager startRangingBeaconsInRegion:region];
if (username.length > 0 && password.length > 0 ) {
[self sendRequest:userName passCode:password];
}else {
// This is where it ends up when the app is TERMINATED and entering to the region !!!
[self displayError];
NSLog(@"I CAN SEE THIS !!!");
}
}
}
アプリケーションを強制終了し、画面をロックしてから、デバイスを持ったまま iBeacon 領域に入ります。ロジックに従ってすべてが発生していることを確認できますが、エラー メッセージしか表示されません。どんな助けでも本当に感謝しています。