推送通知流程

一. 推送通知流程


1.app应用程序要向设备IOS系统注册通知,第一次会打开一个确认对话框 




2.如果用户确认IOS系统会向
APNS服务器建立连接(每隔15分钟进行一次握手,确认是否保持活跃) 表示应用程序需要推送一条消息


3.APNS服务器会向我们的应用程序发送一个token(token对每个应用程序都是唯一的 即表示唯一的应用程序) 这时app应用程序会调用应用程序代理方法接收token




4.应用程序将token发送给WEB服务器 ,这时一旦服务器热点新闻发生了,就会找到APNS服务器
  将token与热点新闻内容、SSL证书、private key私钥 发送给APNS服务器
  (token与热点新闻内容 SSL证书、private key私钥会合并成一个物理文件 pem文件)
  通过token知道要将内容发给那个应用程序 (SSL证书、private key需要验证应用是否是苹果开发者用户因为不是苹果付费开发者将不允许使用推送通知功能)




5.APNS服务器验证通过将感兴趣的内容发送给app应用






二. 推送通知要求、内容以及局限




 要求:
    1.必须真机模拟器无法推送 
    2.必须加入开发者计划
    3.需要一个provider发起者 服务器
   






 内容:  


     设备令牌token +  负载Payload(定义的json信息属性列表 最大值为256字节)
                          字典必须包含一个键名为aps的字典,而aps的字典包含一个或多个属性)
                          这些属性指定如下动作:提示用户的警告信息
                                               一个提示声音
                                               显示app应用程序的数字(徽章)




 局限: 它是不可靠的,比如地铁没有信号  山区信号不好 或者关机
        APNS服务器每隔15分钟进行一次握手 建立连接 
        比如关机的时候可能发送很多通知保存在通知队列,当开机的时候会同时接收
        一旦超时将永久消失






三. 推送通知步骤


1.请求CSR文件


打开钥匙串  


菜单 钥匙串访问  证书助理 --- 从证书颁发机构请求证书


              用户电子邮件地址:
                      常用名称:


               选中 存储到磁盘


                          ---  继续


                       如选择 Desktop 并在桌面创建一个文件夹  name:certificate 证书








提交证书


      打开   developer.apple.com


             点击   ios  dev  center


             点击   log  in


       登录成功后  


      可以下载开发文档、视频、最新版本的xcode  


       点击 右上角  ios  developer  program 下面的


                               certificates,Identifiers &Profiles


     


       点击左侧  certificates   会切换到第一个选项卡Development  


                                点击 Request Certificate (请求证书)


                 点击底部的  选取文件 按钮 找到Desktop/certificate 路径 .csr


                               点击  submit   会跳转到选项卡Development  显示一条证书记录




                 点击 download    将下载后的.cer文件剪切到 Desktop/certificate 路径下




 注册安装证书


                 双击打开  .cer文件




                    
打开钥匙串


         点击钥匙串左下角窗口中的   证书    查看有对应的证书文件


         展开证书  查看里面是否有对应的钥匙串 TestApp  如果有表明证书安装成功














2.导出秘钥




  打开钥匙串 在左下角 找到  秘钥   右键  TestApp(专用秘钥)    导出 TestApp   (文件格式是.p12)


     保存到 Desktop/certificate 路径下


     可以用密码保存(密码可以不设置)   在输入MAC机器密码






制作证书




回到     developer.apple.com


          点击左侧  Devices  下面的 app IDs 选项卡


注意:




注册app IDs (有2种方式 必须使用第一种填写应用程序名字  而不能使用通配符*)


             App  id  :Push


             bundle identifier  输入   com.puke.TestAppPush (不能使用通配符)




          点击  submit 


             提交后会切换回Manage 选项卡   显示刚才提交的设备


          点击   右侧  configure




          选中复选框 Enable for  Apple  Push Notification service






           点击下面 Development Push SSL Certificate  右侧的  configure
               测试使用该证书


           点击 continue   选取文件  找到  .cerSigningRequest文件  点击 Generate


           点击 continue   点击 download




           双击打开下载的  aps_development.cer  推送证书




 打开钥匙串 在左下角 找到  证书 


                      Apple Development IOS  Push Services :com.puke.TestAppPush












生成provisioning文件


   回到     developer.apple.com


          点击左侧  provisioning   会切换到第一个选项卡Development 


          单击 New  profile 创建provisionging文件 


          Profile Name: PushNotification  (随便填写)


          选中 Certificates  复选框


          App  ID   选择  Push


              点击  select all


          点击  submit 


             提交后会切换回Development  选项卡


                   查看  status 是否为  Active


                   点击 download    
                       将下载后的  PushNotification.mobileprovision文件
                       剪切到 Desktop/certificate 路径下




安装provisioning文件


       双击会通过xcode 打开 .mobileprovision文件


                    查看  status 是否为 绿色 valid profile










project: TestAppPush


      注意项目名称要与  bundle identifier  :   com.puke.TestAppPush (不能使用通配符)


      相同












打开  AppDelegate.m









 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


方法中的   [self.window makeKeyAndVisible];  下面加入


    
    if ([UIDevice currentDevice].systemVersion.doubleValue <= 8.0) {
        // 不是iOS8
        UIRemoteNotificationType type = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert;
        // 当用户第一次启动程序时就获取deviceToke
        // 该方法在iOS8以及过期了
        // 只要调用该方法, 系统就会自动发送UDID和当前程序的Bunle ID到苹果的APNs服务器
        [application registerForRemoteNotificationTypes:type];
    }else
    {
        // iOS8
        UIUserNotificationType type = UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound;
        
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];
        // 注册通知类型
        [application registerUserNotificationSettings:settings];
        
        // 申请试用通知
        [application registerForRemoteNotifications];
    }
    




查看 UIApplication.h   316行








加入协议方法


 










导入课件中的 布谷鸟.caf








运行   真机  设置  通知 查看是否有TestAppPush










查看控制台  获取设备deviceToken   是APNS服务器返回的




home键将程序挂载到后台








使用 PushMeBaby  项目来模拟 provider 服务器




打开 PushMeBaby  项目    




加入aps_development.cer  推送证书


打开 PushMeBaby  项目中的 ApplicationDelegate.m 


修改 - (id)init 方法中的    35行


  // 设备令牌  使用刚才获取的deviceToken deviceToken是从控制台复制过来的
  self.deviceToken = @"*** *** *** ***";




  // 负载信息payload,key必须是aps   alert badge sound是固定写法
  // badge数字是几在logo图标上显示的就是几
  self.payload = @"{\"aps\":{\"alert\":\"爱好世界和平\",\"badge\":1,\"sound\":\"布谷鸟.caf\",\"newID\":\"4987\", \"other\":\"钓鱼岛是我们中国的\",}}";
       
  // 证书
self.certificate = [[NSBundle mainBundle] pathForResource:@"aps_development" ofType:@"cer"];
//        NSLog(@"certificate : %@", self.certificate);










运行


    弹出对话框  总是允许  


             弹出 PushMeBaby  窗口


             Payload  负载  就是要推送的内容


             点击 Push




    效果参看课件中的  效果图.JPG


    查看 真机 app    点击通知


     
查看   TestAppPush 项目的控制台  会显示回调的信息 调用项目中 布谷鸟.caf




  现在我们知道应用挂起(home键)在后台可以通过 didReceiveRemoteNotification方法会回调信息






完善TestAppPush实例






打开  TestAppPush    AppDelegate.m




将 didReceiveRemoteNotification  方法中的 




 NSLog(@"userInfo : %@", userInfo);  改为


 NSLog(@"userInfo : %@", [[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);




 
运行    点击 Push   


        真机  点击通知  查看控制台










在    


[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert]; 


下面加入


// 当我们的程序没有被启动时,provider(服务器)发送了一条感兴趣的消息,通过launchOptions字典来获取内容








在  [self.window makeKeyAndVisible];   下面加入




    // 这是一个测试label
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 320, 50)];
    label.backgroundColor = [UIColor redColor];
    label.tag = 101;
    label.textColor = [UIColor whiteColor];
    [self.window addSubview:label];
    [label release];
 
    // 当我们的程序未运行时
    NSDictionary *remoteDic = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (remoteDic) {
        label.backgroundColor = [UIColor purpleColor];
        label.text = [[remoteDic objectForKey:@"aps"] objectForKey:@"alert"];
    }








将 didReceiveRemoteNotification  方法改为




- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
//    NSLog(@"userInfo : %@", [[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);
    
    UILabel *label = (UILabel *)[self.window viewWithTag:101];
    label.text = [[userInfo objectForKey:@"aps"] objectForKey:@"other"];
    
} // 接受到感兴趣的内容(挂起时调用代理方法)






运行




       没有推送通知所以label没有内容


       点击 Push






      label内容会显示  钓鱼岛是我们中国的






      双击 home键 关闭 TestAppPush   或者重新运行TestAppPush 








badge数字是几在logo图标上显示的就是几




去掉LOGO数字


在 applicationDidBecomeActive  方法中加入


 [application setApplicationIconBadgeNumber:0];




运行


       
     点击 Push    




     进入  TestAppPush    home键  返回    就会去掉LOGO上的数字  






制作PEM证书
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中的推送权限是指应用程序需要获得用户授权才能发送推送通知。在 Android 系统中,推送权限属于一项敏感权限,需要用户明确同意才能使用。以下是获取推送权限的一般步骤: 1. 在 AndroidManifest.xml 文件中声明推送服务: ```xml <service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> ``` 2. 创建一个继承自 FirebaseMessagingService 的服务类,用于处理接收到的推送消息: ```java public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { // 处理接收到的推送消息 } } ``` 3. 在应用中集成 Firebase Cloud Messaging (FCM) 或其他推送服务提供商的 SDK,以便发送和接收推送消息。 4. 在应用运行时,请求推送权限: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 创建通知通道 NotificationChannel channel = new NotificationChannel( channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT ); // 设置通知渠道的描述 channel.setDescription(channelDescription); // 在系统上注册通知渠道 NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } ``` 5. 向用户请求推送权限: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 检查是否已经获得推送权限 NotificationManager notificationManager = getSystemService(NotificationManager.class); NotificationChannel channel = notificationManager.getNotificationChannel(channelId); if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) { // 引导用户去应用设置页面开启推送权限 Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel.getId()); startActivity(intent); } } ``` 请注意,以上步骤是一般性的流程,具体实现可能会因推送服务提供商和所用技术而有所不同。您需要参考相关的推送服务文档和 Android 官方文档进行具体操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值