『壹』 php怎麼接收ios 上傳圖片 的數據流 ios 用msdata .php要怎麼接收 然後保存成圖片
你直接從post中取數據流,寫入文件,或者保存到資料庫。
『貳』 ios推送消息 用php推送怎麼實現
php實現ios推送的方法:首先把要發送的消息以及iPhone標識打包,並發送給APNS;然後查找有相應標識的iPhone,並把消息發送到iPhone;最後把發來的消息傳遞給相應的應用程序,並且按照設定彈出Push通知即可。 可以分為三個階段:『叄』 如何透過 PHP 發送 Apple Notification Push
在 PHP 的實作上透過 stream_context_create() 函式建立 SSL 連線,再利用 pack() 函式實作上述的規格來傳送 Bytes 資料 (Payload),以下是 PHP 最精簡的發送訊息程式碼,執行後可以順利與 APNS 溝通與發送訊息。各位可以依據需求修改程式來發送 Enhanced 或 Simple 訊息,或者切換 Sandbox 或 Proction 環境。程式範例如下:
<?php
// Proction mode
$certificateFile = 'apns-dis.pem';
$pushServer = 'ssl://gateway.push.apple.com:2195';
$feedbackServer = 'ssl://feedback.push.apple.com:2196';
// Sandbox mode
$certificateFile = 'apns-dev.pem';
$pushServer = 'ssl://gateway.sandbox.push.apple.com:2195';
$feedbackServer = 'ssl://feedback.sandbox.push.apple.com:2196';
// push notification
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $certificateFile);
$fp = stream_socket_client(
$pushServer,
$error,
$errorStr,
100,
STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT,
$streamContext
);
// make payload
$payloadObject = array(
'aps' => array(
'alert' => 'Server Time:'.date('Y-m-d H:i:s'),
'sound' => 'default',
'badge' => 3
),
'custom_key' => 'custom_value'
);
$payload = json_encode($payloadObject);
$deviceToken = '';
$expire = time() + 3600;
$id = time();
if ($expire) {
// Enhanced mode
$binary= pack('CNNnH*n', 1, $id, $expire, 32, $deviceToken, strlen($payload)).$payload;
} else {
// Simple mode
$binary= pack('CnH*n', 0, 32, $deviceToken, strlen($payload)).$payload;
}
$result = fwrite($fp, $binary);
fclose($fp);
?>
『肆』 PHP極光推送如何自定義消息提醒聲音。
->iosNotification($Content,Array('badge'=>'+1','sound'=>'sub.caf'))
這是ios的,安卓我之前測試貌似不行
『伍』 apple push notification service badge 怎麼獲取
一.前期准備
1.從Keychain中選擇Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority...
填寫User email(apple開發者帳號)/Common name(key的名字),選擇Save to Disk,保存到Desktop,一定要有個復選框出來的!完成後會在鑰匙串種加入2個密鑰
2.做完上一步,Keychain會增加一個key,在Keychain中找到Key欄,將1中生成的private key導出為.p12文件,比如Test_Push_Notifier_PrivateKey.p12
3.登錄developer.apple.com的iOS portal,申請AppID,需要具體到com.XXX.XXX,即不允許最後一個欄位為模糊匹配
隨後對該AppID進行配置,選中Push Notification,上傳前面生成的CSR文件,Portal會自動生成aps_development.cer,下載aps_development.cer
4.在Portal上生成新的Provision,將AppID選中為com.XXX.XXX,並下載新的test.mobileprovision文件,並導入到Xcode之中
5.現在我們有兩個文件:Test_Push_Notifier_PrivateKey.p12/aps_development.cer。打開終端,使用openssl對兩個文件進行加密:
加密aps_development.cer:
openssl x509 -in aps_development.cer -inform der -out cer_dev.pem
加密Test_Push_Notifier_PrivateKey.p12
openssl pkcs12 -nocerts -in Test_Push_Notifier_PrivateKey.p12 -out key.pem
PHP服務端則將兩者合並:
cat cer_dev.pem key.pem > Push_Notifier.pem
java服務端要轉化為p12格式,用以下命令轉化:
openssl pkcs12 -export -in cer_dev.pem -inkey key.pem -out cred_dev.p12
6.測試ApplePushServer正常:
telnet gateway.sandbox.push.apple.com 2195
7.測試加密證書工作正常:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert cer_dev.pem -key key.pem
二.客戶端開發
需要實現的代碼和覆蓋的方法
1.在AppDelegate.m中修改-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
函數體中添加:
[[UIApplication sharedApplication] :(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert)];
2.在AppDelegate.m中添加下列函數:
-(void)application:(UIApplication*)application :(NSData*)deviceToken
{
NSLog(@"我的設備ID: %@", deviceToken);
}
-(void)application:(UIApplication*)application :(NSError*)error
{
NSLog(@"注冊失敗,無法獲取設備ID, 具體錯誤: %@", error);
}
3.連接設備,運行一次程序,獲得deviceToken號碼,應該是64個16進制的數,記下來。
4.啟動方式和調用方法
程序開啟 --> 前台運行-->notification --> didReceiveRemoteNotification
不更改Application的badge Number
程序開啟 --> 後台運行 -->notification --> App出提示,並更改application的badge Number --> 點應用程序圖標 --> applicationDidBecomeActive
程序開啟 --> 後台運行 -->notification --> App出提示,並更改application的badge Number --> 點上面出現的提示,或者下拉菜單提示,或者點擊alert框的確定--> didReceiveRemoteNotification --> applicationDidBecomeActive
程序關閉 -->notification --> App出提示,並更改application的badge Number --> 點上面出現的提示,或者下拉菜單提示,或者點擊alert框的確定--> didFinishLaunchingWithOptions --> applicationDidBecomeActive
可以在didFinishLaunchingWithOptions中判斷是否是apns來啟動的
[cpp] view plain print?
NSDictionary* pushInfo = [launchOptions objectForKey:@""];
//獲取推送詳情
NSString *pushInfo = [[NSString stringWithFormat:@"%@",[pushInfo objectForKey:@"aps"]];
在程序中如果要根據apns信息來做修改,就需要注意這樣的流程,每個啟動方式所調用的方法是不同的。
三.伺服器端開發
伺服器端 java第三方開發
https://github.com/notnoop/java-apns
四.注意事項
1.proction和developer的token是不一樣的,需要用ad hoc來beta測試下
2.要將token上傳給伺服器,伺服器要用,此外蘋果也不能保證token會保證不變,所以最好將保留過長的token刪除再同步次伺服器。
3.發布前要將push地址改掉
測試用:gateway.sandbox.push.apple.com 2195
發布用:gateway.push.apple.com 2195
4.不要迷信APNS,蘋果不是快遞公司保證每個用戶簽收。
5.接受2196的埠是蘋果每次push後會記錄下用戶收到狀況,如果用戶已經沒有安裝這個應用了,則會在伺服器保留信息,等服務端訪問2196埠,會將這些設備TOKEN傳送過來,這樣服務端可以將這些設備給disable掉