如何获取设备令牌

5
我有一个iOS应用程序,我想要整合推送通知。我在YouTube上看到了一个教程,一切都很好,但是最近我正在使用开发证书(用于测试 - 不用于AppStore),并且我在我的服务器上有PHP脚本。在这个文件中,存储了具有我的iPhone的设备令牌,并且写在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);
}
1个回答

2

我不懂PHP,无法提供具体代码,但我可以解释一般原则。

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

当注册成功并获得设备令牌时,您应在application:didRegisterForRemoteNotificationsWithDeviceToken:的实现中将其发送到您的服务器。

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

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


哦,所以我需要将每个设备令牌存储在数据库中,然后将它们组成数组并发送,是这样吗?您能否解释一下我如何从Xcode将设备令牌发送到我的服务器?非常感谢,Steve - stepik21
@stepik21 从Xcode发送设备令牌是什么意思?您需要在应用程序中编写代码,与您的服务器联系并发送设备令牌。例如,您可以向您的服务器发送HTTP POST或HTTP GET请求,并将设备令牌作为参数发送。 - Eran
哦,是的,我是指从应用程序...好的,我会尝试的 :-) - stepik21

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接