我正在开发一个网络应用程序.如果有新内容,如何向iOS用户发送推送通知?
我有一个应用程序,我们已经提交了过去6个月的版本,我们确实使用APNS.升级到Xcode 8后,我收到了Apple的以下电子邮件
亲爱的开发者,
我们发现您最近为APP_NAME发送了一个或多个问题.您的投放成功,但您可能希望在下次投放时更正以下问题:
缺少推送通知权利 - 您的应用程序包含Apple推送通知服务的API,但应用程序签名中缺少aps-environment权利.要解决此问题,请确保在Provisioning Portal中为推送通知启用了App ID.然后,使用包含aps-environment权利的分发配置文件为您的应用签名.这将创建正确的签名,您可以重新提交您的应用程序.有关详细信息,请参阅"本地和推送通知编程指南"中的"供应和开发".如果您的应用不使用Apple推送通知服务,则无需执行任何操作.您可以从将来的提交中删除API以停止此警告.如果您使用第三方框架,则可能需要与开发人员联系以获取有关删除API的信息.
纠正问题后,您可以使用Xcode或Application Loader将新二进制文件上传到iTunes Connect.
问候,
App Store团队
有点奇怪的是我去了developer.apple.com - > 证书,标识符和配置文件,我的AppId确实启用了推送通知.我没有做过任何不同的事情然后我已经完成了它所以很好奇,如果Xcode 8更新破坏了什么.有任何想法吗?
BTW:他们为推送通知编程指南提供的链接在电子邮件中被破坏了,所以这不是一个好兆头.
我有一个iOS应用程序,其中发送了一些推送通知.我的问题是,在点击后,消息/通知会保留在iOS中的通知中心.下次应用程序打开时如何在通知中心删除我的应用程序通知?
我遇到过人们调用setApplicationIconBadgeNumber
零值来清除通知的帖子.这对我来说似乎很奇怪,所以我相信也许存在另一种解决方案?
EDIT1:
我在清除通知时遇到了一些问题.请在这里查看我的代码:
- (void) clearNotifications {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (launchOptions != nil)
{
NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil)
{
NSLog(@"Launched from push notification: %@", dictionary);
[self clearNotifications];
}
}
return YES;
}
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo);
[self clearNotifications];
}
Run Code Online (Sandbox Code Playgroud)
我正在通过Xcode运行App.当应用程序最小化并且我使用通知中心中的通知启动应用程序时,我可以在日志didReceiveRemoteNotification
中看到,调用并使用我可以看到的断点,clearNotifications
已经运行了.但通知仍然在通知中心挂起.为什么?
关于这个主题有很多stackoverflow线程,但我仍然没有找到一个好的解决方案.
如果应用程序不在后台,我可以launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
通过application:didFinishLaunchingWithOptions:
电话查看它是否从通知中打开.
如果应用程序在后台,则所有帖子都建议使用application:didReceiveRemoteNotification:
并检查应用程序状态.但是当我进行实验时(以及此API的名称建议),此方法在收到通知时被调用,而不是被点击.
所以问题是,如果应用程序启动然后背景化,并且您知道收到通知application:didReceiveNotification
(此时application:didFinishLaunchWithOptions:
不会触发),您如何知道用户是通过点击通知还是仅通过点击来恢复应用程序应用图标?因为如果用户点击了通知,则期望打开该通知中提到的页面.否则它不应该.
我可以handleActionWithIdentifier
用于自定义操作通知,但这仅在轻触自定义操作按钮时触发,而不是在用户点击通知主体时触发.
谢谢.
编辑:
在阅读下面的一个答案之后,我想通过这种方式我可以澄清我的问题:
我们如何区分这两种情况:
(A)1.app转到后台; 2.收到通知; 3.用户点击通知; 4. app进入前台
(B)1.app转到后台; 2.收到通知; 3.用户忽略通知并稍后点击应用程序图标; 4. app进入前台
因为application:didReceiveRemoteNotification:
在步骤2中两种情况都被触发.
或者,应application:didReceiveRemoteNotification:
仅在步骤3中针对(A)触发,但我以某种方式将我的应用程序配置错误,所以我在第2步看到它?
当Apple的官方iOS消息应用程序处于打开状态并位于前台时,来自其他联系人的新消息会触发库存本机iOS通知警报横幅.见下图.
这在App Store的第三方应用程序中是否可行?应用程序处于打开状态且位于前台时,应用程序的本地和/或推送通知?
在测试我的应用时,会收到通知,但不会显示iOS警报用户界面.
但是,这种行为是出现在苹果的官方消息应用程序:
在本地和远程通知编程指南说:
当操作系统提供本地通知或远程通知且目标应用程序未在前台运行时,它可以通过警报,图标标记号或声音向用户显示通知.
如果应用程序在传递通知时在前台运行,则应用程序委托会收到本地或远程通知.
所以是的,我们可以在前台接收通知数据.但我认为无法呈现本机iOS通知警报UI.
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// I know we still receive the notification `userInfo` payload in the foreground.
// This question is about displaying the stock iOS notification alert UI.
// Yes, one *could* use a 3rd party toast alert framework.
[self use3rdPartyToastAlertFrameworkFromGithub]
}
Run Code Online (Sandbox Code Playgroud)
然后消息是否使用私有API在前台显示警报?
对于这个问题的目的,请不要提出任何第三方"敬酒",弹出警报在github上或者等我只是有兴趣,如果这可以用做库存,提供原生iOS本地或推送通知提醒用户界面,而你应用程序是开放的,在前台 …
uikit toast apple-push-notifications ios uilocalnotification
一旦创建,推送通知设备令牌是否会发生变化?
应用程序更新时的示例?或者在任何其他情况下它可以改变??
如果没有设备需要轮询服务器,iOS"推送"通知如何传递到特定设备?
例如,假设我在Facebook上收到了一条新消息.Facebook通知Apple我的设备应该收到通知.但Apple如何知道将消息推送到哪个设备/ IP?
我最近在我的 M1 mac mini 上创建了 Apple Push Service 证书。在钥匙串中,它表示证书不受信任。
我已经安装了此处提到的开发者关系中级证书
还安装了以下 Apple 的中级证书
尽管如此,推送服务证书表明它不受信任。同时,新创建的开发和分发证书将被标记为“此证书有效”。谁能指出我正确的方向来解决这个问题?
我正在制作一个应用程序,我想在其中实现apple推送通知服务.我按照本教程中给出的分步说明进行操作.
但仍然没有调用这些方法.我不知道造成这个问题的原因.谁能帮我?
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
//NSString * token = [[NSString alloc] initWithData:deviceTokenencoding:NSUTF8StringEncoding];
NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken];
NSLog(@"Device Token:%@",str);
//NSLog(@"Device token is called");
//const void *devTokenBytes = [deviceToken bytes];
//NSLog(@"Device Token");
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
NSString *str = [NSString stringWithFormat: @"Error: %@", err];
NSLog(@"Error:%@",str);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试配置我的应用程序以支持推送通知,但不断收到此错误:无法获取令牌,错误:错误Domain = NSCocoaErrorDomain Code = 3000"找不到有效的'aps-environment'应用程序的权限字符串"UserInfo = 0x1f818fc0 { NSLocalizedDescription =找不到应用程序的有效'aps-environment'权利字符串}
还有什么想法吗?谢谢.
ios ×6
objective-c ×4
swift ×2
xcode ×2
apple-m1 ×1
cocoa-touch ×1
iphone ×1
toast ×1
uikit ×1