1.不得包含更新按鈕
Design Preamble
Your app includes an update button or alerts the user to update the app. To avoid user confusion, app version updates must utilize the iOS built-in update mechanism.
We've attached screenshot(s) for your reference.
Next Steps
Please remove the update feature from your app. To distribute a new version of your app, upload the new app binary version into the same iTunes Connect record you created for the app's previous version. Updated versions keep the same Apple ID, iTunes Connect ID (SKU), and bundle ID as the original version, and are available free to customers who purchased a previous version.
神奇的是,這個(gè)更新功能在之前的版本就有褐筛,并不是這次提交才加上去的。而之前都審核通過了,這次才給退回來焙格。感覺每個(gè)審核人員的標(biāo)準(zhǔn)不一樣,又或者是某些員工偷懶夷都。眷唉。
解決辦法:
將更新按鈕去掉,改成彈窗式提醒更新囤官。
在合適的地方加入這個(gè)業(yè)務(wù)邏輯冬阳,判斷本地的版本號和APP Store上的版本號,若APP Store的版本更高則彈出提示框提醒更新党饮。
這樣做的好處是審核人員審核時(shí)永遠(yuǎn)不會彈出該彈窗肝陪,審核通過后用戶使用提醒更新的功能是正常的。
Swift代碼:
func remindUserToUpdate() {
let localVersion = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String
let URL = "http://itunes.apple.com/cn/lookup?id=\(APP_ID)" //APP_ID對應(yīng)應(yīng)用的apple id
HTTPTool.GET(URLString: URL, parameters: parameter, success:{ (responseObject) in
let results = responseObject["results"] as! NSArray
let newestVersion = (results[0] as! NSDictionary)["version"] as? String
if newestVersion != nil {
//比較兩個(gè)版本號
if (localVersion! as NSString).compare(newestVersion!) == .OrderedAscending {
let alertVC = UIAlertController.init(title: "升級提示", message: "您的當(dāng)前版本為V\(localVersion)刑顺,發(fā)現(xiàn)新版本V\(newestVersion!)氯窍,是否現(xiàn)在下載新版本?", preferredStyle: .Alert)
let cancelAction = UIAlertAction.init(title: "下次再說", style: .Cancel, handler: nil)
let okAction = UIAlertAction.init(title: "現(xiàn)在升級", style: .Default, handler: { (action) in
let url = NSURL.init(string: "itms://itunes.apple.com/cn/app/he-bi/id\(APP_ID)?mt=8")
UIApplication.sharedApplication().openURL(url!)
})
alertVC.addAction(cancelAction)
alertVC.addAction(okAction)
self.presentViewController(alertVC, animated: true, completion: nil)
}
}
}, failure: { (error) in
debugLog("獲取版本信息失敗\(error)")
})
}
2.微信第三方登陸
We were required to install WeChat before we could sign in with WeChat mechanism. Users should be able to sign in and access their account, without requiring additional applications to be installed.
Next Steps
If you choose to allow users to sign in via WeChat, please use methods that can authenticate users from within your app, such as a native web-view.
這個(gè)可以說是非常普遍的被拒原因蹲堂,一般有第三方登陸的如果不注意這個(gè)問題都會被拒狼讨。蘋果要求沒有安裝微信的用戶也一樣可以使用微信登陸(通過WebView的方式)
解決辦法:
因?yàn)檫@個(gè)問題的普遍性,實(shí)際上微信已經(jīng)開發(fā)出了新的API可以解決這個(gè)問題柒竞,但是在官網(wǎng)上并沒有說明這個(gè)新的API政供。
新的接口在WXApi.h
中可以查看,具體如下:
/*! @brief 發(fā)送Auth請求到微信朽基,支持用戶沒安裝微信布隔,等待微信返回onResp
*
* 函數(shù)調(diào)用后,會切換到微信的界面踩晶。第三方應(yīng)用程序等待微信返回onResp执泰。微信在異步處理完成后一定會調(diào)用onResp。支持SendAuthReq類型渡蜻。
* @param req 具體的發(fā)送請求术吝,在調(diào)用函數(shù)后,請自己釋放茸苇。
* @param viewController 當(dāng)前界面對象排苍。
* @param delegate WXApiDelegate對象,用來接收微信觸發(fā)的消息学密。
* @return 成功返回YES淘衙,失敗返回NO。
*/
+(BOOL) sendAuthReq:(SendAuthReq*) req viewController : (UIViewController*) viewController delegate:(id<WXApiDelegate>) delegate;
使用了這個(gè)接口后腻暮,在沒有安裝微信的iPhone上點(diǎn)擊微信登陸會拉起網(wǎng)頁(使用手機(jī)驗(yàn)證碼登陸):
注意:
如果你的是IPhone應(yīng)用彤守,那么以上所說的接口可以很好解決微信登陸的問題毯侦。但是如果你的是IPhone/IPad應(yīng)用,那么就該換另外一個(gè)解決辦法了具垫。因?yàn)樵摻涌谥恢С諭Phone侈离,IPad無法接收短信,所以沒辦法實(shí)現(xiàn)驗(yàn)證碼登陸的功能筝蚕。
這時(shí)候只能用最原始的辦法去解決了:判斷應(yīng)用是否安裝微信卦碾,沒安裝則隱藏掉微信登陸按鈕。
以上解決辦法均可通過蘋果審核并上架起宽,親測洲胖。
關(guān)于我
我是可樂,在職iOS開發(fā)坯沪,業(yè)余時(shí)間獨(dú)立開發(fā)App绿映,現(xiàn)有上架作品:Mini記賬
公眾號:沙拉可樂 分享獨(dú)立開發(fā)的干貨和背后的故事