我正在尝试将GCM用于IOS和Android客户端.当应用程序位于前台时,它似乎与IOS一起正常工作,但是,当应用程序在后台时,通知中心不会收到消息而didReceiveRemoteNotification with completionHandler不会被调用.
我发现一个问题是从GCM到APNS的格式错误的消息.也就是说,它看起来如何:
[message: New message, collapse_key: do_not_collapse, from: **************]虽然,IOS推送通知应该
aps在通知中有关键,对吗?以及内容可用设置为1.例如:
{"aps":{"content-available":1},"data-id":345}
顺便说一句,在前台应用程序中接收消息,问题仅在于背景.关于我应该如何解决问题,使GCM同时适用于ios和android的任何建议?
更新:这就是我在网上发现的:
关于实际通信,只要应用程序在iOS设备上处于后台,GCM就使用APNS发送消息,该应用程序的行为与使用Apple的通知系统类似.但是当应用程序处于活动状态时,GCM会直接与应用程序通信
所以我在前台模式下收到的消息:
[消息:新消息,collapse_key:do_not_collapse,来自:**************]
来自GCM的直接消息(APNS根本没有参与此事).所以问题是:APNS是否重新格式化GCM发送给它的内容以遵守ios通知格式?如果是这样,我怎么知道APNS实际上做了什么,是否它以不同的格式向我发送通知?有没有办法查看来自APNS的传入数据的日志?
更新: 好的,我设法更改了消息的结构,现在在前台模式下,我收到以下消息:
收到通知:["aps":{"alert":"Simple message","content-available":1},collapse_key:do_not_collapse,from:**************]
现在看起来格式很好,但是当应用程序在后台时仍然没有反应.didReceiveRemoteNotifification completionHandler没有被调用!我应该寻找什么,问题出在哪里?方括号是推送通知的问题吗?更准确地说,ios不会从收到的通知中发布任何警报/徽章/横幅.
push-notification apple-push-notifications ios google-cloud-messaging
所以我想在地图上显示一些图片作为注释.为此,我需要添加MKAnnotationView的image属性.我正在使用常规图像,但我希望它们是圆形的并带有边框.所以我找到了一种圆形UIImage的方法,我找到了为UIImage添加边框的方法,但边框似乎没有添加(我实际上并没有在屏幕上显示图像,也许这就是问题?).
我使用了这个答案/sf/answers/2033316071/稍作修改边框.即:
imageView.layer.borderWidth = 1.5
imageView.layer.borderColor = UIColor.whiteColor().CGColor
imageView.clipsToBounds = true
Run Code Online (Sandbox Code Playgroud)
但我在地图上的图像没有任何边框.有什么建议 ?
所以我用自己的初始化程序编写了自己的自定义视图.但是,当我的主视图加载我的自定义视图时,会以错误的方式进行描述.它的边界为600x600矩形,而superview为375x607.我确实试图把自动约束,似乎没有工作.我尝试在子视图初始化中以编程方式执行此操作,但每当我尝试将其bounds属性初始化为其superview边界时,我在superview中得到nil.
override init(frame: CGRect) {
super.init(frame: frame)
self.setup()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
}
func setup() {
initPathLayer()
initHandleView()
initHandlePanGestureRecognizer()
layoutPathLayer()
layoutHandleViews()
}
Run Code Online (Sandbox Code Playgroud)
我尝试了互联网上的所有内容,使子视图填充其超级视图,但我认为子视图在superview之前被初始化了?那可能吗 ?在ViewController中,我将自定义视图声明为Outlet连接.我确信这个问题应该非常简单,而且我不知道Swift初始化视图的方式.
有任何想法吗 ?
谢谢.
我已经使用GCM很长一段时间了.有一天它突然破了.问题是我发送的第一个推送我获得了成功状态,但应用程序没有得到任何推送.我发送的第二个推送因NotRegistered错误而失败.我重新安装了应用程序:成功(未收到通知),失败(未注册) - >循环.我不知道发生了什么变化.谷歌的支持非常无益,并且花了很多时间回答简单的问题,无论是GCM问题,APN问题还是客户端问题.如果有人以前有这样的问题,请告诉我要找什么.这就是它的样子:
我怀疑它是在更新到iOS 9后发生的.我不确定.如果新iOS中有可能阻止GCM的事情,我会很感激,如果有人指出的话.
更新:
那家伙有类似的问题.问题出在一些清单文件中.Info.plist中是否有一些我需要为iOS 9添加以允许GCM的条目?
更新:
每次应用程序启动时都会调用onTokenRefresh.不过,我得到的回报相同.因此,我怀疑GCM服务器上的令牌存在问题.
GCM DELEGATE CODE in APPDELEGATE:
var connectedToGCM = false
private var deviceToken: NSData?
var gcmSenderID: String!
let authorizedEntity = "my GCM Sender_ID"
public func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
var configureError:NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")
gcmSenderID = GGLContext.sharedInstance().configuration.gcmSenderID
// [END_EXCLUDE]
// Register for remote notifications
if #available(iOS 8.0, *) {
let settings: …Run Code Online (Sandbox Code Playgroud) objective-c push-notification ios google-cloud-messaging swift