apple push notification service apple与Python结合推送

来源:互联网 发布:linux用户切换命令 编辑:程序博客网 时间:2024/06/13 08:45


iOS推送大家经常会用到,最近我也用到了,再此记录以下push的整个流程

1.首先打开本地的“钥匙串访问” ==>证书助理==>从证书颁发机构求证书



2.填写证书信息,输入邮件地址,填写常用名称,重要的是选择“存储到本地磁盘



3.点击继续保存到本地桌面,储存的默认名称为:"CertificateSigningRequest.certSigningRequest"



创建一个App ID

4.打开“http://developer.apple.com/devcenter/ios/index.action”



5.选择“App IDs” ==>New App ID



6.输入identify,如果证书已经存在绑定你的证书编号,不存在生成一个新的,输入你的应用程序唯一标识ID(如epub360.com.ArtsCool2)然后提交保存



7.App ID创建成功



创建证书

8.点击上图中的Configure后



9.选中“ Enable for Apple Push Notification service”,点击Configure。现在会看到苹果推送通知服务的SSL证书助理



10.点击Choose File选择上面第3步生成的“"CertificateSigningRequest.certSigningRequest"文件



11.你的SSL证书将生成



12.点击"download",下载完成后双击此文件



创建证书

13.返回iPhone Development Program Portal,点击New Profile,
填写配置文件名称,App ID选中刚刚创建的ArtsCool2,选中所有的设备,点击提交




14.点击下载这个证书,这个证书默认名称为“XXX.mobileprovision”



配置一个设备

15.连接你的设备,开启Xcode ==>Winow==>Organizer,把“XXX.mobileprovision”拖入设备中




创建一个你的应用

16.创建一个你的应用程序,如ArtsCool2,把aps_developer_identity.cer加入你的工程



17.修改Targets 



18.选择证书



19.在ArtsCool2AppDelegate.m文件中加入如下代码:

@implementation ArtsCool2AppDelegate

@synthesize window;
@synthesize viewController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    NSLog(@"Registering for push notifications...");    
    [[UIApplication sharedApplication] 
        registerForRemoteNotificationTypes:
        (UIRemoteNotificationTypeAlert | 
         UIRemoteNotificationTypeBadge | 
         UIRemoteNotificationTypeSound)];
       application.applicationIconBadgeNumber = 0; //程序开启,设置UIRemoteNotificationTypeBadge标识为0

}

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 

    NSString *str = [NSString 
        stringWithFormat:@"Device Token=%@",deviceToken];
    NSLog(str);

}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 

    NSString *str = [NSString stringWithFormat: @"Error: %@", err];
    NSLog(str);    

}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    for (id key in userInfo) {
        NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
    }    

}

- (void)dealloc {
    [viewController release];
    [window release];
    [super dealloc];
}

@end

20.运行程序,你会看到



21.退出你的程序你将看到



创建推送通知的服务器

服务器发送通知需要:deviceToken和APNS连接的证书。
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 

    NSString *str = [NSString 
        stringWithFormat:@"Device Token=%@",deviceToken];
    NSLog(str);
}

在ArtsCool2AppDelegate已经获取了deviceToken,我们通过NSURLRequest方式回传给服务器。

APNS连接的证书生成

21.打开“钥匙访问串”,导出我们刚刚加入的证书,命名为:cert.p12



22.选中钥匙图标导出命名为:key.p12



23.使用OpenSSL生成Pyton和APNS通信的证书文件

openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12
openssl pkcs12 -nocerts -out key.pem -in key.p12

如果你想刪除 passphase在key.pem私鑰,這樣做

openssl rsa -in key.pem -out key.unencrypted.pem

24.然后把证书和密钥结合起来

cat cert.pem key.unencrypted.pem > ck.pem

26.以下是Python主要代码

python代码中引用了开源库APNSWrapper
http://code.google.com/p/apns-python-wrapper/downloads/list
deviceToken = 'Qun\xaa\xd4R\x11zu\x07\x04\x9dG\xe6\x96j&\x95Y\x9d\x91~\xcc`z\n\x88O\xc0\x9c\xf6\xca' 

# create wrapper
wrapper = APNSNotificationWrapper('ck.pem', True)

# create message
message = APNSNotification()
message.token(deviceToken)
message.badge(5)

# add message to tuple and send it to APNS server
wrapper.append(message)
wrapper.notify()

如果以上没有配置成功,错误信息如: Error: Error Domain=NSCocoaErrorDomainCode=3000 UserInfo=0x1655c0 "未找到应用程序的“aps-environment”的权利字符串"
解决方法

1.查看证书是不是有.*

2.看看Push是否被关闭 

3.一定要按照先后顺序配置 

4.项目的Identify名称一定要和App ID中的对应
原创粉丝点击