我刚刚将我的应用程序提交到Apple Store并且由于以下问题而提交失败,我对如何解决它感到很困惑。
来自Apple - 17.2详情 - 我们注意到您的应用需要用户 注册个人信息以访问非基于帐户 特征。在允许之前,应用不需要用户注册 访问应用程序内容和未关联的功能 特别是对用户。
后续步骤 - 需要共享个人用户的用户注册 信息必须是可选的或与帐户特定相关联 功能。此外,所请求的信息必须是 与功能相关。
我的应用使用CloudKit来保存,检索和共享记录。但该应用程序本身并不要求任何个人详细信息,也不会分享任何个人详细信息,如电子邮件,姓名,出生日期......,它只是要求用户在设备上激活iCloud帐户。然后,CloudKit使用iCloud凭据才能工作。
因为:
而变得混乱1 - 我无法改变CloudKit的工作方式,并且不再要求用户登录iCloud。每个使用CloudKit的应用都需要用户登录iCloud。
2 - 如同其他应用程序(例如facebook),如果您不登录该应用程序,则无法从根本上发挥作用。因此,登录不依赖于特定功能,而是与应用程序的整个功能相关联。
每次应用程序启动时,都会在初始屏幕上(在进入应用程序功能区域之前)调用代码示例,以确保用户具有iCloud。如果用户有iCloud我将他带入应用程序。如果不是我阻止他并让他让iCloud排序。但我想这就是他们在这里抱怨的 - “需要共享个人信息的用户注册必须是可选的或与帐户特定功能相关联。此外,所请求的信息必须与功能相关。”。
这让我处于一个相当混乱的境地。不确定如何解决问题。有没有人与CloudKit / iCloud / AppStore提交有类似的问题?任何见解?
iCloud检查代码如下:
func cloudKitCheckIfUserIsAuthenticated (result: (error: NSError?, tryAgain: Bool, takeUserToiCloud: Bool) -> Void){
let container = CKContainer.defaultContainer()
container.fetchUserRecordIDWithCompletionHandler{
(recordId: CKRecordID?, error: NSError?) in
dispatch_async(dispatch_get_main_queue()) {
if error != nil
{
if error!.code == CKErrorCode.NotAuthenticated.rawValue
{
// user not on icloud, taki him there
print("-> cloudKitCheckIfUserIsAuthenticated - error fetching ID - not on icloud")
// ERROR, USER MUST LOGIN TO ICLOUD - LOCK HIM OUTSIDE THE APP
result(error: error, tryAgain: false, takeUserToiCloud: true)
}
print("-> cloudKitCheckIfUserIsAuthenticated - error fetching ID - other error \(error?.description)")
// OTHER ERROR, TRY AGAIN
result(error: error, tryAgain: true, takeUserToiCloud: false)
}
else
{
let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
publicDatabase.fetchRecordWithID(recordId!,
completionHandler: {(record: CKRecord?, error: NSError?) in
if error != nil
{
// error getting user ID, try again
print("-> cloudKitCheckIfUserIsAuthenticated - error fetching user record - Error \(error)")
// ERROR, TRY AGAIN
result(error: error, tryAgain: true, takeUserToiCloud: false)
}
else
{
if record!.recordType == CKRecordTypeUserRecord
{
// valid record
print("-> cloudKitCheckIfUserIsAuthenticated - fetching user record - valid record found)")
// TAKE USER INSIDE APP
result(error: error, tryAgain: false, takeUserToiCloud: false)
}
else
{
// not valid record
print("-> cloudKitCheckIfUserIsAuthenticated - fetching user record - The record that came back is not a user record")
// ERROR, TRY AGAIN
result(error: error, tryAgain: true, takeUserToiCloud: false)
}
}
})
}
}
}
}
答案 0 :(得分:0)
最初,我的应用程序会要求用户在启动屏幕上登录iCloud。如果用户没有iCloud帐户功能,他们将无法进入应用程序。
<强>解决方案强>
让用户进入应用程序并单击主要部分。事实上,该应用程序是完全无用的,但用户可以看到它是奇怪的空屏幕,没有能够保存或加载任何东西。当他们尝试加载或保存东西时,我会提示他们登录iCloud以使应用程序可用。
实际结果
我认为苹果的变更请求不会为UX带来任何有价值的东西。事实上,它只是增加了用户的复杂性,以便了解他能做什么和不能做什么。
作为一个例子,如果用户不提供他的个人信息,Facebook将用户锁定在外面,因为没有这些数据,应用程序绝对没有用,这就是我的情况...你可以说可以说用户应该能够进入,但他会看到或做什么?然后,您必须满足此UX构建的所有异常,并为用户发出警告,以便在恼人的警告模式下修复帐户问题。
所以我不确定Facebook如何获得批准,我不能。
虽然我获得了应用程序批准,但我不同意Apple反馈以任何方式改进了应用程序。