gpt4 book ai didi

php - Swift 2 - 使用 PHP 在数据库中插入设备 token

转载 作者:行者123 更新时间:2023-11-28 08:50:15 25 4
gpt4 key购买 nike

编辑:我正在开发一个使用 webview 的 iOS 应用程序,它有推送通知,我正在尝试将设备 token 传递给 php 文件 (sampleIndex.php) 以进行数据库注册。

我尝试发布设备 token 无效。这是代码:

编辑 (2):我当前的代码基于@mat 的回答(相同的概念,但更清晰)

extension NSData {
func hexString() -> String {
// "Array" of all bytes:
let bytes = UnsafeBufferPointer<UInt8>(start: UnsafePointer(self.bytes), count:self.length)
// Array of hex strings, one for each byte:
let hexBytes = bytes.map { String(format: "%02hhx", $0) }
// Concatenate all hex strings:
return (hexBytes).joinWithSeparator("")
}

}


func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

let session = NSURLSession.sharedSession()
let tk = deviceToken.hexString()
let postBody = NSString(format: "token=%@", tk)
let endBody = NSURL(string: "http://samplesite.com/subfolder/subfolder2/sampleIndex.php")
let request = NSMutableURLRequest(URL: endBody!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 30.0)
request.HTTPMethod = "POST";
request.HTTPBody = postBody.dataUsingEncoding(NSUTF8StringEncoding)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
let dataTask = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in

if data != nil {

print("data: \(response)")

} else {

print("failed: \(error!.localizedDescription)")

}

}//closure

dataTask.resume()
}

为什么我获取不到tk的值? ( token 设备)。我错过了什么吗?抱歉,我是新手。

编辑 (3)这是请求 token 的 php 代码 (sampleIndex.php):

<?php 
include_once("includes/myConnect.php");
$token = $_REQUEST['token'];

if (empty($token)) {
$sql = "UPDATE sampleDB . sampleTB SET token= '0' WHERE id='8982'";
$result = mysqli_query($conn, $sql);
}else{
$sql = "UPDATE sampleDB . sampleTB SET token= '1' WHERE id='8982'";
$result = mysqli_query($conn, $sql);
}

?>

(token设置为值“0”证明设备token在sampleIndex.php上传递失败)

最佳答案

首先确保您没有收到以下错误“失败:无法加载资源,因为应用程序传输安全策略要求使用安全连接”如果收到,请添加这个到你的plist: enter image description here

以下代码适用于我。我刚刚更改了 postBody 和 URL 来回答你的问题,但这样做我能够将 token 保存到我的数据库中。

extension NSData {
func hexString() -> String {
// "Array" of all bytes:
let bytes = UnsafeBufferPointer<UInt8>(start: UnsafePointer(self.bytes), count:self.length)
// Array of hex strings, one for each byte:
let hexBytes = bytes.map { String(format: "%02hhx", $0) }
// Concatenate all hex strings:
return (hexBytes).joinWithSeparator("")
}

}


@UIApplicationMain


class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.


//request notification
let type: UIUserNotificationType = [UIUserNotificationType.Badge, UIUserNotificationType.Alert, UIUserNotificationType.Sound];
let setting = UIUserNotificationSettings(forTypes: type, categories: nil);
UIApplication.sharedApplication().registerUserNotificationSettings(setting);
//register for remote notification - push notification
UIApplication.sharedApplication().registerForRemoteNotifications();

return true
}

fun application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

let session = NSURLSession.sharedSession()
let userId = "12345" // not sure you have a userId at this point but you can remove that line and also remove it from postBody
let tk = deviceToken.hexString()
let postBody = NSString(format: "user=%@&token=%@", userId, tk)
let endBody = NSURL(string: "http://www.sampleurl.com/sampleIndex.php")
let request = NSMutableURLRequest(URL: endBody!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 30.0)
request.HTTPMethod = "POST";
request.HTTPBody = postBody.dataUsingEncoding(NSUTF8StringEncoding)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
let dataTask = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in

if data != nil {

print("data: \(response)")

} else {

print("failed: \(error!.localizedDescription)")

}

}//closure

dataTask.resume()
}

要在数据库中插入 token ,我强烈建议您使用 prepare 语句。我使用 OOP Php,所以我有一个处理所有连接的类数据库,但我简化了代码:

sampleIndex.php

<?php 

$userid = $_REQUEST['user'];
$token = $_REQUEST['token'];

if (empty($userid) || empty($token)) {
return;
}else{

saveTokenToDatabase($userid, $token);
}


function saveTokenToDatabase($user, $token){

$username = 'youDatabaseUsername';
$password = 'yourPassword';

$dbh = new PDO('mysql:host=localhost;dbname=database_name', $username, $password);

// first verify if the token is already in the database
$sth = $dbh->prepare("SELECT token
FROM user_tokens
WHERE user_id = ?
AND token = ? LIMIT 1");

$sth->bindParam(1, $user, PDO::PARAM_INT);
$sth->bindParam(2, $token, PDO::PARAM_STR);
$sth->execute();
$tokenExists = ($sth->fetchColumn() > 0) ? true : false;

//if token is not already there
if(!$tokenExists){

$now = date("Y-m-d H:i:s");
$query = $dbh->prepare("INSERT INTO user_tokens (user_id, token, datecreated) VALUES(?,?,'".$now."')");
$query->bindParam(1, $user, PDO::PARAM_INT);
$query->bindParam(2, $token, PDO::PARAM_STR);
$query->execute();

// determine if token already exists
}
//close the connection
$dbh = null;
}

关于php - Swift 2 - 使用 PHP 在数据库中插入设备 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34432162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com