在移动设备(iPhone/Android)上,通过实施WebSockets与HTTP对电池消耗的影响是什么?
假设我正在构建一个即时消息应用程序并有两个选项:
有人告诉我,维持一个持久的WebSocket连接将是一个巨大的电池耗费因为它需要天线持续活动,而不是在每次请求后断电 - 但这是真的吗?
这个答案表明,在iOS上,每个设备始终与推送通知服务保持持久连接(类似于WebSockets,我猜),那么这是不是表明设备的天线无论如何都是24/7运行?
对于即时消息应用程序来说,HTTP请求的额外开销是非常微不足道的,但是在需要不断下载大量项目的应用程序中,持久的WebSocket连接将非常有用.有关在移动设备上维护长期WebSocket连接的任何见解(特别是有关电池消耗)将非常有用!
当我的后端服务器向GCM服务器发送post请求时,我收到HTTP 401的授权错误.
我按照这里描述的步骤:
http://developer.android.com/google/gcm/http.html#auth_error
>> api_key=AIzaSyDEy3...
>> curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_id\":\"ABC\"}"
Run Code Online (Sandbox Code Playgroud)
我明白了:
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
在故障排除中它说:
Authentication Error
The sender account that you're trying to use to send a message couldn't be authenticated. Possible causes are:
1. Authorization header missing or with invalid syntax.
2. Invalid project number sent as key.
3. Key valid but with GCM service disabled.
4. Request originated from a server not …Run Code Online (Sandbox Code Playgroud) android push-notification http-status-code-401 google-cloud-messaging
我正在调查firebase和angularfire是否适合我即将开展的项目.
其中一个要求是当应用程序在发送给用户的新私人消息上关闭时通知用户,即.推送通知.
firebase会处理这个吗?
与此问题类似:如何在applicationDidBecomeActive上访问远程推送通知数据?
但不同的是,当您进入时applicationDidBecomeActive,如果您单击了应用程序图标而不是推送通知,您如何访问通知数据.
流程是:如果你点击push notification,然后didReceiveRemoteNotification将被触发,但如果你点击原来的应用程序图标,只applicationDidBecomeActive将被触发,didReceiveRemoteNotification将不会被调用.
我正在寻找后一种情况,以便如何访问推送通知数据.
(两种情况都假设应用程序处于后台并且尚未被杀死.)
我们的应用程序使用APNS接收推送通知.但是,我们的客户声称他们的一些设备没有收到通知,并认为他们"必须"确保通知100%交付.但我已经在某处读过APNS不是100%可靠的,并且应该存在通知未交付的情况.
我目前对如何确保随时收到APNS感到恐慌.我已阅读的情况下,这可能APNS未送达(设备可能离线).但我们的测试表明即使设备在线(Wifi或3G),有时APNS也没有交付.
是否有任何特定案例可能无法提供APNS?或者我们(开发人员)可以使用代码来确保接收所有通知吗?我在代码中所做的只是将应用程序注册到远程通知并写入didRegisterForRemoteNotificationsWithDeviceToken,然后将设备令牌丢弃到我们的服务器.
任何帮助将不胜感激,因为如果他们的所有设备都没有收到APNS,我们的客户几乎会杀了我们!
我的问题是我想显示初始推送通知提示的加载屏幕"应用程序想要向您发送推送通知".
因此,如果用户点击,yes我可以继续并在随后调用的委托方法中启动应用程序:
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
[self hideLoadingScreen];
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
[self hideLoadingScreen];
}
Run Code Online (Sandbox Code Playgroud)
但是,如果用户点击no,则不会调用这些方法,这是有道理的.我的问题是,是否有一个不同的委托方法,如果他拒绝,会被解雇?
我的问题是如果no被选中,加载屏幕永远不会消失.所以我不知何故需要知道用户何时完成选择.
当我在Facebook上收到消息时,我会在锁定屏幕(iOS)上收到推送通知.然后我在桌面上阅读此消息.在此之后,此推送通知消失,而不与电话进行任何交互.如何自行删除过时的通知?
第二种用法可能是将通知拼接在一起.例如,当有人喜欢你的照片时,Instagram会向你发送信息.20次之后,您的通知屏幕已损坏且无法读取.但是使用与Facebook相同的原则似乎可以删除相同类型的先前通知并使用增加的计数器创建新的.没有"用户A喜欢照片X,用户B喜欢照片Y等",而是"20个用户喜欢照片Z"而不是.
我在这里看过几个关于类似主题的内容,但到目前为止仍然没有答案.谢谢!
notifications push-notification apple-push-notifications ios
我正在开发一个包含大量遗留代码的大型应用程序.目前 - 有一个实现:
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
Run Code Online (Sandbox Code Playgroud)
问题是它仅在应用程序位于前台或用户在应用程序处于后台时点击通知时调用.我试图实现:
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
Run Code Online (Sandbox Code Playgroud)
但该应用程序的行为相同.在任何情况下 - 当应用程序在后台时,不会调用此方法.可能是什么问题呢?
对于Swift3/iOS10,请看此链接:
ios10,Swift 3和Firebase推送通知(FCM)
我正在尝试使用Firebase进行通知,我完全按照文档中的描述进行了集成.但我不明白为什么不起作用.当我构建我的项目时,我看到这一行:
2016-05-25 16:09:34.987: <FIRInstanceID/WARNING> Failed to fetch default token Error Domain=com.firebase.iid Code=0 "(null)"
Run Code Online (Sandbox Code Playgroud)
这是我的AppDelegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
FIRApp.configure()
FIRDatabase.database().persistenceEnabled = true
var service: DataService = DataService()
service.start()
registerForPushNotifications(application)
application.registerForRemoteNotifications()
return true
}
func registerForPushNotifications(application: UIApplication) {
let notificationSettings = UIUserNotificationSettings(
forTypes: [.Badge, .Sound, .Alert], categories: nil)
application.registerUserNotificationSettings(notificationSettings)
}
func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
if notificationSettings.types != .None {
application.registerForRemoteNotifications()
}
}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { …Run Code Online (Sandbox Code Playgroud) 我在我的应用中集成了推送通知.用户将收到推送通知以加入群组.当用户单击Join时,我将处理代码中的某些内容.所以我正在实施:
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
Run Code Online (Sandbox Code Playgroud)
当应用程序未运行时,此功能正常.
当应用程序运行时,我没有看到任何UIAlertView.如何让我的应用程序显示推送通知警报,以便用户仍然可以决定是否加入?