4

我有一个应用程序iOS我想集成推送通知。我见过tutorial on youtube,一切正常,但最近我正在使用开发证书(用于测试 - 不适用于AppStore的使用),并且我的服务器上有PHP脚本。在这个文件中存储了具有我的iPhone的deviceToken,它是用php变量$ deviceToken写的。但是现在,当我想在AppStore中使用它时,如何从每个下载了我的应用程序并将其放入PHP脚本的人获取设备令牌?如何获得设备令牌

这是我的PHP文件:

if($_POST['message']){ 

     $deviceToken = '(my device token)'; 

     $message = stripslashes($_POST['message']); 

     $payload = '{ 
         "aps" : 

          { "alert" : "'.$message.'", 
           "badge" : 1, 
           "sound" : "bingbong.aiff" 
          } 
        }'; 

     $ctx = stream_context_create(); 
     stream_context_set_option($ctx, 'ssl', 'local_cert', 'cert.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, $ctx); 
     if(!$fp){ 
      print "Failed to connect $err $errstrn"; 
      return; 
     } else { 
      print "DONE!"; 
     } 

     $devArray = array(); 
     $devArray[] = $deviceToken; 

     foreach($devArray as $deviceToken){ 
      $msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack  ("n",strlen($payload)) . $payload; 
      fwrite($fp, $msg); 
     } 
     fclose($fp); 
    } 

<form action="send-notification.php" method="post"> 
    <input type="text" name="message" maxlength="100"> 
    <input type="submit" value="SEND"> 
</form> 
</body> 

,这是我在Xcode(AppDelegate.m)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; 

    return YES; 
} 

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
    NSString *deviceTokenString = [NSString stringWithFormat:@"%@", deviceToken]; 
    NSLog(deviceTokenString); 
} 

回答

2

好了,我不知道PHP ,所以我不能给你具体的代码,但我可以解释一般原则。

当您的应用程序启动时,您应该通过调用registerForRemoteNotificationTypes:方法来注册Apple推送通知。

当注册成功并且您获得设备令牌时,您应该将其发送到您的服务器,执行application:didRegisterForRemoteNotificationsWithDeviceToken:

您的服务器应该将其存储在某些数据库中。

发送通知的PHP脚本应该从该数据库中获取设备令牌。

+0

哦,所以我需要将每个设备标记存储在数据库中,而不是我必须对它们进行排列并发送它。你能解释一下,我怎么能把devicetoken从xcode发送到我的服务器? Thx非常多, Steve – stepik21

+0

@ stepik21从xcode发送设备令牌意味着什么?您必须在联系您的服务器并发送设备令牌的应用程序中编写代码。例如,您可以将HTTP POST或HTTP GET请求发送到服务器,并将设备令牌作为参数。 – Eran

+0

哦,是的,我从应用程序meen ...好吧,我会尝试它:-) – stepik21