博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS 消息推送---服务端.p12证书的生成
阅读量:6156 次
发布时间:2019-06-21

本文共 3287 字,大约阅读时间需要 10 分钟。

中讲述了消息推送的原理及实现总结,但并未讲到Provider服务端及Client App客户端的实现,但我在这里只是简单讲述Provider服务端(JAVA实现)步骤如下:

 

一、  制作Provider服务端所需要的*.p12文件:

的图2-8中所展示的密钥、证书,我们并没有使用到它,那么为什么要展示出来呢,猜猜是为什么?为制作*.p12文件?哈哈,您猜对了,下面我们就利用它来制作*.p12文件,步骤:([MacBookà应用程序à实用工具à钥匙串访问[钥匙串:登录,种类:证书]à选择刚刚生成的证书(Apple Development IOS Services:*******)à菜单à文件à导出项目à[存储为:任意文件名(如:iPush),文件格式:默认(个人信息交换(.p12)]à输入密码以进行导出[密码:任意,验证:与密码同一]à输入MACBook登录密码à允许à最终生成。 关键步骤如图1-1

IOS 消息推送原理及实现总结(续)---- Provider(JAVA实现) - Milo - IOS  JAVA KEY

 1-1

二、  编写Client App客户端的关键代码,如下:

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

{

    self.window = [[[UIWindow allocinitWithFrame:[[UIScreen mainScreen]bounds]] autorelease];

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];

    //消息推送支持的类型

    UIRemoteNotificationType types =

    (UIRemoteNotificationTypeBadge

     |UIRemoteNotificationTypeSound

     |UIRemoteNotificationTypeAlert);

    //注册消息推送

    [[UIApplication sharedApplication]registerForRemoteNotificationTypes:types]; 

    return YES;

}

 

//获取DeviceToken成功

- (void)application:(UIApplication *)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

{

    NSLog(@"DeviceToken: {%@}",deviceToken);

    //这里进行的操作,是将Device Token发送到服务端

}

 

//注册消息推送失败

- (void)application:(UIApplication *)application

didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

{

    NSLog(@"Register Remote Notifications error:{%@}",[errorlocalizedDescription]);

}

 

//处理收到的消息推送

- (void)application:(UIApplication *)application

didReceiveRemoteNotification:(NSDictionary *)userInfo

{

    NSLog(@"Receive remote notification : %@",userInfo);

    UIAlertView *alert =

    [[UIAlertView allocinitWithTitle:@"温馨提示"

                               message:@"推送成功!"

                              delegate:nil

                     cancelButtonTitle:@"确定"

                     otherButtonTitles:nil];

    [alert show];

    [alert release];

}

 

三、编写Provider服务端关键代码,如下:

import javapns.back.PushNotificationManager;

import javapns.back.SSLConnectionHelper;

import javapns.data.Device;

import javapns.data.PayLoad;

 

public class MainSend

{

    public static void main(String[] args) throws Exception

    {

        try

        {

            //从客户端获取的deviceToken

            String deviceToken = "3a20764942e9cb4c4f6249274f12891946bed26131b686b8aa95322faff0ad46";

            System.out.println("Push Start deviceToken:" + deviceToken);

            //定义消息模式

            PayLoad payLoad = new PayLoad();

            payLoad.addAlert("消息推送测试!");

            payLoad.addBadge(4);

            payLoad.addSound("default");

            //注册deviceToken

            PushNotificationManager pushManager = PushNotificationManager.getInstance();

            pushManager.addDevice("iPhone", deviceToken);

            //连接APNS

            String host = "gateway.sandbox.push.apple.com";

            int port = 2195;

            String path = "/Users/iMilo/Work.localized/iShop/project/service/iPush/";

            String certificatePath = (path + "src/ipush/iPush.p12");

            //certificatePath 步骤一中生成的*.p12文件位置

            String certificatePassword = "Love24mm";

            pushManager.initializeConnection(host, port, certificatePath, certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);

            //发送推送

            Device client = pushManager.getDevice("iPhone");

            pushManager.sendNotification(client, payLoad);

            //停止连接APNS

            pushManager.stopConnection();

            //删除deviceToken

            pushManager.removeDevice("iPhone");

            System.out.println("Push End");

        }

        catch (Exception ex)

        {

            ex.printStackTrace();

        }

    }

}

注意:如果Provider服务端为Objective-C实现的话,就不需要*.p12证书。下面给出网上的相应demo地址:

Provider服务端(JAVA实现):

Provider服务端(Objective-C实现):

转载于:https://www.cnblogs.com/zzili/archive/2012/12/19/6663212.html

你可能感兴趣的文章
由一个异常开始思考springmvc参数解析
查看>>
向上扩展型SSD 将可满足向外扩展需求
查看>>
虚机不能启动的特例思考
查看>>
SQL Server编程系列(1):SMO介绍
查看>>
在VMware网络测试“专用VLAN”功能
查看>>
使用Formik轻松开发更高质量的React表单(三)<Formik />解析
查看>>
也问腾讯:你把用户放在什么位置?
查看>>
CSS Sprites 样式生成工具(bg2css)
查看>>
[转]如何重构代码--重构计划
查看>>
类中如何对list泛型做访问器??
查看>>
C++解析XML--使用CMarkup类解析XML
查看>>
P2P应用层组播
查看>>
Sharepoint学习笔记—修改SharePoint的Timeouts (Execution Timeout)
查看>>
CSS引入的方式有哪些? link和@import的区别?
查看>>
Redis 介绍2——常见基本类型
查看>>
asp.net开发mysql注意事项
查看>>
(转)Cortex-M3 (NXP LPC1788)之EEPROM存储器
查看>>
ubuntu set defult jdk
查看>>
[译]ECMAScript.next:TC39 2012年9月会议总结
查看>>
【Xcode】编辑与调试
查看>>