zoukankan      html  css  js  c++  java
  • APNs初体验

    首先,确定你已经有了CSR证书请求、开发证书和App ID。如果你不是第一次开发iOS应用程序,那么你可能已经有了这些东西。那么你可以继续以下的步骤。

    一、配置App ID

    登录你的provisioningportal,点击左侧边栏的App ID菜单,可以查看你现有的App ID。

    点击打开链接

    图 1-1

    选择一个App ID进行配置。注意列表中有的App ID的Apple Push Notification Service列是灰色的,并且不允许使用Configure按钮。这是因为APNs不支持带统配符的AppID。

    你可以配置现有的App ID,也可以重新创建一个。我们假设是后者。点击New App ID,按照如下截图进行设置:

    点击打开链接

    图 1-2

    注意,在Bundle Seed ID一栏,苹果提供了Team ID的概念,如果你要和其他应用程序共享钥匙串,可以选择一个已经存在的BundleSeed ID。

    点击Submit,马上可以在App ID中看到你新建的PushAppID,点击右边的Configure按钮,进入App ID配置页面:

    点击打开链接

    图 1-3

    勾选“Enable for Apple Push Notification service”,点击“Development Push SSLCertificate”右边的“Configure”按钮。

    在接下来的“Apple Push Notification service SSL Certificate Assistant”页面中,点击Continue按钮。

    然后选择你硬盘上保存的CSR证书请求文件,点击Generate按钮,以生成一个SSL证书。点击download按钮把ssl证书下载到本地 :

    点击打开链接

    图 1-4

    文件名为aps_developer_identity.cer,双击,将证书安装到钥匙串中。这个证书会在你的程序中用到,它允许程序接收 APNs 发送来的推送通知。

    二、创建 Provisioning Profile

    Provisioning Profile用于把ssl证书安装到设备上。点击Provisioning Portal中左侧边栏的Provisioning菜单进入ProvisioningProfile页面。

    用New Profile按钮新建一个Provisioning Profile。

    点击打开链接

    图 2-1

    ProfileName填写PushDeviceProfile,Certificate勾选你所用的开发证书(这个证书将和第三步Code Signing中设置的一致),如果不太清楚,把所有证书勾上即可。AppID栏选择我们前面创建的App ID。Devices勾上用于接收推送通知的设备,也可以把所有设备勾上。

    点击Submit,将创建Profile。等待几秒刷新页面,Download按钮将出现,下载该证书,文件名为 PushDeviceProfile.mobileprovision。把设备连接上Mac,将该mobileprovision文件拖到 Dock 栏的 Xcode 图标,即可在设备上安装该profile。

    三、创建APNs应用程序

    创建Window-based Application,命名为APNsTest。准备一个.wav文件,比如machinegun.wav,拖到Groups& Files的resources组中。

    选择Targets下的APNsTest,打开info窗口,并切换到Properties页。把Indentifier修改为我们前面创建的AppId:com.ydtf.AppID。

    切换到 Build 页,在 search 输入框中键入 Code Signing。在 Any iPhone OS Device 选项,选择正确的profile(请回忆第二步创建Provisioning Profile时选择的证书) ,注意证书和profile是成对使用的,如下图所示 :

    点击打开链接

    图 3-1

    在本例中,我们用于代码签名的profile是前面创建的PushDeviceProfile,使用的证书是Hongyan Yang(正是我们在创建profile时,在Certificates栏中选择的证书,见图2-1)。

    打开APNsTestAppDelegate.m,找到代码“[windowmakeKeyAndVisible];”,在后面加入:

    //注册APNs类型:警告+徽章+声音

    [[UIApplication sharedApplication]

     registerForRemoteNotificationTypes:

     (UIRemoteNotificationTypeAlert|

    UIRemoteNotificationTypeBadge|

    UIRemoteNotificationTypeSound)];

    然后实现3个方法:

    // 注册Device token

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

        NSString *str = [NSString

     stringWithFormat:@"Device Token=%@",deviceToken];

    NSLog(@"%@",str);

    }

    // 注册APNs错误

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

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

    NSLog(@"%@",str);

    }

    // 接收推送通知

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

    NSString *msg=[NSString stringWithFormat:@"%@",userInfo];

        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"通知"

     message:msg delegate:nil

      cancelButtonTitle:@"OK" otherButtonTitles:nil];

    [alert show];

    alert=nil;

    }

    在真实设备上运行程序(不要在模拟器上运行!),iOS会在屏幕出现一个提示框,问你是否同意应用程序APNsTest接收推送通知,当你点击同意后,会在控制台看到输出的Devicetoken:

    DeviceToken=<804d95ab 708a0aad 33a08c1f 00341ae2 3774bcb0 02362e33 9a8535758f36dc90>

    你可以把这个Device token复制下来,等下要用。

    打开设备的“设置->通用”,可以看到所有使用APNs的应用程序列表:

    点击打开链接

    图 3-2

    可以看到,我们的APNsTest程序已经注册了APNs类型:标记、提醒、声音。你可以在这里更改这些设置。

    四、推送通知提供者

    推送通知提供者是一个程序,用于负责和苹果APNs服务器进行SSL通讯,它是实际上的通知发送者。如果你想想用户设备上的应用程序发送消息,实际上是由推送通知提供者进行的。实际上,整个APNs服务由3层应用程序构成:

    推送通知提供者、Apple APNs服务器、iOS客户端。

    苹果APNs服务器位于两者中间,起到一个中间人的角色。提供者向客户端发送消息,必须由APNs服务器来转发。开发人员除了需要实现客户端外,还需要实现提供者的代码。我们前面创建的SSL证书aps_developer_identity.cer,需要在提供者程序中使用,因为与APNs服务器通讯需要一个合法的SSL数字证书。

    如果仅仅是测试,我们可以使用一个其他人已经实现的提供者:

    PushMeBaby,下载地址

    下载后解压缩,实际上得到的是一个Xcode工程。打开PushMeBaby工程,将aps_developer_identity.cer文件导入到Resources文件夹。

    打开ApplicationDelegate.m文件,在init方法找到“self.deviceToken =”一行,将刚才复制的Devicetoken粘贴到这里:

    self.deviceToken = @"804d95ab708a0aad 33a08c1f 00341ae2 3774bcb0 02362e33 9a853575 8f36dc90";

    把“self.payload =”一行中的You got a new message!替换成我们自己的提示信息“收到一条推送通知。”。

    把“self.certificate =”一行中的apns替换成我们自己的SSL文件aps_developer_identity。

    运行PushMeBaby,程序显示如下界面:

    点击打开链接

    图 4-1

    当提示是否允许使用证书时,选择“总是允许”。然后点击Push按钮。

    稍后,你的iPhone/iPod会受到一条推送通知:

    点击打开链接

    图 4-2

    如果你点击“显示”按钮,则会启动APNsTest,并立即显示消息的内容。

    点击打开链接

    图 4-3

    在我们的self.payload中,仅仅使用了两个基本的通知类型:标记(badge)和提醒(alert)。

    self.payload = @"{\"aps\":{\"alert\":\"收到一条推送通知。\",\"badge\":1}}";

    实际上我们也可加上声音(sound)或者是其他自定义的键-值对,唯一的限制是整个payload不能超过256字节:

    self.payload = @"{\"aps\":{\"alert\":\"收到一条推送通知。\",\"badge\":5,\"sound\":\"machinegun.wav\",\"myData\":12345}}";

    还有一个有趣的地方。如果发送通知时,用户的APNsTest已经在当前任务中,那么当用户收到通知时,则忽略通知,并直接在APNsTest程序中呈现如图4-3所示的界面。



  • 相关阅读:
    Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码(用socket解释http,不错)
    HTTP协议 HttpWebRequest和 Socket的一点总结
    ASP.NET MVC基础学习
    利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录
    C#中Hashtable容器的了解与使用
    lib 和 dll 的区别、生成以及使用详解
    将SQL获取的信息传递到Email中
    关于ref与out的区别
    C#中指针使用总结
    一个打包文件导入器
  • 原文地址:https://www.cnblogs.com/encounter/p/2188456.html
Copyright © 2011-2022 走看看