레이블이 UIDevice인 게시물을 표시합니다. 모든 게시물 표시
레이블이 UIDevice인 게시물을 표시합니다. 모든 게시물 표시

2013/11/19

[iOS] 배터리 상태 감시

배터리는 UIDevice의 batteryMonitoringEnabled에 YES를 설정하고, 알림 설정을 변경 사항을 받을 수 있다.

1. 배터리 모니터링 시작하기.

Source Code
    [[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];

배터리는 상태(batteryState) 의 변경사항으로 아래 4가지 상태 값을 가진다.

typedef enum {
   UIDeviceBatteryStateUnknown,
   UIDeviceBatteryStateUnplugged,
   UIDeviceBatteryStateCharging,
   UIDeviceBatteryStateFull,
} UIDeviceBatteryState;
  • 알수 없는 상태 (Unknown) : Enabled 가 되어 있지 않는 상태
  • 전원에 연결되어 있지 않는 상태 (not plugged)
  • 충전 중인 상태 (charging)
  • 완전 충전 상태 (full)
배터리의 레벨(batteryLevel) 은 0.0~ 1.0 사이의 값을 가진다.

2. 배터리 Level과 State변경 될 때, Notification받기

알림 추가를 아래와 같이 하여서, 특정 변경이 되면 특정 블록을 실행하게 한다.

source code
        [[NSNotificationCenter defaultCenter] addObserverForName:UIDeviceBatteryStateDidChangeNotification
                                                          object:Nil
                                                           queue:[NSOperationQueue mainQueue]
                                                      usingBlock:^(NSNotification *note) {
                                                          NSLog(@"Battery State Change");
                                                          //Show Battery State
                                                      }];
        [[NSNotificationCenter defaultCenter] addObserverForName:UIDeviceBatteryLevelDidChangeNotification
                                                          object:nil
                                                           queue:[NSOperationQueue mainQueue]
                                                      usingBlock:^(NSNotification *note) {
                                                          NSLog(@"Battery Level Change");
                                                          //Show Battery Level
                                                      }];

3. 정보 읽어 오기

배터리의 state와 level은 아래와 같이 읽어 올 수 있다.

source code
    [UIDevice currentDevice].batteryState;
    [UIDevice currentDevice].batteryLevel; // 0.0f - 1.0f


4. 그럼, 이것을 어디에서 사용할 수 있는가?

특정 연산을 시작하거나, 데이터를 업로드할 때, 전원이 연결되어 있는지, level이 특정 이상인지를 체크해서 사용자에게 연결하거나, 업로드를 못하도록 할 수 있다.

사용자들이 전원이 없는 상태에서 무리하게 실행하는 것을 막을 수 있는 것이다.


2013/11/13

[iOS] 설치된 App에서 Vendor를 위한 고유 식별 ID identifierForVendor

1. identifierForVendor란?

 UIDevice 클래스의 속성인 identifierForVendor를 이용하여 설치된 앱에서 Vendor를 위한 공유 ID를 얻을 수 있습니다.
이 속성의 값은 NSUUID 클래스이고 UUIDString을 값으로 참조할 수 있습니다.
또한 하나의 iOS 장치에서 실행되는 같은 공급 업체에서 온 애플리케이션에 대해 동일합니다.
즉, 내 iPhone에서 같은 업체에서 만든 앱들에서 읽으면 동일한 값이 나온다는 것입니다.
A사가 만든 App1, App2에서 identifierForVendor를 읽으면 동일한 값을 얻을 수 있습니다.

같은 기기에서라도, Vendor가 다르면 App에서 읽는 값이 달라집니다.
다른 기기이면 물론 다른 값을 나타내고..

Vendor에 대한 것은 일반적으로 공급 업체가 앱 스토어에서 제공 한 데이터에 의해 결정됩니다.
그리고, 한 기기에서 A사가 만든 모든 App이 삭제가 되고, 다시 설치가 되면, 이 ID는 달라질 수 있습니다.

그리고, 앱을 앱스토어에 제출하지 안은 경우에는 번들 ID로 넣은 값의 처음 두 구성요소를 바탕으로 만듭니다. com.example.app1, com.example.app2 이면 동일한 공급업체 ID를 나타내는 것이 됩니다.

사용 소스는 아래와 같습니다.

Source Code
    UIDevice *device = [UIDevice currentDevice];
    NSUUID *uuid = device.identifierForVendor;
    NSLog(@"identifierForVendor     : %@", uuid.UUIDString);

2. 활용 방법은?

그러면, 이것을 가지고 뭘 이용할 수 있을까요?
설치할 때, 사용자 정보와 idForVendor를 같이 저장을 해 두면, 다른 기기에서 접속하였는지를 알 수가 있습니다. (단, 삭제했다가 다시 설치하면, 다른 기기로 인식할 수도 있습니다.)
유일하게 하나의 기기에서만 동작하게 앱을 만들어야 된다면, 로그인할 때, 해당 idForVendor를 같이 보내고, 같은 idForVendor에서 접속한 것이면, 바로 로그인 할 수 있도록 만들 수가 있겠습니다.
만약 다른 idForVendor를 가지고 접속하면, 이전 idForVendor를 삭제하여서, 유일하게 하나의 기기에서만 접속하도록 할 수 있겠습니다.

Facebook 앱에서 기기접속에 대한, 인증서 요구도 이것을 이용하였을 것 같습니다.
카카오톡에서 기기 인식도 이 값을 이용하지 않을까요?

참고사이트
앱 스토어의 UDID 사용제안에 따른 대안들