QNUserAgent.m 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //
  2. // QNUserAgent.m
  3. // QiniuSDK
  4. //
  5. // Created by bailong on 14-9-29.
  6. // Copyright (c) 2014年 Qiniu. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #if __IPHONE_OS_VERSION_MIN_REQUIRED
  10. #import <MobileCoreServices/MobileCoreServices.h>
  11. #import <UIKit/UIKit.h>
  12. #else
  13. #import <CoreServices/CoreServices.h>
  14. #endif
  15. #import "QNUserAgent.h"
  16. #import "QNUtils.h"
  17. static NSString *qn_clientId(void) {
  18. #if __IPHONE_OS_VERSION_MIN_REQUIRED
  19. NSString *s = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
  20. if (s == nil) {
  21. s = @"simulator";
  22. }
  23. return s;
  24. #else
  25. long long now_timestamp = [[NSDate date] timeIntervalSince1970] * 1000;
  26. int r = arc4random() % 1000;
  27. return [NSString stringWithFormat:@"%lld%u", now_timestamp, r];
  28. #endif
  29. }
  30. static NSString *qn_userAgent(NSString *id, NSString *ak) {
  31. NSString *addition = @"";
  32. #if DEBUG
  33. addition = @"_Debug";
  34. #endif
  35. #if __IPHONE_OS_VERSION_MIN_REQUIRED
  36. return [NSString stringWithFormat:@"QiniuObject-C%@/%@ (%@; iOS %@; %@; %@)", addition, [QNUtils sdkVersion], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], id, ak];
  37. #else
  38. return [NSString stringWithFormat:@"QiniuObject-C%@/%@ (Mac OS X %@; %@; %@)", addition, [QNUtils sdkVersion], [[NSProcessInfo processInfo] operatingSystemVersionString], id, ak];
  39. #endif
  40. }
  41. @interface QNUserAgent ()
  42. @property (nonatomic) NSString *ua;
  43. @end
  44. @implementation QNUserAgent
  45. - (NSString *)description {
  46. return _ua;
  47. }
  48. - (instancetype)init {
  49. if (self = [super init]) {
  50. _id = qn_clientId();
  51. }
  52. return self;
  53. }
  54. /**
  55. * UserAgent
  56. */
  57. - (NSString *)getUserAgent:(NSString *)access {
  58. NSString *ak;
  59. if (access == nil || access.length == 0) {
  60. ak = @"-";
  61. } else {
  62. ak = access;
  63. }
  64. return qn_userAgent(_id, ak);
  65. }
  66. /**
  67. * 单例
  68. */
  69. + (instancetype)sharedInstance {
  70. static QNUserAgent *sharedInstance = nil;
  71. static dispatch_once_t onceToken;
  72. dispatch_once(&onceToken, ^{
  73. sharedInstance = [[self alloc] init];
  74. });
  75. return sharedInstance;
  76. }
  77. @end