远程推送、自定义后台推送

这几天被远程推送给整怕了,没少请教朋友、老师的。现在来分享一下我的成果。
先说说问题以及解决办法,最后上代码。
第一、运行代码的时候会出现这样的问题。


44F8E8BA98F4F1C90D0B913537E3E270.jpg

或者

FE9B67A5-96FF-4902-A5F9-0AF04B3A12F7.png

这里你会发现一个很奇怪的现象,如果你是iOS9以上的,是没有问题的,但是iOS9以下的就会出现这个问题,百度了许多也没有找到什么结局方案。
好了,言归正传,直接说解决方法。
1⃣️、你检查一下项目中的两个地方开启了没有。
如图:

DF238902-E47C-4B21-A16B-5C165CFADE66.png

或者

E9A2646C-1138-47B0-8097-6AD4F743ED86.png

2⃣️、怎么实现远程推送(这里就拿极光推送为例)
A、创建证书请求签名 在spolight中搜索 keychain


1785F13C-BA48-43E1-8ED9-433986D6C45F.png

B、请求证书


A88BF7FF-D48D-4C0F-A7B5-551EB047E044.png

C、填写邮箱和名称,注意一定要选择存储到磁盘


0DB2C42E-79B1-4913-B618-245F9A5A61BF.png

D、到了这里就是重点了,进入开发者中心。要启用远程推送通知,你必须创建一个明确的App ID,根据这个明确App ID创建远程推送通知的开发证书和发布证书

1,进入开发者中心 https://developer.apple.com/
2,进入证书管理(Certificates, Identifiers & Profiles)
3,创建一个明确的App ID

29357383-5DEA-4395-9AFD-2A695DEC969C.png

4,指定AppID的描述名称,只是为了便于识别

0286A989-F9F4-41FD-B4EA-8B27650DC7C7.png

5,往下拉页面,使用明确Bunld ID

51B44833-A07B-4D80-A9DF-974422FBB05F.png

6,在往下拉界面,选择push notifcation

287924C6-16C6-49E8-A079-C768A26FD231.png

7,点击 continue 进入下个界面 push notifation是可以配置的 让点击submit

D94D98BB-31C7-4B9C-94CB-84E7B0FADBBF.png

8,进入下一个界面点击 "Done" 到此为止 一个明确的App ID已经配置成功

9,点击编辑


554EE32E-9883-4F57-A255-12B5CFE8E018.png

10,点击刚才界面的Edit按钮,进入下面的界面

C923244E-89EF-41B6-AE44-B7163037FB87.png

11,创建请求证书签名 (选择刚刚在A步骤里面创建的文件)

137B7A3D-0E42-4248-9D1B-FC910465BAFA.png

12,到了这里你就完成大半了,你可以看看这里是不是变绿色了。

E067B9E2-7588-4F0F-A960-D7BA26607C47.png

13,点击下载证书

824A037B-4B2F-422A-8762-6E7CEE206ED5.png

14,安装证书。注意先安装顺序
首先安装 ios_development.cer 双击就可

725CE36C-2072-4A1D-9760-5AA3C5EAA18F.png

注意:钥匙串中系统-证书要有,登陆-我证书中也要有,如只有一处有,拷贝一份到另外一个地方放

B789203E-A648-4682-80B5-08CEEE03A118.png

然后再安装 aps_development.cer 双击就可,步骤同上。

E、导出P12文件,设置密码(这里的密码要记住,等会在极光要验证)

F51E645B-1275-4EA0-9211-E4D554CC92A1.png

F、进入极光,安装极光文档创建应用 https://www.jpush.cn

290B413F-2D53-4516-A455-5104069FDA85.png

最后出现这个界面

A79C0DF1-0F1F-435A-9ED0-F4A8944022E4.png

注意如果在保存修改的时候出现这个问题 开发或者生产证书出错

A67738D5-14E1-4298-9E41-5A1808ADEE0C.png

解决方案:

  1. 首先产生从证书管理中心从新下载一个新的aps_deleveper.cer替换这个,安装新下载的aps_deleveper.cer,需要把原来的那个给删除,才能保证这个新的能够安装上去,然后重新导出一个.p12,在上传JPush(一般这样搞下就可以了)
  2. 有时候是证书安装时候,有问题把证书重写删除重新安装一下
  3. 如果上面方法,搞了一遍还不行,终极解决方案,把所有的证书都删除了重新搞

G、剩下就是上代码了。
按照极光文档集成
1,在didFinishLaunchingWithOptions:(NSDictionary *)launchOptions这个方法里写入

if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
    //可以添加自定义categories
    [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                      UIUserNotificationTypeSound |
                                                      UIUserNotificationTypeAlert)
                                          categories:nil];
} else {
    //categories 必须为nil
    [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                      UIRemoteNotificationTypeSound |
                                                      UIRemoteNotificationTypeAlert)
                                          categories:nil];
}
[JPUSHService setupWithOption:launchOptions appKey:@"你的APPKEY" channel:@"Publish channel" apsForProduction:NO];

//  去掉应用图标上数字
application.applicationIconBadgeNumber = 0;

if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
    
    /*
     UIUserNotificationTypeNone    = 0,   没有通知权限
     UIUserNotificationTypeBadge   = 1 << 0, 显示应用图标右上角的数字
     UIUserNotificationTypeSound   = 1 << 1, 发送通知的时候播放声音
     UIUserNotificationTypeAlert   = 1 << 2, 显示横幅或弹窗
     */
    UIUserNotificationType types = UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound;
    //      创建用户通知设置对象
    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:types categories:nil];
    //      注册用户通知设置
    [application registerUserNotificationSettings:setting];
    
}

2,获取token

  • 但APNs服务器返回deviceToken的时候调用该方法

  • @param application 应用

  • @param deviceToken deviceToken 包含(手机的UUID,应用BundleID)

    - (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {   [JPUSHService registerDeviceToken:deviceToken];}
    

3,实现推送提示 可以自定义弹出框
iOS7之前的方法

  1. 如果应用程序在"后台",点击远程推送通知进来的时候会调用该方法
  2. 当应用程序在 "前台" 一旦接收到远程推送通知就会执行该方法
  3. 如果用户退出了应用程序,点击远程推送通知不会执行该方法
    实现点击远程通知,进入App调用的方法
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog(@"%s",func);// [JPUSHService handleRemoteNotification:userInfo]; NSString *message = [[userInfo objectForKey:@"aps"]objectForKey:@"alert"]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:message delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil ,nil]; application.applicationIconBadgeNumber -= 1; [alert show];}

3⃣️、连接服务器,自定义后台推送
这里就需要借助 Provider发送远程通知
Provider集成是服务端的事情,不用我们搞,我们这里就使用一个Mac版的程序,测试下我们iPhone的程序.
步骤:
打开 PushMeBaby 项目 压缩包地址:http://pan.baidu.com/s/1qYd5ER6
把我们生成的SSL开发证书"aps_development.cer"拖入到项目中pushMebaby
修改ApplicationDelegate.m的init方法,init方法代码如下

    self.deviceToken = @"";
    self.payload = @"{\"aps\":{\"alert\":\"自定义后台推送\",\"badge\":1}}";
    self.certificate = [[NSBundle mainBundle] pathForResource:@"apns" ofType:@"cer"];

修改deviceToken为上面获取到deviceToken,注意这个deviceToken 没有前后的尖括号

     self.deviceToken = @"afd72037 3adb7d1c 3529032b be1582b9 49a1a89d 995da320 b6d78c93 b7d9a3a4";

修改证书名称为我们刚拖入进来证书名称 "aps_development"

    self.certificate = [[NSBundle mainBundle] pathForResource:@"aps_development" ofType:@"cer"];

运行PushMeBaby程序
点击"始终允许",弹出如下窗口

5B93B275-A0A3-4974-9C06-D061CB429852.png

效果图:

image.png
image.png

终于写完了。喜欢我的朋友可以加关注,麻烦点个喜欢,谢谢!

刚刚新建了一个分享交流群,366270001,期待你们的加入。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,467评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,079评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,600评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,835评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,848评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,348评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,735评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,705评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,238评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,268评论 3 345
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,395评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,012评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,704评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,177评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,309评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,925评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,457评论 2 365

推荐阅读更多精彩内容