您的位置:

iOS推送完全指南

一、iOS推送证书

iOS推送证书是与APNs建立安全连接的必需工具。在发布推送之前,您需要为您的应用程序创建一个证书,并将其下载到您的开发/生产环境中。下面是一些简单的步骤:

1. 登录https://developer.apple.com/account,选择“Certificates, Identifiers & Profiles”。


$ openssl genrsa -out Push.pem 2048
$ openssl req -new -key Push.pem -out Push.csr -subj "/CN=‹Your App Name›/emailAddress=‹Your Email Address›/UID=‹Your Team ID›" -config openssl.cnf
$ openssl x509 -req -in Push.csr -out Push.crt -signkey Push.pem -extensions req_ext -extfile openssl.cnf

2. 在左侧的“Keychain”中选择“Certificates”。

3. 点击右上角的“+”按钮以创建新的证书,并选择“APNs Authentication Key”。

4. 在下一个屏幕上,选择您的应用程序,并单击“生成”按钮。然后,下载私钥。

5. 添加Apple生成的APNs密钥到您的密钥库中:


$ openssl pkcs12 -export -inkey AuthKey.p8 -in Certificates.p12 -out CertificatesPush.p12

6. 您现在已准备好将证书与您的应用程序和服务器一起使用了。

二、iOS推送收费

Apple为每个开发者账号提供了1,000个免费的推送服务。这意味着,您可以向1,000个不同的设备发送推送,然后需要支付近乎微不足道的费用,每1000条推送只要99美分。

如果您还没有注册苹果开发者账号,您需要首先进行支付。每年的价格为99美元。

三、iOS推送机制

iOS向移动设备发送推送通知是通过Apple推送服务(APNs)实现的。APNs是Apple支持iOS的推送通知的中央服务器,用于接收发送到移动设备的推送通知,并传递给设备。以下是APNs工作原理的简易解释:

1. 手机与APNs服务器建立加密链接。

2. 应用程序向APNs服务器请求令牌(每个应用程序有唯一的令牌)。

3. 应用程序将令牌发送给服务器。

4. 服务器接收令牌并将其存储在内存中。

5. 当应用程序发送推送通知时,它将消息和设备令牌一起发送到APNs服务器。

6. APNs服务器将消息发送到与设备令牌相关联的设备。

四、iOS推送时间

iOS推送的最佳时间因应用程序不同而异的。因此,开发人员需要花费时间进行测试和分析,以了解特定应用程序的最佳时间。这里有一些iOS推送时间的经验法则:

1. 不要在深夜发送推送通知,这可能会打扰用户的休息时间。

2. 在用户常规解锁手机和使用应用程序的时间段发送推送通知。

3. 为事件发送推送通知,而不是在用户使用应用程序时发送推送通知,这样会打扰他们的工作流程。

五、iOS推送方法

1. 在应用程序中使用“本地通知”。


let content = UNMutableNotificationContent()
content.title = "Notification Tutorial"
content.subtitle = "from iOScreator"
content.body = "Notification triggered"
content.badge = 1
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: "notification.id.01", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request)
{ (error) in
    if let _ = error {
        print("error")
    }}

2. 发送具有定制消息的Push通知。


$deviceToken = 'e5a1f04a5d...cc1a715e308f';
$message = "Hello World!";
$title = "My Application";
$body['aps'] = array('alert' => $message);
$body['aps']['data'] = array('title' => $title);
$body['aps']['sound'] = 'default';

$payload = json_encode($body);

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', 'password');

$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

$message = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

$result = fwrite($fp, $message, strlen($message));

if ($result)
    echo 'Message sent successfully' . PHP_EOL;
else
    echo 'Message sending failed' . PHP_EOL;

fclose($fp);

六、iOS推送延迟

iOS推送通知不保证实时到达设备。网络连接问题或服务器繁忙都可能会导致延迟。此外,Apple还增加了发送消息的缓冲区延迟时间,以避免向过度频繁的设备发送推送通知。

以下是一些可以减少iOS推送延迟的方法:

1. 在发送推送之前进行测试。

2. 不要在网络负载高峰期发送推送通知。

3. 避免向没有应用程序打开的设备发送推送通知。

七、iOS推送p8证书

iOS推送证书p8是新的证书格式,已取代旧的p12证书。下面是一些简单的步骤:

1. 登录https://developer.apple.com/account,选择“Certificates, Identifiers & Profiles”。

2. 在左侧的“Keychain”中选择“Keys”。

3. 点击右上角的“+”按钮以创建新的密钥,并选择“APNs Auth Key”。

4. 在下一个屏幕上,选择您的应用程序,并单击“生成”按钮。然后,下载私钥。

5. 添加Apple生成的APNs密钥到您的密钥库中:


$ openssl pkcs8 -in private_key.p8 -out private_key.pem -nocrypt

6. 您现在已准备好将证书与您的应用程序和服务器一起使用了。

八、iOS推送开发

要开始iOS推送通知的开发,请首先注册iOS开发者账号,并为您的应用程序创建推送证书(如上所述)。以下是一些有用的开发技巧和调试工具:

1. Apple的官方指南提供了开发人员可以使用的完整iOS推送服务文档。

2.从iOS 10开始,苹果推出了一个新的框架,称为UserNotifications。它提供了一种简化推送通知开发的方法。详细信息可以在Apple的开发人员网站上找到。

3.除了Apple提供的远程推送通知API外,还有一些第三方库,如Parse.comOneSignal

九、iOS推送详解

Apple支持两种类型的推送通知:本地通知和远程通知。以下是两种推送通知的详细说明:

本地通知

本地通知是在不需要服务器或互联网连接的情况下发送到用户的设备的iOS应用程序。本地通知可能是一次性通知或定期通知。这种类型的通知通常用于提醒用户执行操作,例如提醒用户签到或称赞应用。对于本地通知的实现,我们可以使用以下代码:


let content = UNMutableNotificationContent()
content.title = "Notification Tutorial"
content.subtitle = "from iOScreator"
content.body = "Notification triggered"
content.badge = 1
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: "notification.id.01", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request)
{ (error) in
    if let _ = error {
        print("error")
    }}

远程通知

远程通知是由服务器发送到安装了应用程序的设备的iOS应用程序。远程通知通常用于即时消息和更新。对于远程通知的实现,我们可以使用以下代码:


$deviceToken = 'e5a1f04a5d...cc1a715e308f';
$message = "Hello World!";
$title = "My Application";
$body['aps'] = array('alert' => $message);
$body['aps']['data'] = array('title' => $title);
$body['aps']['sound'] = 'default';

$payload = json_encode($body);

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', 'password');

$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

$message = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

$result = fwrite($fp, $message, strlen($message));

if ($result)
    echo 'Message sent successfully' . PHP_EOL;
else
    echo 'Message sending failed' . PHP_EOL;

fclose($fp);

十、iOS推送怎么关闭

如果您不希望接收特定应用程序的推送通知,请按照以下步骤关闭推送通知:

1. 打开“设置”应用程序。

2. 搜索并单击要关闭推送通知的应用程序。

3. 关闭该应用程序的“允许通知”开关。

4. 如果您不想接收该应用程序的推送通知,还可以关闭“显示在锁屏上”、“声音”和“弹出式窗口”选项。

总之,在iOS推送中,您需要考虑的方面很多,包括证书创建、收费和APNs机制等。但是,掌握这些内容可以帮助您发送更有用、更高效和更及时的通知。好了,本次iOS推送完全指南到此结束!