Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
GMPhobos
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gengmeiios
GMPhobos
Commits
2033e44d
Commit
2033e44d
authored
May 11, 2021
by
艾娇平
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加钥匙串读取 和 删除api
parent
70630763
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
72 additions
and
47 deletions
+72
-47
PhobosDevice.h
GMPhobos/Classes/PhobosDevice.h
+21
-8
PhobosDevice.m
GMPhobos/Classes/PhobosDevice.m
+51
-39
No files found.
GMPhobos/Classes/PhobosDevice.h
View file @
2033e44d
...
@@ -9,9 +9,14 @@
...
@@ -9,9 +9,14 @@
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/ASIdentifierManager.h>
#import <AdSupport/ASIdentifierManager.h>
NS_ASSUME_NONNULL_BEGIN
// 钥匙串账户
extern
NSString
*
const
keyChainAccount
;
// 钥匙串存储idfa
extern
NSString
*
const
IDFA
;
/// 本地存储是否同意隐私弹框的标记
extern
NSString
*
const
KprivatePolicyNotification
;
extern
NSString
*
const
KprivatePolicyNotification
;
NS_ASSUME_NONNULL_BEGIN
typedef
void
(
^
PhobosGetIDFACompleteBlock
)(
NSString
*
idfa
,
NSInteger
authoriza
);
typedef
void
(
^
PhobosGetIDFACompleteBlock
)(
NSString
*
idfa
,
NSInteger
authoriza
);
...
@@ -20,8 +25,9 @@ typedef void (^PhobosGetIDFACompleteBlock)(NSString *idfa, NSInteger authoriza);
...
@@ -20,8 +25,9 @@ typedef void (^PhobosGetIDFACompleteBlock)(NSString *idfa, NSInteger authoriza);
/// 获取IDFA,同步获取 从钥匙串中获取
/// 获取IDFA,同步获取 从钥匙串中获取
+
(
NSString
*
)
getIDFA
;
+
(
NSString
*
)
getIDFA
;
/// 获取IDFA,异步获取IDFA 适配 ATTrackingManager的时候再打开
/// 请求获取IDFA授权 (ios14 异步回调, ios14之前直接回调)
//+ (void)getIDFAString:(PhobosGetIDFACompleteBlock)completeBlock;
/// @param completeBlock 回调执行结果
+
(
void
)
requestTrackingAuthorizaWithCompletionHandler
:(
PhobosGetIDFACompleteBlock
)
completeBlock
;
/// 获取IDFV
/// 获取IDFV
+
(
NSString
*
)
getIDFV
;
+
(
NSString
*
)
getIDFV
;
...
@@ -29,16 +35,23 @@ typedef void (^PhobosGetIDFACompleteBlock)(NSString *idfa, NSInteger authoriza);
...
@@ -29,16 +35,23 @@ typedef void (^PhobosGetIDFACompleteBlock)(NSString *idfa, NSInteger authoriza);
/// 获取DEVICEID,先获取idfa 获取不到会获取钥匙串中idfv 如果没有用idfv 生成
/// 获取DEVICEID,先获取idfa 获取不到会获取钥匙串中idfv 如果没有用idfv 生成
+
(
NSString
*
)
getDEVICEID
;
+
(
NSString
*
)
getDEVICEID
;
/// 获取UQID,同步获取取出的是默认第一次的idfv 如果没有用idfv 生成
/// 获取UQID,同步获取取出的是默认第一次的idfv 如果没有用idfv 生成
+
(
NSString
*
)
getUQID
;
+
(
NSString
*
)
getUQID
;
//检查idfa 是否为空
+
(
BOOL
)
checkIdfaIsNull
:(
NSString
*
)
idfa
;
#pragma mark - 钥匙串对外API
/*** @brief 给特定的键,标记钥匙串数据并存储 */
+
(
void
)
storeObjectAtKeyChainWithkey
:(
NSString
*
)
key
object
:(
id
<
NSCoding
>
)
object
;
/*** @brief 给特定的键,获取对于的钥匙串数据 */
+
(
id
)
fetchObjectAtKeyChainWithkey
:(
NSString
*
)
key
;
/*** @brief 删除特定的键,对应的钥匙串数据 */
+
(
void
)
removeObjectAtKeyChainWithkey
:(
NSString
*
)
key
;
/// 用户是否点击了隐私协议 点击同意之后才会获取 device_id
/// 用户是否点击了隐私协议 点击同意之后才会获取 device_id
+
(
BOOL
)
showPrivatePolicy
;
+
(
BOOL
)
showPrivatePolicy
;
/// 请求获取IDFA授权 (ios14 异步回调, ios14之前直接回调)
/// @param completeBlock 回调执行结果
+
(
void
)
requestTrackingAuthorizaWithCompletionHandler
:(
PhobosGetIDFACompleteBlock
)
completeBlock
;
@end
@end
NS_ASSUME_NONNULL_END
NS_ASSUME_NONNULL_END
GMPhobos/Classes/PhobosDevice.m
View file @
2033e44d
...
@@ -7,8 +7,8 @@
...
@@ -7,8 +7,8 @@
#import "PhobosDevice.h"
#import "PhobosDevice.h"
#import <AdSupport/ASIdentifierManager.h>
#import <AdSupport/ASIdentifierManager.h>
#import <SAMKeychain/SAMKeychain.h>
#import <GMCache/GMCache.h>
#import <GMCache/GMCache.h>
#import <SAMKeychain/SAMKeychain.h>
#import "PhobosUtil.h"
#import "PhobosUtil.h"
NSString
*
const
KprivatePolicyNotification
=
@"gm_popup_private_policy_notification"
;
NSString
*
const
KprivatePolicyNotification
=
@"gm_popup_private_policy_notification"
;
...
@@ -21,33 +21,11 @@ NSString *const IDFA = @"idfa";
...
@@ -21,33 +21,11 @@ NSString *const IDFA = @"idfa";
// 默认获取不到的idfa
// 默认获取不到的idfa
NSString
*
defaultIDFA
=
@"00000000-0000-0000-0000-000000000000"
;
NSString
*
defaultIDFA
=
@"00000000-0000-0000-0000-000000000000"
;
static
dispatch_queue_t
queue
;
static
dispatch_queue_t
queue
;
@implementation
PhobosDevice
@implementation
PhobosDevice
#pragma mark - getIDFA
#pragma mark - IDFA
/*同步获取IDFA 直接从钥匙串中获取 适配ATTrackingManagerAuthorization可使用下面方法
+ (NSString *)getIDFA {
if (![PhobosDevice showPrivatePolicy]) {
return defaultIDFA;
}
//直接从钥匙串中获取
NSString *keyChainIDFA = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
if ([self checkIdfaIsNull:keyChainIDFA]) {
//如果为空从钥匙串中取获取
keyChainIDFA = [self getKeyChainService:IDFA account:keyChainAccount];
} else {
//如果获取到存储到钥匙串中
[self saveKeyChainWithValue:keyChainIDFA service:IDFA account:keyChainAccount];
}
if ([self checkIdfaIsNull:keyChainIDFA]) {
keyChainIDFA = defaultIDFA;
}
return keyChainIDFA;
}*/
/** iOS 14 适配 ATTrackingManagerAuthorizationStatus */
/** iOS 14 适配 ATTrackingManagerAuthorizationStatus */
//同步获取IDFA 直接从钥匙串中获取
//同步获取IDFA 直接从钥匙串中获取
+
(
NSString
*
)
getIDFA
{
+
(
NSString
*
)
getIDFA
{
...
@@ -55,8 +33,8 @@ static dispatch_queue_t queue;
...
@@ -55,8 +33,8 @@ static dispatch_queue_t queue;
return
defaultIDFA
;
return
defaultIDFA
;
}
}
//直接从钥匙串中获取
//直接从钥匙串中获取
NSString
*
keyChainIDFA
=
[
self
getKeyChainService
:
IDFA
account
:
keyChainAccount
];
NSString
*
keyChainIDFA
=
[
PhobosDevice
fetchObjectAtKeyChainWithkey
:
IDFA
];
if
([
self
checkIdfaIsNull
:
keyChainIDFA
])
{
if
([
PhobosDevice
checkIdfaIsNull
:
keyChainIDFA
])
{
keyChainIDFA
=
defaultIDFA
;
keyChainIDFA
=
defaultIDFA
;
}
}
return
keyChainIDFA
;
return
keyChainIDFA
;
...
@@ -73,8 +51,8 @@ static dispatch_queue_t queue;
...
@@ -73,8 +51,8 @@ static dispatch_queue_t queue;
NSString
*
idfaString
;
NSString
*
idfaString
;
if
(
status
==
ATTrackingManagerAuthorizationStatusAuthorized
)
{
if
(
status
==
ATTrackingManagerAuthorizationStatusAuthorized
)
{
idfaString
=
[[
ASIdentifierManager
sharedManager
]
advertisingIdentifier
].
UUIDString
;
idfaString
=
[[
ASIdentifierManager
sharedManager
]
advertisingIdentifier
].
UUIDString
;
if
(
!
[
self
checkIdfaIsNull
:
idfaString
])
{
if
(
!
[
PhobosDevice
checkIdfaIsNull
:
idfaString
])
{
[
self
saveKeyChainWithValue
:
idfaString
service
:
IDFA
account
:
keyChainAccount
];
[
PhobosDevice
storeObjectAtKeyChainWithkey
:
IDFA
object
:
idfaString
];
}
}
}
else
{
}
else
{
// NSLog(@"请在设置-隐私-跟踪中允许App请求跟踪");
// NSLog(@"请在设置-隐私-跟踪中允许App请求跟踪");
...
@@ -91,10 +69,10 @@ static dispatch_queue_t queue;
...
@@ -91,10 +69,10 @@ static dispatch_queue_t queue;
NSString
*
idfaString
;
NSString
*
idfaString
;
if
([[
ASIdentifierManager
sharedManager
]
isAdvertisingTrackingEnabled
])
{
if
([[
ASIdentifierManager
sharedManager
]
isAdvertisingTrackingEnabled
])
{
idfaString
=
[[[
ASIdentifierManager
sharedManager
]
advertisingIdentifier
]
UUIDString
];
idfaString
=
[[[
ASIdentifierManager
sharedManager
]
advertisingIdentifier
]
UUIDString
];
if
(
!
[
self
checkIdfaIsNull
:
idfaString
])
{
if
(
!
[
PhobosDevice
checkIdfaIsNull
:
idfaString
])
{
// 标示 用户已授权打开
// 标示 用户已授权打开
status
=
3
;
status
=
3
;
[
self
saveKeyChainWithValue
:
idfaString
service
:
IDFA
account
:
keyChainAccount
];
[
PhobosDevice
storeObjectAtKeyChainWithkey
:
IDFA
object
:
idfaString
];
}
}
}
else
{
}
else
{
// 表示用户拒绝打开
// 表示用户拒绝打开
...
@@ -113,7 +91,7 @@ static dispatch_queue_t queue;
...
@@ -113,7 +91,7 @@ static dispatch_queue_t queue;
return
!
idfa
.
length
||
[
idfa
isEqualToString
:
defaultIDFA
];
return
!
idfa
.
length
||
[
idfa
isEqualToString
:
defaultIDFA
];
}
}
#pragma mark -
get
IDFV
#pragma mark - IDFV
+
(
NSString
*
)
getIDFV
{
+
(
NSString
*
)
getIDFV
{
if
(
!
[
PhobosDevice
showPrivatePolicy
])
{
if
(
!
[
PhobosDevice
showPrivatePolicy
])
{
return
defaultIDFA
;
return
defaultIDFA
;
...
@@ -121,7 +99,7 @@ static dispatch_queue_t queue;
...
@@ -121,7 +99,7 @@ static dispatch_queue_t queue;
return
[[[
UIDevice
currentDevice
]
identifierForVendor
]
UUIDString
];
return
[[[
UIDevice
currentDevice
]
identifierForVendor
]
UUIDString
];
}
}
#pragma mark -
get
DEVICEID
#pragma mark - DEVICEID
+
(
NSString
*
)
getDEVICEID
{
+
(
NSString
*
)
getDEVICEID
{
if
(
!
[
PhobosDevice
showPrivatePolicy
])
{
if
(
!
[
PhobosDevice
showPrivatePolicy
])
{
return
defaultIDFA
;
return
defaultIDFA
;
...
@@ -133,19 +111,19 @@ static dispatch_queue_t queue;
...
@@ -133,19 +111,19 @@ static dispatch_queue_t queue;
return
idfa
;
return
idfa
;
}
}
#pragma mark - UQID
+
(
NSString
*
)
getUQID
{
+
(
NSString
*
)
getUQID
{
if
(
!
[
PhobosDevice
showPrivatePolicy
])
{
if
(
!
[
PhobosDevice
showPrivatePolicy
])
{
return
defaultIDFA
;
return
defaultIDFA
;
}
}
NSString
*
deviceId
=
[
self
getKeyChainService
:
DEVICEID
account
:
keyChainAccount
];
NSString
*
deviceId
=
[
PhobosDevice
fetchObjectAtKeyChainWithkey
:
DEVICEID
];
if
([
self
checkIdfaIsNull
:
deviceId
])
{
if
([
PhobosDevice
checkIdfaIsNull
:
deviceId
])
{
deviceId
=
[
self
getIDFV
];
deviceId
=
[
self
getIDFV
];
[
self
saveKeyChainWithValue
:
deviceId
service
:
DEVICEID
account
:
keyChainAccount
];
[
PhobosDevice
storeObjectAtKeyChainWithkey
:
DEVICEID
object
:
deviceId
];
}
}
return
deviceId
;
return
deviceId
;
}
}
#pragma mark - 钥匙串封装
#pragma mark - 钥匙串封装
+
(
void
)
saveKeyChainWithValue
:
(
NSString
*
)
value
service
:
(
NSString
*
)
service
account
:
(
NSString
*
)
account
{
+
(
void
)
saveKeyChainWithValue
:
(
NSString
*
)
value
service
:
(
NSString
*
)
service
account
:
(
NSString
*
)
account
{
//避免在重复相同的key 重复设置
//避免在重复相同的key 重复设置
...
@@ -162,9 +140,43 @@ static dispatch_queue_t queue;
...
@@ -162,9 +140,43 @@ static dispatch_queue_t queue;
}
}
}
}
//根据 service 与账户keyChain 获取存储的值
/*** @brief 给特定的键,标记钥匙串数据并存储 */
+
(
NSString
*
)
getKeyChainService
:
(
NSString
*
)
service
account
:
(
NSString
*
)
account
{
+
(
void
)
storeObjectAtKeyChainWithkey
:
(
NSString
*
)
key
object
:
(
id
<
NSCoding
>
)
object
{
return
[
SAMKeychain
passwordForService
:
service
account
:
account
];
NSAssert
([
PhobosDevice
gmKeyChain_isNonEmpty
:
key
],
@"key不能为空"
);
if
(
!
[
PhobosDevice
gmKeyChain_isNonEmpty
:
key
])
{
return
;
}
[
self
saveKeyChainWithValue
:
object
service
:
key
account
:
keyChainAccount
];
}
/*** @brief 给特定的键,获取对于的钥匙串数据 */
+
(
id
)
fetchObjectAtKeyChainWithkey
:
(
NSString
*
)
key
{
NSAssert
([
PhobosDevice
gmKeyChain_isNonEmpty
:
key
],
@"key不能为空"
);
if
(
!
[
PhobosDevice
gmKeyChain_isNonEmpty
:
key
])
{
return
nil
;
}
return
[
SAMKeychain
passwordForService
:
key
account
:
keyChainAccount
];
}
/*** @brief 删除特定的键,对应的钥匙串数据 */
+
(
void
)
removeObjectAtKeyChainWithkey
:
(
NSString
*
)
key
{
NSAssert
([
PhobosDevice
gmKeyChain_isNonEmpty
:
key
],
@"key不能为空"
);
if
(
!
[
PhobosDevice
gmKeyChain_isNonEmpty
:
key
])
{
return
;
}
[
SAMKeychain
deletePasswordForService
:
key
account
:
keyChainAccount
];
}
+
(
BOOL
)
gmKeyChain_isNonEmpty
:
(
NSString
*
)
key
{
NSMutableCharacterSet
*
emptyStringSet
=
[[
NSMutableCharacterSet
alloc
]
init
];
[
emptyStringSet
formUnionWithCharacterSet
:
[
NSCharacterSet
whitespaceAndNewlineCharacterSet
]];
[
emptyStringSet
formUnionWithCharacterSet
:
[
NSCharacterSet
characterSetWithCharactersInString
:
@" "
]];
if
([
key
length
]
==
0
)
{
return
NO
;
}
NSString
*
str
=
[
key
stringByTrimmingCharactersInSet
:
emptyStringSet
];
return
[
str
length
]
>
0
;
}
}
+
(
BOOL
)
showPrivatePolicy
{
+
(
BOOL
)
showPrivatePolicy
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment