iOS_远程推送详解

远程推送比本地推送要麻烦的对。

做远程推送的条件:

1.真机(必须有真机调试证书)

2.有推送证书

3.有一台服务器




那么对于对于没有服务器,但是也想测试远程推送的盆友们来说。pushmebaby就是一个很好的代替品了!

附上地址:http://vdisk.weibo.com/s/zfhMNTK9gK_N2


二.Apple Push Notification的工作机制

自己的客户端发送消息到自己应用软件的apns,apns发送消息到你的手机。这个是根据令牌识别的。手机在发送消息到你的应用软件。

  •   首先是应用程序注册消息推送。
  • IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
  • 应用程序将deviceToken发送给PUSH服务端程序(Provider)。
  • 服务端程序向APNS服务发送消息。
  • APNS服务将消息发送给iPhone应用程序。

     1. Provider是指某个iPhone软件的Push服务器,是我们将要开发的服务器。

     2. APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。

附上图已助于理解:



注册通知:

[application registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];
这个推送通知这三个参数的分别是,app上的脚标,badge,  这个红色的小东西,第二个是一个提醒,出现在手机通知里的,第三个是声音。


 需要实现的代理方法:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    
    NSLog(@"%@",deviceToken);
    
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    
    NSLog(@"%@" , [error localizedDescription]);
}

#pragma mark 程序被挂起的时候调用的代理
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    
    
    UILabel *label = (UILabel *)[self.window viewWithTag:100] ;
    
    label.backgroundColor = [UIColor yellowColor];
    
    NSLog(@"%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);
    
    NSLog(@"%@",[[userInfo objectForKey:@"aps"] objectForKey:@"other"]);
    
    label.text = [[userInfo objectForKey:@"aps"] objectForKey:@"other"];
}

第一个代理方法是用于接受apns返回的唯一token值的。

第二个代理方法是用于推送出现错误调用的

第三个方法是内容被apns推送到设备上时调用(程序处于挂起状态的时候调用)。


另外如果你的程序如果退出了,但是apns正好这个时候把消息推送给你了,那么你就需要在这么操作:

#pragma mark 当程序推出时,推送通知用launchOptions获取
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
   
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 320, 150)];
    label.backgroundColor = [UIColor redColor];
    label.tag = 100;
    label.textColor = [UIColor blueColor];
    [self.window addSubview:label];
    
    NSDictionary *pushDic = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    //
    
    
    if (pushDic) {
        label.backgroundColor = [UIColor purpleColor];
        label.text = [[pushDic objectForKey:@"aps"] objectForKey:@"alert"];
        
    }
    
     //注册通知
    [application registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];
    
    
    [self.window makeKeyAndVisible];
    
    
    return YES;
}
程序推出后通知消息由 didFinishLaunchingWithOptions接受,返回的内容是一个字典,存在launchOptions字典中,关键字是
UIApplicationLaunchOptionsRemoteNotificationKey.

接下来介绍pushmebaby的使用:
<img src="https://img-blog.csdn.net/20140809112021915?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlvbmc0NjYyMTI4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
打开后类目如上,打开appdelegate,
/*
 *  @只需要修改init方法
 *  1、修改token
 *  2、修改所需要的内容
 *  3、如果aps证书(push SSL证书)错误,运行时程序崩溃
 */

- (id)init {
	self = [super init];
	if(self != nil) {
        
       <p class="p1"><span class="s1"> </span>// <span class="s2">设备令牌</span></p><p class="p2"><span class="s1"><span>	</span><span>	</span></span><span class="s3">self</span><span class="s1">.</span><span class="s4">deviceToken</span><span class="s1"> = </span>@"11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111"<span class="s1">;</span></p><span style="font-family: Arial, Helvetica, sans-serif;"></span>
        // 负载信息,key必须是aps
		self.payload = @"{\"aps\":{\"alert\":\"好无聊\",\"badge\":6,\"sound\":\"呵呵.caf\",\"newID\":\"4987\", \"other\":\"我爱nba\",}}";
        // 证书
		self.certificate = [[NSBundle mainBundle] pathForResource:@"aps_development" ofType:@"cer"];
      NSLog(@"certificate : %@", self.certificate);
	}
	return self;
}
先要设置令牌,令牌就是在通知的第一个代理方法中apns返回的token值。

后面的payload就是推送的详细内容。 

还有就是必须要倒日推送证书,而且导入的时候要加入编译。不然会有问题。

如何加入编译,在导入的时候 有一栏是Add to targets 勾上就ok。


然后运行:


会出现这个,然后点push就ok。

如果编译器是64位,需要改称32位,附图: 

修改后,指点在scheme这里选择32位编译器就ok。


运行流程是:

1.先打开自己的远程推送app,在真机上跑起来,(注意:如果需要播放声音,要把文件拖到你的app中,而不是pushmebaby或者服务器)

2.获取了token之后,在pushmebaby里填入,并且拖入证书,修改好payload。

3.运行pushmebaby,推送消息出去就ok。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值