‘壹’ 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掉