小编Ole*_*rov的帖子

使GCM在后台运行iOS设备

我正在尝试将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

26
推荐指数
3
解决办法
3万
查看次数

舍入UIImage并添加边框

所以我想在地图上显示一些图片作为注释.为此,我需要添加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)

但我在地图上的图像没有任何边框.有什么建议 ?

uiimage ios uigraphicscontext swift

11
推荐指数
3
解决办法
2万
查看次数

制作一个填充其超级视图的自定义UIView子视图

所以我用自己的初始化程序编写了自己的自定义视图.但是,当我的主视图加载我的自定义视图时,会以错误的方式进行描述.它的边界为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初始化视图的方式.

有任何想法吗 ?

谢谢.

layout ios swift

9
推荐指数
1
解决办法
1万
查看次数

GCM IOS NotRegistered问题

我已经使用GCM很长一段时间了.有一天它突然破了.问题是我发送的第一个推送我获得了成功状态,但应用程序没有得到任何推送.我发送的第二个推送因NotRegistered错误而失败.我重新安装了应用程序:成功(未收到通知),失败(未注册) - >循环.我不知道发生了什么变化.谷歌的支持非常无益,并且花了很多时间回答简单的问题,无论是GCM问题,APN问题还是客户端问题.如果有人以前有这样的问题,请告诉我要找什么.这就是它的样子:

这是HTTP日志

我怀疑它是在更新到iOS 9后发生的.我不确定.如果新iOS中有可能阻止GCM的事情,我会很感激,如果有人指出的话.

更新:

使用NotRegistered,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

6
推荐指数
1
解决办法
2672
查看次数