>  기사  >  백엔드 개발  >  PHP에서 iOS 푸시를 구현하는 방법

PHP에서 iOS 푸시를 구현하는 방법

藏色散人
藏色散人원래의
2020-09-07 10:48:094116검색

php에서 ios 푸시를 구현하는 방법: 먼저 보낼 메시지와 iPhone 로고를 패키지하여 APNS로 보낸 다음 해당 로고가 있는 iPhone을 찾아 메시지를 iPhone으로 보냅니다. 해당 애플리케이션에 대한 설정에 따라 푸시 알림이 팝업됩니다.

PHP에서 iOS 푸시를 구현하는 방법

추천: "php 동영상 튜토리얼"

IOS 푸시 메시지는 많은 IOS 애플리케이션에 있는 기능입니다. 최근에 많은 정보를 참고하다가 마침내 알게 되었습니다. 꺼내서 공유하는 단계는 다음과 같습니다.

iOS 메시지 푸시의 작동 메커니즘은 다음 그림으로 간단하게 요약할 수 있습니다.


제공자는 특정 iPhone 소프트웨어이며 APNS는 Apple Push 알림 서비스입니다. Apple Server의 약어입니다.

위 그림은 세 단계로 나눌 수 있습니다.

1단계: 애플리케이션이 보낼 메시지와 대상 iPhone의 식별 정보를 패키지하여 APNS로 보냅니다.

2단계: APNS는 푸시 서비스에 등록된 자체 아이폰 목록에서 해당 ID를 가진 아이폰을 검색하여 아이폰으로 메시지를 보냅니다.

세 번째 단계: iPhone은 보낸 메시지를 해당 애플리케이션에 전달하고 설정에 따라 푸시 알림을 팝업으로 표시합니다.

위 그림에서 볼 수 있는 내용은 다음과 같습니다.

1. 지원서 등록 메시지 푸시.

2. iOS는 APNS 서버에서 장치 토큰을 얻고, 애플리케이션은 장치 토큰을 받습니다.

3. 애플리케이션은 PUSH 서버 프로그램에 장치 토큰을 보냅니다.

4. 서버 프로그램이 APNS 서비스에 메시지를 보냅니다.

5. APNS 서비스는 iPhone 애플리케이션에 메시지를 보냅니다.

iPhone 클라이언트와 APNS, 공급자와 APNS 모두 인증서를 통해 연결해야 합니다.

이제 사용되는 여러 인증서를 소개하겠습니다.

1. CSR 파일

1. 인증서 서명 요청(CSR) 생성


2. 이메일과 일반 이름을 입력하고 하드 드라이브에 저장하도록 선택하세요.


계속하려면 클릭하세요.


이렇게 하면 로컬에서 Push.certSigningRequest 파일이 생성됩니다.

2.p12 파일

1.


2. 비밀번호를 입력하세요.

그러면 Push.p12 파일이 생성됩니다.

3. SSL 인증서 파일

1. 유료 계정으로 iOS 프로비저닝 포털에 로그인하고 새 앱 ID를 생성하세요. iOS 애플리케이션의 실제 머신 디버깅을 참조하세요. 기록 :

2. 오른쪽의 구성을 클릭합니다:

3. 개발 푸시 SSL 인증서 줄 다음에 구성을 클릭합니다:

4. 계속을 클릭합니다.


5. 이전에 생성된 Push.certSigningRequest 파일에 대해 생성을 클릭하면 다음 페이지가 나타납니다.


6. 계속을 클릭합니다.


7. 다운로드를 클릭하고 파일 이름을 aps_developer_identity.cer로 지정합니다.

8. 완료를 클릭하면 상태가 활성화됨으로 변경됩니다.

지금까지

1, Push.certSigningRequest

2, Push.p12

3, aps_developer_identity.cer

aps_developer_dientity.cer을 두 번 클릭하여 키체인에 등록했습니다. 2. 프로필 인증서를 준비하세요. 푸시 메시지는 실제 컴퓨터에서만 테스트할 수 있으므로 프로필 인증서를 만들어야 합니다.

위 프로필을 만들려면 "새 프로필"을 클릭하세요. APP ID로 프로필을 생성하고, 성공 후 *_Dev_Profile.mobileprovision을 다운로드하여 xcode의 프로비저닝 프로필에 추가하세요.

이것을 xcode에 추가하기 전에 한 가지 주의할 점이 있습니다. , 먼저 추가해야 합니다. 삭제하세요. 2개 이상이면 오류가 발생합니다.


3. 프로젝트 코드

이제 인증서가 준비되었습니다. 다음으로 xcode에서 새 테스트 프로젝트를 생성합니다. 프로젝트의 번들 식별자는 위에서 빌드한 APP ID와 동일해야 합니다.

didFinishLaunchingWithOptions에 코드를 추가하세요

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 
[self.window makeKeyAndVisible];
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
    return YES;
 
}
 
 
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {
    NSLog(@"regisger success:%@", pToken);
    
    //注册成功,将deviceToken保存到应用服务器数据库中
    
}
 
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    // 处理推送消息
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"通知" message:@"我的信息" delegate:selfcancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
    [alert show];
    [alert release];
NSLog(@"%@", userInfo);
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Regist fail%@",error); 
    
  
}

여기서 모든 것이 잘 되면 실제 머신에서 실행할 수 있습니다. 등록이 성공하면 iPhone의 deviceToken인

My을 얻을 수 있습니다. 토큰은 다음과 같습니다.


2f471ebd99470b40b57c0049667e7ee8

넷째, php를 사용하여 메시지를 APNS에 푸시합니다.

1. PHP에도 APNS에 연결하려면 인증서가 필요합니다. 위에서 얻은 것 인증서가 몇 개 있나요? 터미널을 열고 다음과 같이 위 인증서를 처리합니다.

cd 인증서가 있는 디렉터리를 입력합니다.

.cer 파일을 .pem 파일로 변환:

$ openssl x509 -in aps_developer_identity.cer -inform der
-out PushChatCert.pem

개인 키 변환 Push .p12 파일을 pem 파일로:

$ openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:

你首先需要为.p12文件输入passphrase密码短语,这样OpenSSL可以读它。然后你需要键入一个新的密码短语来加密PEM文件。还是使用”pushchat”来作为PEM的密码短语。你需要选择一些更安全的密码短语。

注意:如果你没有键入一个PEM passphrase,OpenSSL将不会返回一个错误信息,但是产生的.pem文件里面将不会含有私钥。

最后。把私钥和证书整合到一个.pem文件里:

$ cat PushChatCert.pem PushChatKey.pem > ck.pem

为了测试证书是否工作,执行下面的命令

$ telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.226…
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is ‘^]’.

它将尝试发送一个规则的,不加密的连接到APNS服务。如果你看到上面的反馈,那说明你的MAC能够到达APNS。按下Ctrl+C 关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许2195端口。

然后再次连接,这次用我们的SSL证书和私钥来设置一个安全的连接:

$ openssl s_client -connect gateway.sandbox.push.apple.com:2195
-cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem:

你会看到一个完整的输出,让你明白OpenSSL在后台做什么。如果连接是成功的,你可以键入一些字符。当你按下回车后,服务就会断开连接。如果在建立连接时有问题,OpenSSL将会给你一个错误消息

ck.pem文件就是我们需要得到php连接APNS 的文件,将ck.pem和push.php放入同一目录上传到服务器,push.php的代码如下:

<?php
// 这里是我们上面得到的deviceToken,直接复制过来(记得去掉空格)
$deviceToken = &#39;740f4707bebcf74f 9b7c25d4 8e3358945f6aa01da5ddb387462c7eaf 61bb78ad&#39;;
// Put your private key&#39;s passphrase here:
$passphrase = &#39;abc123456&#39;;
// Put your alert message here:
$message = &#39;My first push test!&#39;;
$ctx = stream_context_create();
stream_context_set_option($ctx, &#39;ssl&#39;, &#39;local_cert&#39;, &#39;ck.pem&#39;);
stream_context_set_option($ctx, &#39;ssl&#39;, &#39;passphrase&#39;, $passphrase);
// Open a connection to the APNS server
//这个为正是的发布地址
 //$fp = stream_socket_client(“ssl://gateway.push.apple.com:2195“, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx);
//这个是沙盒测试地址,发布到appstore后记得修改哦
$fp = stream_socket_client(
&#39;ssl://gateway.sandbox.push.apple.com:2195&#39;, $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo &#39;Connected to APNS&#39; . PHP_EOL;
// Create the payload body
$body[&#39;aps&#39;] = array(
&#39;alert&#39; => $message,
&#39;sound&#39; => &#39;default&#39;
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack(&#39;n&#39;, 32) . pack(&#39;H*&#39;, $deviceToken) . pack(&#39;n&#39;,
 strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo &#39;Message not delivered&#39; . PHP_EOL;
else
echo &#39;Message successfully delivered&#39; . PHP_EOL;
// Close the connection to the server
fclose($fp);
?>

接下来我们访问http://localhost/push/push.php

iphone就会接收到一条推送消息了,如果有问题的话就检查上面的操作步骤,特别是加红的部分

 另外去除标记的方法为,在viewDidApper中加入

int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
    if(badge > 0)
    {
        badge--;
        [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
    }

위 내용은 PHP에서 iOS 푸시를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.