Q 1:為啥收不到推送(1)绩郎?
如果收到推送時,App 在前臺運行溉仑,那么:
- iOS 10 before 頂部橫幅不會彈出浊竟。沒有任何展示津畸,你以為「沒有收到推送」肉拓。
- iOS 10 after 如果沒有實現(xiàn)以下代碼,也是不會有任何提示的徘郭,你以為「沒有收到推送」。
//UNUserNotificationCenterDelegate
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
}
Q 2:為啥收不到推送(2)?
iOS 使用推送需要 配置推送證書抱环,如果你配過了镇草,仍然收不到推送,建議再配一遍竖伯。筆者曾經(jīng)多次遠(yuǎn)程控制手把手給其他開發(fā)者配置證書七婴,結(jié)果全都重新配一遍就能收到推送了察滑。
Q 3:為啥收不到推送(3)?
Xcode 8 這里打開户盯。
Q 4:為啥收不到推送(4)莽鸭?
推送時開發(fā)環(huán)境蒋川、發(fā)布環(huán)境一一對應(yīng)撩笆。環(huán)境不對應(yīng)夕冲,收不到裂逐。
Q 5:為啥收不到推送(5)卜高?
要在 Apple Developer Center 把你的測試設(shè)備加入到 Device 里面弥姻。
Q 6:為啥收不到推送(6)南片?
一臺手機能收到,另一臺不能收到庭敦。要把你的另一臺測試設(shè)備也加入到 Apple Deveice 里面疼进。。秧廉。
Q 7:為啥收不到推送(7)伞广?
高峰時段你再等幾秒就收到了。
Q 8:為啥還是收不到推送(8)疼电?嚼锄??
Apple 服務(wù)器宕機了区丑,并不是所有的設(shè)備都收不到推送了,而是新的設(shè)備無法成功注冊推送服務(wù)了修陡。
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
}
在該方法中刊苍,無法返回有效的 deviceToken 值了。等兩天就好了濒析。
Q 9:為啥生產(chǎn)環(huán)境收不到推送正什?
打包,安裝号杏,測試婴氮。即可。
Q 10:為啥 App 右上角的角標(biāo) badge 不清 0盾致?
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
Q 11:為啥 App 右上角的角標(biāo) badge 不自增主经?
推送時 badge 參數(shù)設(shè)置: +n自增、-n自減庭惜、n固定值罩驻。
自增、自減一般第三方推送服務(wù)支持才有护赊。
Q 12:為啥 App 在后臺收到推送代碼不執(zhí)行惠遏?
Background Remote Notification
Q 13:為啥 App 在殺死后收到推送代碼不執(zhí)行?
App 殺死啥代碼都不能執(zhí)行骏啰。iOS 10 你可以試試 Notification Service Extension节吮,詳情見 這篇文章 的 Service Extension 部分。
Q 14:為啥收到推送沒聲音(1)判耕?
哥哥手機左側(cè)靜音鍵麻煩撥上來透绩。
Q 15:為啥收到推送沒聲音(2)?
推送時 sound 字段設(shè)置為:default
Q 16:為啥收到推送不播放自定義聲音(1)?
1.聲音文件拖拽并拷貝并生成索引到工程任意位置(在 Xcode 里拖拽)
2.推送時 sound 字段設(shè)置為:name.mp3帚豪。需要名字后綴完全一樣碳竟。
Q 17:為啥收到推送不播放自定義聲音(2)?
拖拽文件時沒有選擇拷貝狸臣,連線測試有聲音瞭亮,拔線沒聲音,聲音文件在電腦里固棚,拔線后缺失统翩。從工程目錄刪除該文件,再重新添加再 build此洲。
Q 18:為啥點擊 App 圖標(biāo)進(jìn)入 App 收不到推送(1)厂汗?
要點推送橫幅、通知中心條目進(jìn)入 App 才能收到呜师。
Q 19:為啥點擊 App 圖標(biāo)進(jìn)入 App 收不到推送(2)娶桦?
解決方法:再發(fā)一條透傳消息。只處理消息汁汗,不處理推送衷畦。不論點哪里進(jìn)的 App,都能保證該事件被處理知牌。
Q 20:為啥推送一條手機會收到兩條一樣的祈争?
iOS 9 的 bug。
Q 21:為啥點擊橫幅不能跳轉(zhuǎn)到指定的界面角寸?
- 點擊推送啟動 App 在這里捕獲推送內(nèi)容:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
}
- 點擊推送從后臺喚醒 App 在這里捕獲推送內(nèi)容:
- iOS 7 before
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
}
- iOS 7~9
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
}
- iOS 10
//UNUserNotificationCenterDelegate
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
NSDictionary *userInfo = response.notification.request.content.userInfo;
}
Q 22:為啥點擊了推送菩混,通知中心條目不消除(1)?
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
Q 23:為啥點擊了推送扁藕,通知中心條目不消除(2)沮峡?
推送時 badge 參數(shù)為 0,再調(diào)用 Q 22 導(dǎo)致通知中心沒有發(fā)生變化亿柑,此時應(yīng)設(shè)為1邢疙,再設(shè)為0:
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
Q 24:為啥用戶不允許通知,以后再也不能彈出請求通知權(quán)限的提示窗了望薄?
先獲取用戶推送權(quán)限設(shè)置情況:
// iOS 8 before
UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
// iOS 8~9
UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings];
UIUserNotificationType type = settings.types;
// iOS 10
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
}
如果沒開疟游,跳轉(zhuǎn)到 設(shè)置 - yourApp 頁面讓用戶設(shè)置:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Q 25:為啥 iOS 10 不能注冊推送服務(wù)?
// iOS 8 before
UIRemoteNotificationType type = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound;
[application registerForRemoteNotificationTypes:type];
// iOS 8~9
UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:type categories:nil];
[application registerUserNotificationSettings:setting];
// iOS 10
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
NSLog(@"request authorization succeeded!");
}
}];
Q 26:為啥樓主懂的這么多式矫?
因為他是極光推送的可耐程序猿葛格^^乡摹。