考虑到我在iPhone上收到推送通知.
怎么了:
谢谢你的回答
我尝试制作推送通知服务器.我通过telnet连接到ssl://gateway.sandbox.push.apple.com:2195.
telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.229...
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is '^]'.
Run Code Online (Sandbox Code Playgroud)
我的*.pem还可以(我在另一台服务器上使用它).我在另一台服务器上使用SAME项目,它在那里工作,但其他服务器上的克隆没有.
我得到这些错误:
Warning: stream_socket_client() [function.stream-socket-client]: SSL operation failed with code 1. OpenSSL Error messages: error:14094415:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate expired in /var/www/try.php on line 69
Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in /var/www/try.php on line 69
Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /var/www/try.php on line 69
Run Code Online (Sandbox Code Playgroud)
证书未过期,它适用于其他服务器,日期相同.
有人知道错误是什么吗?
我继续努力
Apache/2.2.9 (Debian) PHP/5.2.17-0.dotdeb.0 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g
Run Code Online (Sandbox Code Playgroud)
编辑:似乎,在不同的服务器上使用相同的证书不起作用.也许这被Apples服务器阻止了.
我将在我的应用程序上激活APNS,所以我对以下内容感到有些困惑.
这对我来说很棒.提前致谢.
是否可以在单击一个推送通知时从通知中心删除推送通知并启动应用程序?
大多数应用似乎都会留下通知.我读到另一个问题:
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
Run Code Online (Sandbox Code Playgroud)
可能会工作,但它不适合我.
一旦点击,Facebook应用程序肯定会删除推送通知.
notifications apple-push-notifications ios notificationcenter
我正在列出为我的本地通知按下的操作,但有没有办法确定用户何时解除通知?
这是我在AppDelegate中听我的动作的方式,但是解雇并没有解雇这个问题:
func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, completionHandler: () -> Void) {
var actionName: String? = nil
if let identifier = identifier {
switch identifier {
case "snoozeAction":
actionName = "snoozeActionTapped"
break
default: break
}
if let name = actionName {
NSNotificationCenter.defaultCenter().postNotificationName(name, object: nil)
}
}
completionHandler()
}
Run Code Online (Sandbox Code Playgroud) 使用较新的Firebase云消息传递与方法调配我成功地能够didReceiveRemoteNotification在我的应用程序被预先考虑时在我的应用程序委托中的方法中接收有效负载.然而,我没有获得任何类型的有效负载,didReceiveRemoteNotification并且当我的应用程序被后台化时不会被调用,尽管api响应消息已成功发送(见下文)
这是我发送到FCM api以触发推送通知的请求 https://fcm.googleapis.com/fcm/send
{
"to": "{valid-registration-token}",
"priority":"high", //others suggested setting priority to high would fix, but did not
"notification":{
"body":"Body3",
"title":"test"
}
}
Run Code Online (Sandbox Code Playgroud)
来自FCM的回应
{
"multicast_id": 6616533575211076304,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{
"message_id": "0:1468906545447775%a4aa0efda4aa0efd"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是我的appDelegate代码
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
Fabric.with([Crashlytics.self])
FIRApp.configure()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotification),
name: kFIRInstanceIDTokenRefreshNotification, object: nil)
return true
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : …Run Code Online (Sandbox Code Playgroud) apple-push-notifications ios firebase swift firebase-cloud-messaging
我们的应用使用Firebase手机验证.由于需要推送,App Store审核已拒绝该应用:
准则4.5.4 - 设计 - Apple站点和服务
我们注意到您的应用需要推送通知才能运行.
具体来说,我们注意到如果我们的设备上未启用"推送通知"设置,则在应用程序中输入我们的电话号码后会收到错误消息.
下一步
推送通知必须是可选的,并且必须获得用户同意才能在应用中使用.
他们还附上了描述Firebase错误的屏幕截图"需要为应用程序设置远程通知和后台提取[...]"
Firebase文档指出,电话验证功能绝对需要APN通知:https:
//firebase.google.com/docs/auth/ios/phone-auth
要使用电话号码身份验证,您的应用必须能够从Firebase接收APN通知.当您首次在设备上使用电话号码登录用户时,Firebase身份验证会向设备发送静音推送通知,以验证电话号码登录请求是否来自您的应用.(因此,电话号码登录无法在模拟器上使用.)
但是,App Store审核指南规定,为了使应用程序正常运行,不得要求推送通知:https://developer.apple.com/app-store/review/guidelines/
4.5.4应用程序无需推送通知即可运行,不得用于广告,促销或直接营销目的,也不得用于发送敏感的个人或机密信息.
用户需要在他们可以使用该应用程序之前登录(该应用程序是关于向您的客人发送数字GIF邀请并共享照片),这就是为什么推送通知基本上是应用程序运行所必需的,如果登录方法是Firebase手机AUTH.
我们已经对应用程序进行了大量测试,并且在启用推送通知时,身份验证可以顺利运行(在真实设备上,在分发Ad Hoc构建中使用生产环境和使用沙箱环境进行开发构建).
想想看,App Review团队甚至如何禁用推送通知?通知中心设置不会停止实际推送,它只是不显示它们.
我们已经通过此设置进行了测试,并且firebase phone auth工作正常,推送仍然按预期进行.
我对这个问题感到非常惊讶,因为Firebase是一个巨大的服务提供商.有没有人遇到过这个问题?是否有计划删除APN对电话验证的要求?是否可能有其他方式使用Firebase手机auth而不推?
app-store apple-push-notifications ios firebase firebase-analytics
我有与 APNS 设备令牌相关的问题。在我使用 Xcode 10.2 和 iOS 12.1 之前。此时我曾经在委托方法中获取设备令牌
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
Run Code Online (Sandbox Code Playgroud)
我正在像这样注册 APNS,它运行良好。
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if(!error){
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
}];
Run Code Online (Sandbox Code Playgroud)
现在,当将 iOS 13 安装到我的 iPhone 设备并使用 Xcode 11 时,不会调用委托方法 didRegisterForRemoteNotificationsWithDeviceToken。无法理解这个问题。我已经对此进行了研究,我知道从委托方法获取令牌有一些变化,但在我的情况下,委托方法甚至没有被调用。同样,它在 iOS 12 上运行良好。
我需要将通知推送到我的应用安装的数万个iOS设备.我正在尝试使用PushSharp,但我在这里缺少一些基本概念.起初我尝试在Windows服务中实际运行它,但无法使其工作 - 从_push.QueueNotification()调用获取空引用错误.然后我完成了所记录的示例代码所做的工作并且它有效:
PushService _push = new PushService();
_push.Events.OnNotificationSendFailure += new ChannelEvents.NotificationSendFailureDelegate(Events_OnNotificationSendFailure);
_push.Events.OnNotificationSent += new ChannelEvents.NotificationSentDelegate(Events_OnNotificationSent);
var cert = File.ReadAllBytes(HttpContext.Current.Server.MapPath("..pathtokeyfile.p12"));
_push.StartApplePushService(new ApplePushChannelSettings(false, cert, "certpwd"));
AppleNotification notification = NotificationFactory.Apple()
.ForDeviceToken(deviceToken)
.WithAlert(message)
.WithSound("default")
.WithBadge(badge);
_push.QueueNotification(notification);
_push.StopAllServices(true);
Run Code Online (Sandbox Code Playgroud)
问题#1:这很好用,我看到iPhone上的通知弹出.但是,由于它被称为推送服务,我认为它的行为就像一个服务 - 意思是,我实例化它并在Windows服务中调用_push.StartApplePushService().我想实际排队我的通知,我可以在前端做这个(管理员应用程序,让我们说):
PushService push = new PushService();
AppleNotification notification = NotificationFactory.Apple()
.ForDeviceToken(deviceToken)
.WithAlert(message)
.WithSound("default")
.WithBadge(badge);
push.QueueNotification(notification);
Run Code Online (Sandbox Code Playgroud)
显然(就像我已经说过的那样),它没有用 - 最后一行不断抛出空引用异常.
我很难找到任何其他类型的文档来展示如何以服务/客户端方式设置它(而不是一次调用所有内容).是否有可能或者我错过了应该如何利用PushSharp的观点?
问题2:此外,我似乎无法找到一种方法同时定位多个设备令牌,而无需循环遍历它们并一次排队一个通知.这是唯一的方法还是我在这里错过了什么?
提前致谢.
.net c# push-notification apple-push-notifications pushsharp
有没有办法更新徽章中的号码而不显示提醒或打开应用程序?
我正在编写一个应该始终在图标徽章中显示当前未读消息数的应用程序,但我想这样做而不向用户显示任何警报.
我正在为iOS 5.0+开发.
编辑:更清楚的是,当应用程序未运行时,我正在询问一种方法.我希望服务器在没有显示警报的情况下推送新的徽章号码.这可能吗?