iOS被拒条目 - passiony/gillar_wiki GitHub Wiki
- 问题描述:
Your app uses the "prefs:root=" non-public URL scheme...
- 解决方案:
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"prefs:root=%@",[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]]];
[[UIApplication sharedApplication]openURL:url];
替换为
NSURL* url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication]openURL:url options:@{} completionHandler:^(BOOL success) {}];
-
问题描述:
iOS14以上和iOS以下对于idfa的权限申请测略不一样。
13以下,因为默认是开启的,不需要添加权限,不做处理
14以上,默认是关闭的,需要添加申请权限和提示语。
首次使用权限不需要新加oc代码弹出请求获取权限提示,如果用户关闭,再次申请打开,需要新加代码调用获取权限提示语
* 解决方案
-
1.添加framework:
AppTrackingTransparency.framework
-
2.info.plist提示语
//获取广告追踪idfa权限 <key>NSUserTrackingUsageDescription</key> <string>"WordScent" Would Like to Accesss Your Identity for Advertisers To Track the Ads</string>
其它权限提示语参考
//获取相机权限 <key>NSCameraUsageDescription</key> <string>"WordScent" Would Like to Accesss the Camera This will let you take photos and record video.</string> //获取定位权限 <key>NSLocationWhenInUseUsageDescription</key> <string>"WordScent" Would Like to Access Your Location</string> //获取麦克风权限 <key>NSMicrophoneUsageDescription</key> <string>"WordScent" Would Like to Access Your Microphone</string>
-
3.添加弹出框代码
//引入头文件 #import <AppTrackingTransparency/AppTrackingTransparency.h> #import <AdSupport/ASIdentifierManager.h> @implementation UnityAppController - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { //****************** UnityInitApplicationNoGraphics([[[NSBundle mainBundle] bundlePath] UTF8String]); //------------------ if (@available(iOS 14, *)) { // iOS14及以上版本需要先请求权限 [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { // 获取到权限后,依然使用老方法获取idfa if (status == ATTrackingManagerAuthorizationStatusAuthorized) { NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString]; NSLog(@"%@",idfa); } else { NSLog(@"请在设置-隐私-跟踪中允许App请求跟踪"); //可选:跳转到setting } }]; } else { // iOS14以下版本依然使用老方法 // 判断在设置-隐私里用户是否打开了广告跟踪 if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) { NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString]; NSLog(@"%@",idfa); } else { NSLog(@"请在设置-隐私-广告中打开广告跟踪功能"); //可选:跳转到setting } } //------------------ [self selectRenderingAPI]; //******************} end
-
问题描述:
如果添加了fb或者gp等第三方登录,则必须添加苹果登录功能
-
解决方案
- 1.打开苹果开发者后台 developer.apple.com,进入页签Certificates,Identifiers&Profiles,在Identifiers栏目中选择当前项目,添加权限Sign In with App,点击保存
- 2.依次生成三种描述文件(development、adhoc、appleStore),下载后双击导入到XCode工程中
- 3.XCode 工程引入AuthenticationServices.framework
- 4.Unity项目内集成SignInWithApp插件,导入插件,下载地址:
- 5.Unity调用指定接口进行apple登陆
-- 登陆苹果服务器
SignInWithApple.Instance.Login(OnLogin);
-- 验证当前用户身份的状态credentialState,根据返回状态进行界面显示处理
SignInWithApple.Instance.GetCredentialState(appleUserId, OnCredentialState);
-- 当credentialState == UserCredentialState.Authorized-代表当前登陆状态有效
if(credentialState == UserCredentialState.Authorized){
}
- 问题描述: 如果添加了推送功能,证书中必须添加推送
- 解决方案:
- 1.添加Capability:
Push Notifications
,Background Modes
(并勾选Remote notifications) - 2.请求系统打开通知权限,在App安装后只会出现一次,此次弹出窗口后,无论用户选择什么选项都会在App设置中出现通知开关UI;
- 3.获取当前App通知权限时候开启(若未出现系统打开通知权限,此时通知权限为未开启状态);
- 4.若用户关闭通知权限,此次引导用户打开通知权限,只需打开设置即可;
- 1.添加Capability:
/**是否开启推送*/
- (BOOL)isSwitchAppNotification {
if (@available(iOS 10 , *)) {
__block BOOL result = NO;
//异步线程中操作是否完成
__block BOOL inThreadOperationComplete = NO;
[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
if (settings.authorizationStatus == UNAuthorizationStatusDenied) {
result = NO;
}else if (settings.authorizationStatus == UNAuthorizationStatusNotDetermined) {
result = NO;
}else if (settings.authorizationStatus == UNAuthorizationStatusAuthorized) {
result = YES;
}else {
result = NO;
}
inThreadOperationComplete = YES;
}];
while (!inThreadOperationComplete) {
[NSThread sleepForTimeInterval:0];
}
return result;
}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
else if (@available(iOS 8 , *))
{
UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
if (UIUserNotificationTypeNone != setting.types) {
return YES;
}else {
return NO;
}
}else
{
UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if(UIRemoteNotificationTypeNone != type) {
return YES;
}else {
return NO;
}
}
#pragma clang diagnostic pop
}
-
1.内购初始化时机错误被拒
原因:内购功能初始化是异步操作,在打开商城(内购商品相关功能界面)之前,需要判断内购功能是否初始化成功,未完成,则根据具体业务需要与否弹出提示界面。(boggle处理方式为若内购条目未初始化完毕 做图片遮罩(转圈)屏蔽,等到内购初始化完毕后才可点击)
- 1.比较大的Xcode版本(比如ios14的版本)必须升级后再打包,否则新版本的苹果手机 不能正常打开项目