• 关于

    android 判断是否安装 api

    的搜索结果

问题

最全Android开发常用工具类 热:报错

        主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java。        目前包括  HttpUtils、DownloadManagerPro、Safe.ijiami、ShellUtils...
kun坤 2020-06-06 16:33:25 0 浏览量 回答数 1

回答

详细解答可以参考官方帮助文档首次接入推送不成功 1、遇到问题可以先通过文档页进行关键字检索,一般都能命中相关的疑问。2、检查推送通道是否初始化成功,确保您在初始化时注册的回调函数onSuccess能够被成功调用。3、如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提醒检查appkey,appSecret等相关配置。4、如果发送的是消息,客户端不会通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。5、使用官方demo体验,,排除自身配置问题。使用官方demo时需要设置您自己的appKey,appSecret并修改包名。如果使用官方demo无问题,请确认下自己的实现和demo的区别。6、如果您的设备集成上阿里云移动推送Android SDK,端上日志显示初始化成功,控制台显示设备在线,但是总是推送失败,请检查以下参数是否符合规范: 请检查您的APP的versionName参数,versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。 修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。 7、如果集成成功,向设备推送通知,排查系统显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。8、推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题: 1.正常情况下的日志: 第一条handleRemoteMessage日志说明消息已经到达端上,第二条AgooMessageReceiver日志表明用户自定义Receiver已经接收到广播。 2.如果只有第一条日志,未出现第二条日志则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下: Intent intent = new Intent();intent.setAction("org.agoo.android.intent.action.RECEIVE");intent.setPackage(pack);//pack为应用包名intent.putExtra("type", "common-push");intent.addFlags(32);context.sendBroadcast(intent);//请使用ApplicationContext进行测试利用上述代码给您的自定义receiver发送广播,测试Receiver是否可以收到对应广播,如果还是收不到则说明存在广播拦截情况。 3.如果存在拦截情况,请确认你的设备是否不允许监听系统广播:在manifest.xml文件中将自定义receiver所监听的系统广播注释掉,具体操作如下文代码所示: <!-- 消息接收监听器 (用户可自主扩展) --> <receiver android:name=".demo.MyMessageReceiver" android:exported="true"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.taobao.accs.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="com.taobao.taobao.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="org.agoo.android.intent.action.RECEIVE" /> </intent-filter> <!--<intent-filter>--> <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.USER_PRESENT" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.BOOT_COMPLETED" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />--> <!--<data android:scheme="package" />--> <!--</intent-filter>--> </receiver>重复步骤2的操作,观察是否会可以成功接收广播。如果可以则说明您的设备rom不允许监听系统广播。当前receiver不监听系统广播不影响功能的正常使用,但会影响SDK的保活能力。 9、- 设备绑定标签后,服务端按该标签推送,隔天(T + 1)才能生效送达,参考Android API介绍 - 标签API。 已经接入成功,突然出现异常 1、推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知设备的手机设置情况,是否将推送App的通知弹出做了限制。2、如果出现应用处于前台可以收到推送,应用退到后台后无法接收到推送。请检查channel进程是否执行了推送初始化操作。 1.判断channel是否执行初始化方法:查看channel进程是否有如下日志输出,如无则表示未执行相应初始化操作 12-26 11:26:19.673 1951-1951/com.alibaba.push2:channel I/SecurityBoxService: Aliyun12-26 11:26:19.677 1951-1951/com.alibaba.push2:channel I/MPS:CloudPushService: [AMS]Initialize Mobile Push service...12-26 11:26:19.727 1951-1951/com.alibaba.push2:channel D/MPS:CloudPushService: load utdid: Vs6CkGxR86QDANku3NiLD/yA12-26 11:26:19.743 1951-1951/com.alibaba.push2:channel D/MPS:AppRegister: getLooper called.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping Prepared.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping handleMessage: 112-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: accs init.12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: initAccsChannel...12-26 11:26:19.748 1951-1989/com.alibaba.push2:channel I/MPS:AppRegister: [AMS]appkey:235528812.常见错误: (1) 用户在自定义Application中执行推送SDK初始化时做了进程判断,导致初始化操作只在主进程执行。错误代码如下所示: public class MyApplication extends Application { @override public void onCreate() { super.onCreate(); if(如果是主进程) { initCloudChannel(this); } } ......} (2) 用户在activity中进行相关初始化,activity只会在主进程创建,导致相关操作只能在主进程执行。错误代码如下所示: public class MyActivity extends Activity { @override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initCloudChannel(getApplicationContext()); ...... } ......} 3、部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用被杀死,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关文档:小米/华为系统推送支持4、利用推送排查系统排错。排错方法:获取设备deviceId,对deviceId单独推送一条,在排查系统查看相关信息。如下图:5、如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。6、用测试appKey测试正常,切换成正式appKey(测试appKey和正式appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试app重新安装正式app。7、从V2.+版本升级到V3.+版本后接收不到推送。V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参考:移动推送Android SDK:推送从2.+版本升级到3.+版本后,收不到通知/消息 问题仍未解决若上述步骤仍未能定位问题,可以: 加入钉钉群,群号:11795523。或者提交工单,工单请选择类目移动推送。 反馈问题时,请附带下述格式化的问题上下文信息,方便快速定位问题(带*项必填): 您的操作行为:异常的现象:设备的平台(Android?iOS?),机型,系统版本号:推送类型(消息?通知?):推送方式(all? account?device?tag?alias?):* appkey:* 消息ID(控制台可以查到):* deviceid(终端日志可以看到):
2019-12-01 23:32:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档首次接入推送不成功 1、遇到问题可以先通过文档页进行关键字检索,一般都能命中相关的疑问。2、检查推送通道是否初始化成功,确保您在初始化时注册的回调函数onSuccess能够被成功调用。3、如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提醒检查appkey,appSecret等相关配置。4、如果发送的是消息,客户端不会通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。5、使用官方demo体验,,排除自身配置问题。使用官方demo时需要设置您自己的appKey,appSecret并修改包名。如果使用官方demo无问题,请确认下自己的实现和demo的区别。6、如果您的设备集成上阿里云移动推送Android SDK,端上日志显示初始化成功,控制台显示设备在线,但是总是推送失败,请检查以下参数是否符合规范: 请检查您的APP的versionName参数,versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。 修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。 7、如果集成成功,向设备推送通知,排查系统显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。8、推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题: 1.正常情况下的日志: 第一条handleRemoteMessage日志说明消息已经到达端上,第二条AgooMessageReceiver日志表明用户自定义Receiver已经接收到广播。 2.如果只有第一条日志,未出现第二条日志则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下: Intent intent = new Intent();intent.setAction("org.agoo.android.intent.action.RECEIVE");intent.setPackage(pack);//pack为应用包名intent.putExtra("type", "common-push");intent.addFlags(32);context.sendBroadcast(intent);//请使用ApplicationContext进行测试利用上述代码给您的自定义receiver发送广播,测试Receiver是否可以收到对应广播,如果还是收不到则说明存在广播拦截情况。 3.如果存在拦截情况,请确认你的设备是否不允许监听系统广播:在manifest.xml文件中将自定义receiver所监听的系统广播注释掉,具体操作如下文代码所示: <!-- 消息接收监听器 (用户可自主扩展) --> <receiver android:name=".demo.MyMessageReceiver" android:exported="true"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.taobao.accs.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="com.taobao.taobao.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="org.agoo.android.intent.action.RECEIVE" /> </intent-filter> <!--<intent-filter>--> <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.USER_PRESENT" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.BOOT_COMPLETED" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />--> <!--<data android:scheme="package" />--> <!--</intent-filter>--> </receiver>重复步骤2的操作,观察是否会可以成功接收广播。如果可以则说明您的设备rom不允许监听系统广播。当前receiver不监听系统广播不影响功能的正常使用,但会影响SDK的保活能力。 9、- 设备绑定标签后,服务端按该标签推送,隔天(T + 1)才能生效送达,参考Android API介绍 - 标签API。 已经接入成功,突然出现异常 1、推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知设备的手机设置情况,是否将推送App的通知弹出做了限制。2、如果出现应用处于前台可以收到推送,应用退到后台后无法接收到推送。请检查channel进程是否执行了推送初始化操作。 1.判断channel是否执行初始化方法:查看channel进程是否有如下日志输出,如无则表示未执行相应初始化操作 12-26 11:26:19.673 1951-1951/com.alibaba.push2:channel I/SecurityBoxService: Aliyun12-26 11:26:19.677 1951-1951/com.alibaba.push2:channel I/MPS:CloudPushService: [AMS]Initialize Mobile Push service...12-26 11:26:19.727 1951-1951/com.alibaba.push2:channel D/MPS:CloudPushService: load utdid: Vs6CkGxR86QDANku3NiLD/yA12-26 11:26:19.743 1951-1951/com.alibaba.push2:channel D/MPS:AppRegister: getLooper called.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping Prepared.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping handleMessage: 112-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: accs init.12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: initAccsChannel...12-26 11:26:19.748 1951-1989/com.alibaba.push2:channel I/MPS:AppRegister: [AMS]appkey:235528812.常见错误: (1) 用户在自定义Application中执行推送SDK初始化时做了进程判断,导致初始化操作只在主进程执行。错误代码如下所示: public class MyApplication extends Application { @override public void onCreate() { super.onCreate(); if(如果是主进程) { initCloudChannel(this); } } ......} (2) 用户在activity中进行相关初始化,activity只会在主进程创建,导致相关操作只能在主进程执行。错误代码如下所示: public class MyActivity extends Activity { @override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initCloudChannel(getApplicationContext()); ...... } ......} 3、部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用被杀死,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关文档:小米/华为系统推送支持4、利用推送排查系统排错。排错方法:获取设备deviceId,对deviceId单独推送一条,在排查系统查看相关信息。如下图:5、如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。6、用测试appKey测试正常,切换成正式appKey(测试appKey和正式appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试app重新安装正式app。7、从V2.+版本升级到V3.+版本后接收不到推送。V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参考:移动推送Android SDK:推送从2.+版本升级到3.+版本后,收不到通知/消息 问题仍未解决若上述步骤仍未能定位问题,可以: 加入钉钉群,群号:11795523。或者提交工单,工单请选择类目移动推送。 反馈问题时,请附带下述格式化的问题上下文信息,方便快速定位问题(带*项必填): 您的操作行为:异常的现象:设备的平台(Android?iOS?),机型,系统版本号:推送类型(消息?通知?):推送方式(all? account?device?tag?alias?):* appkey:* 消息ID(控制台可以查到):* deviceid(终端日志可以看到):
2019-12-01 23:32:22 0 浏览量 回答数 0

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

建个炫酷的简历网页,制作一个浪漫的表白网页,打造个人专属网盘,多种动手场景应用免费学!!!

回答

详细解答可以参考官方帮助文档首次接入推送不成功 1、遇到问题可以先通过文档页进行关键字检索,一般都能命中相关的疑问。2、检查推送通道是否初始化成功,确保您在初始化时注册的回调函数onSuccess能够被成功调用。3、如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提醒检查appkey,appSecret等相关配置。4、如果发送的是消息,客户端不会通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。5、使用官方demo体验,,排除自身配置问题。使用官方demo时需要设置您自己的appKey,appSecret并修改包名。如果使用官方demo无问题,请确认下自己的实现和demo的区别。6、如果您的设备集成上阿里云移动推送Android SDK,端上日志显示初始化成功,控制台显示设备在线,但是总是推送失败,请检查以下参数是否符合规范: 请检查您的APP的versionName参数,versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。 修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。 7、如果集成成功,向设备推送通知,排查系统显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。8、推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题: 1.正常情况下的日志: 第一条handleRemoteMessage日志说明消息已经到达端上,第二条AgooMessageReceiver日志表明用户自定义Receiver已经接收到广播。 2.如果只有第一条日志,未出现第二条日志则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下: Intent intent = new Intent();intent.setAction("org.agoo.android.intent.action.RECEIVE");intent.setPackage(pack);//pack为应用包名intent.putExtra("type", "common-push");intent.addFlags(32);context.sendBroadcast(intent);//请使用ApplicationContext进行测试利用上述代码给您的自定义receiver发送广播,测试Receiver是否可以收到对应广播,如果还是收不到则说明存在广播拦截情况。 3.如果存在拦截情况,请确认你的设备是否不允许监听系统广播:在manifest.xml文件中将自定义receiver所监听的系统广播注释掉,具体操作如下文代码所示: <!-- 消息接收监听器 (用户可自主扩展) --> <receiver android:name=".demo.MyMessageReceiver" android:exported="true"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.taobao.accs.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="com.taobao.taobao.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="org.agoo.android.intent.action.RECEIVE" /> </intent-filter> <!--<intent-filter>--> <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.USER_PRESENT" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.BOOT_COMPLETED" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />--> <!--<data android:scheme="package" />--> <!--</intent-filter>--> </receiver>重复步骤2的操作,观察是否会可以成功接收广播。如果可以则说明您的设备rom不允许监听系统广播。当前receiver不监听系统广播不影响功能的正常使用,但会影响SDK的保活能力。 9、- 设备绑定标签后,服务端按该标签推送,隔天(T + 1)才能生效送达,参考Android API介绍 - 标签API。 已经接入成功,突然出现异常 1、推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知设备的手机设置情况,是否将推送App的通知弹出做了限制。2、如果出现应用处于前台可以收到推送,应用退到后台后无法接收到推送。请检查channel进程是否执行了推送初始化操作。 1.判断channel是否执行初始化方法:查看channel进程是否有如下日志输出,如无则表示未执行相应初始化操作 12-26 11:26:19.673 1951-1951/com.alibaba.push2:channel I/SecurityBoxService: Aliyun12-26 11:26:19.677 1951-1951/com.alibaba.push2:channel I/MPS:CloudPushService: [AMS]Initialize Mobile Push service...12-26 11:26:19.727 1951-1951/com.alibaba.push2:channel D/MPS:CloudPushService: load utdid: Vs6CkGxR86QDANku3NiLD/yA12-26 11:26:19.743 1951-1951/com.alibaba.push2:channel D/MPS:AppRegister: getLooper called.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping Prepared.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping handleMessage: 112-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: accs init.12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: initAccsChannel...12-26 11:26:19.748 1951-1989/com.alibaba.push2:channel I/MPS:AppRegister: [AMS]appkey:235528812.常见错误: (1) 用户在自定义Application中执行推送SDK初始化时做了进程判断,导致初始化操作只在主进程执行。错误代码如下所示: public class MyApplication extends Application { @override public void onCreate() { super.onCreate(); if(如果是主进程) { initCloudChannel(this); } } ......} (2) 用户在activity中进行相关初始化,activity只会在主进程创建,导致相关操作只能在主进程执行。错误代码如下所示: public class MyActivity extends Activity { @override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initCloudChannel(getApplicationContext()); ...... } ......} 3、部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用被杀死,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关文档:小米/华为系统推送支持4、利用推送排查系统排错。排错方法:获取设备deviceId,对deviceId单独推送一条,在排查系统查看相关信息。如下图:5、如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。6、用测试appKey测试正常,切换成正式appKey(测试appKey和正式appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试app重新安装正式app。7、从V2.+版本升级到V3.+版本后接收不到推送。V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参考:移动推送Android SDK:推送从2.+版本升级到3.+版本后,收不到通知/消息 问题仍未解决若上述步骤仍未能定位问题,可以: 加入钉钉群,群号:11795523。或者提交工单,工单请选择类目移动推送。 反馈问题时,请附带下述格式化的问题上下文信息,方便快速定位问题(带*项必填): 您的操作行为:异常的现象:设备的平台(Android?iOS?),机型,系统版本号:推送类型(消息?通知?):推送方式(all? account?device?tag?alias?):* appkey:* 消息ID(控制台可以查到):* deviceid(终端日志可以看到):
2019-12-01 23:32:22 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档首次接入推送不成功 1、遇到问题可以先通过文档页进行关键字检索,一般都能命中相关的疑问。2、检查推送通道是否初始化成功,确保您在初始化时注册的回调函数onSuccess能够被成功调用。3、如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提醒检查appkey,appSecret等相关配置。4、如果发送的是消息,客户端不会通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。5、使用官方demo体验,,排除自身配置问题。使用官方demo时需要设置您自己的appKey,appSecret并修改包名。如果使用官方demo无问题,请确认下自己的实现和demo的区别。6、如果您的设备集成上阿里云移动推送Android SDK,端上日志显示初始化成功,控制台显示设备在线,但是总是推送失败,请检查以下参数是否符合规范: 请检查您的APP的versionName参数,versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。 修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。 7、如果集成成功,向设备推送通知,排查系统显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。8、推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题: 1.正常情况下的日志: 第一条handleRemoteMessage日志说明消息已经到达端上,第二条AgooMessageReceiver日志表明用户自定义Receiver已经接收到广播。 2.如果只有第一条日志,未出现第二条日志则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下: Intent intent = new Intent();intent.setAction("org.agoo.android.intent.action.RECEIVE");intent.setPackage(pack);//pack为应用包名intent.putExtra("type", "common-push");intent.addFlags(32);context.sendBroadcast(intent);//请使用ApplicationContext进行测试利用上述代码给您的自定义receiver发送广播,测试Receiver是否可以收到对应广播,如果还是收不到则说明存在广播拦截情况。 3.如果存在拦截情况,请确认你的设备是否不允许监听系统广播:在manifest.xml文件中将自定义receiver所监听的系统广播注释掉,具体操作如下文代码所示: <!-- 消息接收监听器 (用户可自主扩展) --> <receiver android:name=".demo.MyMessageReceiver" android:exported="true"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.taobao.accs.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="com.taobao.taobao.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="org.agoo.android.intent.action.RECEIVE" /> </intent-filter> <!--<intent-filter>--> <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.USER_PRESENT" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.BOOT_COMPLETED" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />--> <!--<data android:scheme="package" />--> <!--</intent-filter>--> </receiver>重复步骤2的操作,观察是否会可以成功接收广播。如果可以则说明您的设备rom不允许监听系统广播。当前receiver不监听系统广播不影响功能的正常使用,但会影响SDK的保活能力。 9、- 设备绑定标签后,服务端按该标签推送,隔天(T + 1)才能生效送达,参考Android API介绍 - 标签API。 已经接入成功,突然出现异常 1、推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知设备的手机设置情况,是否将推送App的通知弹出做了限制。2、如果出现应用处于前台可以收到推送,应用退到后台后无法接收到推送。请检查channel进程是否执行了推送初始化操作。 1.判断channel是否执行初始化方法:查看channel进程是否有如下日志输出,如无则表示未执行相应初始化操作 12-26 11:26:19.673 1951-1951/com.alibaba.push2:channel I/SecurityBoxService: Aliyun12-26 11:26:19.677 1951-1951/com.alibaba.push2:channel I/MPS:CloudPushService: [AMS]Initialize Mobile Push service...12-26 11:26:19.727 1951-1951/com.alibaba.push2:channel D/MPS:CloudPushService: load utdid: Vs6CkGxR86QDANku3NiLD/yA12-26 11:26:19.743 1951-1951/com.alibaba.push2:channel D/MPS:AppRegister: getLooper called.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping Prepared.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping handleMessage: 112-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: accs init.12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: initAccsChannel...12-26 11:26:19.748 1951-1989/com.alibaba.push2:channel I/MPS:AppRegister: [AMS]appkey:235528812.常见错误: (1) 用户在自定义Application中执行推送SDK初始化时做了进程判断,导致初始化操作只在主进程执行。错误代码如下所示: public class MyApplication extends Application { @override public void onCreate() { super.onCreate(); if(如果是主进程) { initCloudChannel(this); } } ......} (2) 用户在activity中进行相关初始化,activity只会在主进程创建,导致相关操作只能在主进程执行。错误代码如下所示: public class MyActivity extends Activity { @override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initCloudChannel(getApplicationContext()); ...... } ......} 3、部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用被杀死,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关文档:小米/华为系统推送支持4、利用推送排查系统排错。排错方法:获取设备deviceId,对deviceId单独推送一条,在排查系统查看相关信息。如下图:5、如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。6、用测试appKey测试正常,切换成正式appKey(测试appKey和正式appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试app重新安装正式app。7、从V2.+版本升级到V3.+版本后接收不到推送。V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参考:移动推送Android SDK:推送从2.+版本升级到3.+版本后,收不到通知/消息 问题仍未解决若上述步骤仍未能定位问题,可以: 加入钉钉群,群号:11795523。或者提交工单,工单请选择类目移动推送。 反馈问题时,请附带下述格式化的问题上下文信息,方便快速定位问题(带*项必填): 您的操作行为:异常的现象:设备的平台(Android?iOS?),机型,系统版本号:推送类型(消息?通知?):推送方式(all? account?device?tag?alias?):* appkey:* 消息ID(控制台可以查到):* deviceid(终端日志可以看到):
2019-12-01 23:32:22 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档首次接入推送不成功 1、遇到问题可以先通过文档页进行关键字检索,一般都能命中相关的疑问。2、检查推送通道是否初始化成功,确保您在初始化时注册的回调函数onSuccess能够被成功调用。3、如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提醒检查appkey,appSecret等相关配置。4、如果发送的是消息,客户端不会通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。5、使用官方demo体验,,排除自身配置问题。使用官方demo时需要设置您自己的appKey,appSecret并修改包名。如果使用官方demo无问题,请确认下自己的实现和demo的区别。6、如果您的设备集成上阿里云移动推送Android SDK,端上日志显示初始化成功,控制台显示设备在线,但是总是推送失败,请检查以下参数是否符合规范: 请检查您的APP的versionName参数,versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。 修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。 7、如果集成成功,向设备推送通知,排查系统显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。8、推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题: 1.正常情况下的日志: 第一条handleRemoteMessage日志说明消息已经到达端上,第二条AgooMessageReceiver日志表明用户自定义Receiver已经接收到广播。 2.如果只有第一条日志,未出现第二条日志则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下: Intent intent = new Intent();intent.setAction("org.agoo.android.intent.action.RECEIVE");intent.setPackage(pack);//pack为应用包名intent.putExtra("type", "common-push");intent.addFlags(32);context.sendBroadcast(intent);//请使用ApplicationContext进行测试利用上述代码给您的自定义receiver发送广播,测试Receiver是否可以收到对应广播,如果还是收不到则说明存在广播拦截情况。 3.如果存在拦截情况,请确认你的设备是否不允许监听系统广播:在manifest.xml文件中将自定义receiver所监听的系统广播注释掉,具体操作如下文代码所示: <!-- 消息接收监听器 (用户可自主扩展) --> <receiver android:name=".demo.MyMessageReceiver" android:exported="true"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.taobao.accs.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="com.taobao.taobao.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="org.agoo.android.intent.action.RECEIVE" /> </intent-filter> <!--<intent-filter>--> <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.USER_PRESENT" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.BOOT_COMPLETED" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />--> <!--<data android:scheme="package" />--> <!--</intent-filter>--> </receiver>重复步骤2的操作,观察是否会可以成功接收广播。如果可以则说明您的设备rom不允许监听系统广播。当前receiver不监听系统广播不影响功能的正常使用,但会影响SDK的保活能力。 9、- 设备绑定标签后,服务端按该标签推送,隔天(T + 1)才能生效送达,参考Android API介绍 - 标签API。 已经接入成功,突然出现异常 1、推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知设备的手机设置情况,是否将推送App的通知弹出做了限制。2、如果出现应用处于前台可以收到推送,应用退到后台后无法接收到推送。请检查channel进程是否执行了推送初始化操作。 1.判断channel是否执行初始化方法:查看channel进程是否有如下日志输出,如无则表示未执行相应初始化操作 12-26 11:26:19.673 1951-1951/com.alibaba.push2:channel I/SecurityBoxService: Aliyun12-26 11:26:19.677 1951-1951/com.alibaba.push2:channel I/MPS:CloudPushService: [AMS]Initialize Mobile Push service...12-26 11:26:19.727 1951-1951/com.alibaba.push2:channel D/MPS:CloudPushService: load utdid: Vs6CkGxR86QDANku3NiLD/yA12-26 11:26:19.743 1951-1951/com.alibaba.push2:channel D/MPS:AppRegister: getLooper called.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping Prepared.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping handleMessage: 112-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: accs init.12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: initAccsChannel...12-26 11:26:19.748 1951-1989/com.alibaba.push2:channel I/MPS:AppRegister: [AMS]appkey:235528812.常见错误: (1) 用户在自定义Application中执行推送SDK初始化时做了进程判断,导致初始化操作只在主进程执行。错误代码如下所示: public class MyApplication extends Application { @override public void onCreate() { super.onCreate(); if(如果是主进程) { initCloudChannel(this); } } ......} (2) 用户在activity中进行相关初始化,activity只会在主进程创建,导致相关操作只能在主进程执行。错误代码如下所示: public class MyActivity extends Activity { @override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initCloudChannel(getApplicationContext()); ...... } ......} 3、部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用被杀死,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关文档:小米/华为系统推送支持4、利用推送排查系统排错。排错方法:获取设备deviceId,对deviceId单独推送一条,在排查系统查看相关信息。如下图:5、如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。6、用测试appKey测试正常,切换成正式appKey(测试appKey和正式appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试app重新安装正式app。7、从V2.+版本升级到V3.+版本后接收不到推送。V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参考:移动推送Android SDK:推送从2.+版本升级到3.+版本后,收不到通知/消息 问题仍未解决若上述步骤仍未能定位问题,可以: 加入钉钉群,群号:11795523。或者提交工单,工单请选择类目移动推送。 反馈问题时,请附带下述格式化的问题上下文信息,方便快速定位问题(带*项必填): 您的操作行为:异常的现象:设备的平台(Android?iOS?),机型,系统版本号:推送类型(消息?通知?):推送方式(all? account?device?tag?alias?):* appkey:* 消息ID(控制台可以查到):* deviceid(终端日志可以看到):
2019-12-01 23:32:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档首次接入推送不成功 1、遇到问题可以先通过文档页进行关键字检索,一般都能命中相关的疑问。2、检查推送通道是否初始化成功,确保您在初始化时注册的回调函数onSuccess能够被成功调用。3、如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提醒检查appkey,appSecret等相关配置。4、如果发送的是消息,客户端不会通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。5、使用官方demo体验,,排除自身配置问题。使用官方demo时需要设置您自己的appKey,appSecret并修改包名。如果使用官方demo无问题,请确认下自己的实现和demo的区别。6、如果您的设备集成上阿里云移动推送Android SDK,端上日志显示初始化成功,控制台显示设备在线,但是总是推送失败,请检查以下参数是否符合规范: 请检查您的APP的versionName参数,versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。 修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。 7、如果集成成功,向设备推送通知,排查系统显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。8、推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题: 1.正常情况下的日志: 第一条handleRemoteMessage日志说明消息已经到达端上,第二条AgooMessageReceiver日志表明用户自定义Receiver已经接收到广播。 2.如果只有第一条日志,未出现第二条日志则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下: Intent intent = new Intent();intent.setAction("org.agoo.android.intent.action.RECEIVE");intent.setPackage(pack);//pack为应用包名intent.putExtra("type", "common-push");intent.addFlags(32);context.sendBroadcast(intent);//请使用ApplicationContext进行测试利用上述代码给您的自定义receiver发送广播,测试Receiver是否可以收到对应广播,如果还是收不到则说明存在广播拦截情况。 3.如果存在拦截情况,请确认你的设备是否不允许监听系统广播:在manifest.xml文件中将自定义receiver所监听的系统广播注释掉,具体操作如下文代码所示: <!-- 消息接收监听器 (用户可自主扩展) --> <receiver android:name=".demo.MyMessageReceiver" android:exported="true"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.taobao.accs.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="com.taobao.taobao.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="org.agoo.android.intent.action.RECEIVE" /> </intent-filter> <!--<intent-filter>--> <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.USER_PRESENT" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.BOOT_COMPLETED" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />--> <!--<data android:scheme="package" />--> <!--</intent-filter>--> </receiver>重复步骤2的操作,观察是否会可以成功接收广播。如果可以则说明您的设备rom不允许监听系统广播。当前receiver不监听系统广播不影响功能的正常使用,但会影响SDK的保活能力。 9、- 设备绑定标签后,服务端按该标签推送,隔天(T + 1)才能生效送达,参考Android API介绍 - 标签API。 已经接入成功,突然出现异常 1、推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知设备的手机设置情况,是否将推送App的通知弹出做了限制。2、如果出现应用处于前台可以收到推送,应用退到后台后无法接收到推送。请检查channel进程是否执行了推送初始化操作。 1.判断channel是否执行初始化方法:查看channel进程是否有如下日志输出,如无则表示未执行相应初始化操作 12-26 11:26:19.673 1951-1951/com.alibaba.push2:channel I/SecurityBoxService: Aliyun12-26 11:26:19.677 1951-1951/com.alibaba.push2:channel I/MPS:CloudPushService: [AMS]Initialize Mobile Push service...12-26 11:26:19.727 1951-1951/com.alibaba.push2:channel D/MPS:CloudPushService: load utdid: Vs6CkGxR86QDANku3NiLD/yA12-26 11:26:19.743 1951-1951/com.alibaba.push2:channel D/MPS:AppRegister: getLooper called.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping Prepared.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping handleMessage: 112-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: accs init.12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: initAccsChannel...12-26 11:26:19.748 1951-1989/com.alibaba.push2:channel I/MPS:AppRegister: [AMS]appkey:235528812.常见错误: (1) 用户在自定义Application中执行推送SDK初始化时做了进程判断,导致初始化操作只在主进程执行。错误代码如下所示: public class MyApplication extends Application { @override public void onCreate() { super.onCreate(); if(如果是主进程) { initCloudChannel(this); } } ......} (2) 用户在activity中进行相关初始化,activity只会在主进程创建,导致相关操作只能在主进程执行。错误代码如下所示: public class MyActivity extends Activity { @override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initCloudChannel(getApplicationContext()); ...... } ......} 3、部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用被杀死,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关文档:小米/华为系统推送支持4、利用推送排查系统排错。排错方法:获取设备deviceId,对deviceId单独推送一条,在排查系统查看相关信息。如下图:5、如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。6、用测试appKey测试正常,切换成正式appKey(测试appKey和正式appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试app重新安装正式app。7、从V2.+版本升级到V3.+版本后接收不到推送。V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参考:移动推送Android SDK:推送从2.+版本升级到3.+版本后,收不到通知/消息 问题仍未解决若上述步骤仍未能定位问题,可以: 加入钉钉群,群号:11795523。或者提交工单,工单请选择类目移动推送。 反馈问题时,请附带下述格式化的问题上下文信息,方便快速定位问题(带*项必填): 您的操作行为:异常的现象:设备的平台(Android?iOS?),机型,系统版本号:推送类型(消息?通知?):推送方式(all? account?device?tag?alias?):* appkey:* 消息ID(控制台可以查到):* deviceid(终端日志可以看到):
2019-12-01 23:32:22 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档首次接入推送不成功 1、遇到问题可以先通过文档页进行关键字检索,一般都能命中相关的疑问。2、检查推送通道是否初始化成功,确保您在初始化时注册的回调函数onSuccess能够被成功调用。3、如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提醒检查appkey,appSecret等相关配置。4、如果发送的是消息,客户端不会通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。5、使用官方demo体验,,排除自身配置问题。使用官方demo时需要设置您自己的appKey,appSecret并修改包名。如果使用官方demo无问题,请确认下自己的实现和demo的区别。6、如果您的设备集成上阿里云移动推送Android SDK,端上日志显示初始化成功,控制台显示设备在线,但是总是推送失败,请检查以下参数是否符合规范: 请检查您的APP的versionName参数,versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。 修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。 7、如果集成成功,向设备推送通知,排查系统显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。8、推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题: 1.正常情况下的日志: 第一条handleRemoteMessage日志说明消息已经到达端上,第二条AgooMessageReceiver日志表明用户自定义Receiver已经接收到广播。 2.如果只有第一条日志,未出现第二条日志则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下: Intent intent = new Intent();intent.setAction("org.agoo.android.intent.action.RECEIVE");intent.setPackage(pack);//pack为应用包名intent.putExtra("type", "common-push");intent.addFlags(32);context.sendBroadcast(intent);//请使用ApplicationContext进行测试利用上述代码给您的自定义receiver发送广播,测试Receiver是否可以收到对应广播,如果还是收不到则说明存在广播拦截情况。 3.如果存在拦截情况,请确认你的设备是否不允许监听系统广播:在manifest.xml文件中将自定义receiver所监听的系统广播注释掉,具体操作如下文代码所示: <!-- 消息接收监听器 (用户可自主扩展) --> <receiver android:name=".demo.MyMessageReceiver" android:exported="true"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.taobao.accs.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="com.taobao.taobao.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="org.agoo.android.intent.action.RECEIVE" /> </intent-filter> <!--<intent-filter>--> <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.USER_PRESENT" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.BOOT_COMPLETED" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />--> <!--<data android:scheme="package" />--> <!--</intent-filter>--> </receiver>重复步骤2的操作,观察是否会可以成功接收广播。如果可以则说明您的设备rom不允许监听系统广播。当前receiver不监听系统广播不影响功能的正常使用,但会影响SDK的保活能力。 9、- 设备绑定标签后,服务端按该标签推送,隔天(T + 1)才能生效送达,参考Android API介绍 - 标签API。 已经接入成功,突然出现异常 1、推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知设备的手机设置情况,是否将推送App的通知弹出做了限制。2、如果出现应用处于前台可以收到推送,应用退到后台后无法接收到推送。请检查channel进程是否执行了推送初始化操作。 1.判断channel是否执行初始化方法:查看channel进程是否有如下日志输出,如无则表示未执行相应初始化操作 12-26 11:26:19.673 1951-1951/com.alibaba.push2:channel I/SecurityBoxService: Aliyun12-26 11:26:19.677 1951-1951/com.alibaba.push2:channel I/MPS:CloudPushService: [AMS]Initialize Mobile Push service...12-26 11:26:19.727 1951-1951/com.alibaba.push2:channel D/MPS:CloudPushService: load utdid: Vs6CkGxR86QDANku3NiLD/yA12-26 11:26:19.743 1951-1951/com.alibaba.push2:channel D/MPS:AppRegister: getLooper called.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping Prepared.12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping handleMessage: 112-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: accs init.12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: initAccsChannel...12-26 11:26:19.748 1951-1989/com.alibaba.push2:channel I/MPS:AppRegister: [AMS]appkey:235528812.常见错误: (1) 用户在自定义Application中执行推送SDK初始化时做了进程判断,导致初始化操作只在主进程执行。错误代码如下所示: public class MyApplication extends Application { @override public void onCreate() { super.onCreate(); if(如果是主进程) { initCloudChannel(this); } } ......} (2) 用户在activity中进行相关初始化,activity只会在主进程创建,导致相关操作只能在主进程执行。错误代码如下所示: public class MyActivity extends Activity { @override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initCloudChannel(getApplicationContext()); ...... } ......} 3、部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用被杀死,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关文档:小米/华为系统推送支持4、利用推送排查系统排错。排错方法:获取设备deviceId,对deviceId单独推送一条,在排查系统查看相关信息。如下图:5、如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。6、用测试appKey测试正常,切换成正式appKey(测试appKey和正式appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试app重新安装正式app。7、从V2.+版本升级到V3.+版本后接收不到推送。V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参考:移动推送Android SDK:推送从2.+版本升级到3.+版本后,收不到通知/消息 问题仍未解决若上述步骤仍未能定位问题,可以: 加入钉钉群,群号:11795523。或者提交工单,工单请选择类目移动推送。 反馈问题时,请附带下述格式化的问题上下文信息,方便快速定位问题(带*项必填): 您的操作行为:异常的现象:设备的平台(Android?iOS?),机型,系统版本号:推送类型(消息?通知?):推送方式(all? account?device?tag?alias?):* appkey:* 消息ID(控制台可以查到):* deviceid(终端日志可以看到):
2019-12-01 23:32:23 0 浏览量 回答数 0

回答

首次接入推送不成功 1、遇到问题可以先通过文档页进行关键字检索,一般都能命中相关的疑问。 2、检查推送通道是否初始化成功,确保您在初始化时注册的回调函数onSuccess能够被成功调用。 3、如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提醒检查appkey,appSecret等相关配置。 4、如果发送的是消息,客户端不会通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。 5、使用官方demo体验,,排除自身配置问题。使用官方demo时需要设置您自己的appKey,appSecret并修改包名。如果使用官方demo无问题,请确认下自己的实现和demo的区别。 6、如果您的设备集成上阿里云移动推送Android SDK,端上日志显示初始化成功,控制台显示设备在线,但是总是推送失败,请检查以下参数是否符合规范: 请检查您的APP的versionName参数,versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。 修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。 7、如果集成成功,向设备推送通知,排查系统显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。 8、推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题: 1.正常情况下的日志: 第一条handleRemoteMessage日志说明消息已经到达端上,第二条AgooMessageReceiver日志表明用户自定义Receiver已经接收到广播。 2.如果只有第一条日志,未出现第二条日志则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下: Intent intent = new Intent(); intent.setAction("org.agoo.android.intent.action.RECEIVE"); intent.setPackage(pack);//pack为应用包名 intent.putExtra("type", "common-push"); intent.addFlags(32); context.sendBroadcast(intent);//请使用ApplicationContext进行测试 利用上述代码给您的自定义receiver发送广播,测试Receiver是否可以收到对应广播,如果还是收不到则说明存在广播拦截情况。 3.如果存在拦截情况,请确认你的设备是否不允许监听系统广播:在manifest.xml文件中将自定义receiver所监听的系统广播注释掉,具体操作如下文代码所示: <receiver android:name=".demo.MyMessageReceiver" android:exported="true"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.taobao.accs.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="com.taobao.taobao.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="org.agoo.android.intent.action.RECEIVE" /> </intent-filter> <!--<intent-filter>--> <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.USER_PRESENT" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.BOOT_COMPLETED" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />--> <!--<data android:scheme="package" />--> <!--</intent-filter>--> </receiver> 重复步骤2的操作,观察是否会可以成功接收广播。如果可以则说明您的设备rom不允许监听系统广播。当前receiver不监听系统广播不影响功能的正常使用,但会影响SDK的保活能力。 9、- 设备绑定标签后,服务端按该标签推送,隔天(T + 1)才能生效送达,参考Android API介绍 - 标签API。 已经接入成功,突然出现异常 1、推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知设备的手机设置情况,是否将推送App的通知弹出做了限制。 2、如果出现应用处于前台可以收到推送,应用退到后台后无法接收到推送。请检查channel进程是否执行了推送初始化操作。 1.判断channel是否执行初始化方法:查看channel进程是否有如下日志输出,如无则表示未执行相应初始化操作 12-26 11:26:19.673 1951-1951/com.alibaba.push2:channel I/SecurityBoxService: Aliyun 12-26 11:26:19.677 1951-1951/com.alibaba.push2:channel I/MPS:CloudPushService: [AMS]Initialize Mobile Push service... 12-26 11:26:19.727 1951-1951/com.alibaba.push2:channel D/MPS:CloudPushService: load utdid: Vs6CkGxR86QDANku3NiLD/yA 12-26 11:26:19.743 1951-1951/com.alibaba.push2:channel D/MPS:AppRegister: getLooper called. 12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping Prepared. 12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping handleMessage: 1 12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: accs init. 12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: initAccsChannel... 12-26 11:26:19.748 1951-1989/com.alibaba.push2:channel I/MPS:AppRegister: [AMS]appkey:23552881 2.常见错误: (1) 用户在自定义Application中执行推送SDK初始化时做了进程判断,导致初始化操作只在主进程执行。错误代码如下所示: public class MyApplication extends Application { @override public void onCreate() { super.onCreate(); if(如果是主进程) { initCloudChannel(this); } } ...... } (2) 用户在activity中进行相关初始化,activity只会在主进程创建,导致相关操作只能在主进程执行。错误代码如下所示: public class MyActivity extends Activity { @override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initCloudChannel(getApplicationContext()); ...... } ...... } 3、部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用被杀死,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关文档:小米/华为系统推送支持 4、利用推送排查系统排错。排错方法:获取设备deviceId,对deviceId单独推送一条,在排查系统查看相关信息。如下图: 5、如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。 6、用测试appKey测试正常,切换成正式appKey(测试appKey和正式appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试app重新安装正式app。 7、从V2.+版本升级到V3.+版本后接收不到推送。V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参考:移动推送Android SDK:推送从2.+版本升级到3.+版本后,收不到通知/消息 问题仍未解决 若上述步骤仍未能定位问题,可以: 加入钉钉群,群号:11795523。 或者提交工单,工单请选择类目移动推送。 反馈问题时,请附带下述格式化的问题上下文信息,方便快速定位问题(带*项必填): 您的操作行为: 异常的现象: 设备的平台(Android?iOS?),机型,系统版本号: 推送类型(消息?通知?): 推送方式(all? account?device?tag?alias?): * appkey: * 消息ID(控制台可以查到): * deviceid(终端日志可以看到):
保持可爱mmm 2020-03-30 09:49:19 0 浏览量 回答数 0

回答

首次接入推送不成功 1、遇到问题可以先通过文档页进行关键字检索,一般都能命中相关的疑问。 2、检查推送通道是否初始化成功,确保您在初始化时注册的回调函数onSuccess能够被成功调用。 3、如果推送通道初始化失败:请查看错误日志以及错误码,按照错误提醒检查appkey,appSecret等相关配置。 4、如果发送的是消息,客户端不会通知栏弹出展示,需要客户端实现消息回调,自定义消息的展示方式。 5、使用官方demo体验,,排除自身配置问题。使用官方demo时需要设置您自己的appKey,appSecret并修改包名。如果使用官方demo无问题,请确认下自己的实现和demo的区别。 6、如果您的设备集成上阿里云移动推送Android SDK,端上日志显示初始化成功,控制台显示设备在线,但是总是推送失败,请检查以下参数是否符合规范: 请检查您的APP的versionName参数,versionName参数不能为null,同时长度不能超过32位。如果versionName参数不符合要求,请更改versionName参数。 修改后务必先卸载原有App然后重新安装,不要直接覆盖安装。 7、如果集成成功,向设备推送通知,排查系统显示已到达,但设备端并未弹窗显示。请确认推送的是通知还是消息,只有通知才会在通知栏创建通知,消息不会创建通知,需要用户在SDK端的onMessage接口中自行处理。 8、推送消息,设备端日志显示已经收到推送,但用户回调未被调用。推送消息在端上的路由过程涉及到发送应用内广播,部分设备存在广播拦截,请确认您的设备是否存在该问题: 1.正常情况下的日志: 第一条handleRemoteMessage日志说明消息已经到达端上,第二条AgooMessageReceiver日志表明用户自定义Receiver已经接收到广播。 2.如果只有第一条日志,未出现第二条日志则说明receiver没有正常接收到广播,需要测试设备是否会拦截广播。测试代码如下: Intent intent = new Intent(); intent.setAction("org.agoo.android.intent.action.RECEIVE"); intent.setPackage(pack);//pack为应用包名 intent.putExtra("type", "common-push"); intent.addFlags(32); context.sendBroadcast(intent);//请使用ApplicationContext进行测试 利用上述代码给您的自定义receiver发送广播,测试Receiver是否可以收到对应广播,如果还是收不到则说明存在广播拦截情况。 3.如果存在拦截情况,请确认你的设备是否不允许监听系统广播:在manifest.xml文件中将自定义receiver所监听的系统广播注释掉,具体操作如下文代码所示: <receiver android:name=".demo.MyMessageReceiver" android:exported="true"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.taobao.accs.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="com.taobao.taobao.intent.action.COMMAND" /> </intent-filter> <intent-filter> <action android:name="org.agoo.android.intent.action.RECEIVE" /> </intent-filter> <!--<intent-filter>--> <!--<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.USER_PRESENT" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.BOOT_COMPLETED" />--> <!--</intent-filter>--> <!--<intent-filter>--> <!--<action android:name="android.intent.action.PACKAGE_REMOVED" />--> <!--<data android:scheme="package" />--> <!--</intent-filter>--> </receiver> 重复步骤2的操作,观察是否会可以成功接收广播。如果可以则说明您的设备rom不允许监听系统广播。当前receiver不监听系统广播不影响功能的正常使用,但会影响SDK的保活能力。 9、- 设备绑定标签后,服务端按该标签推送,隔天(T + 1)才能生效送达,参考Android API介绍 - 标签API。 已经接入成功,突然出现异常 1、推送通知,如果有设备能收到,有设备不能收到,请检查不能收到通知设备的手机设置情况,是否将推送App的通知弹出做了限制。 2、如果出现应用处于前台可以收到推送,应用退到后台后无法接收到推送。请检查channel进程是否执行了推送初始化操作。 1.判断channel是否执行初始化方法:查看channel进程是否有如下日志输出,如无则表示未执行相应初始化操作 12-26 11:26:19.673 1951-1951/com.alibaba.push2:channel I/SecurityBoxService: Aliyun 12-26 11:26:19.677 1951-1951/com.alibaba.push2:channel I/MPS:CloudPushService: [AMS]Initialize Mobile Push service... 12-26 11:26:19.727 1951-1951/com.alibaba.push2:channel D/MPS:CloudPushService: load utdid: Vs6CkGxR86QDANku3NiLD/yA 12-26 11:26:19.743 1951-1951/com.alibaba.push2:channel D/MPS:AppRegister: getLooper called. 12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping Prepared. 12-26 11:26:19.744 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: Looping handleMessage: 1 12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: accs init. 12-26 11:26:19.747 1951-1989/com.alibaba.push2:channel D/MPS:AppRegister: initAccsChannel... 12-26 11:26:19.748 1951-1989/com.alibaba.push2:channel I/MPS:AppRegister: [AMS]appkey:23552881 2.常见错误: (1) 用户在自定义Application中执行推送SDK初始化时做了进程判断,导致初始化操作只在主进程执行。错误代码如下所示: public class MyApplication extends Application { @override public void onCreate() { super.onCreate(); if(如果是主进程) { initCloudChannel(this); } } ...... } (2) 用户在activity中进行相关初始化,activity只会在主进程创建,导致相关操作只能在主进程执行。错误代码如下所示: public class MyActivity extends Activity { @override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initCloudChannel(getApplicationContext()); ...... } ...... } 3、部分ROM对应用自动拉起管控较严格,如果您的设备是小米或者华为,且当前应用被杀死,建议配置小米和华为辅助通道以及小米托管弹窗,可以提升到达率。相关文档:小米/华为系统推送支持 4、利用推送排查系统排错。排错方法:获取设备deviceId,对deviceId单独推送一条,在排查系统查看相关信息。如下图: 5、如果推送排查页面显示未知错误,请确认测试设备是否关闭了推送通道即是否调用过turnOffPushChannel接口。如果是,必须再次调用turnOnPushChannel接口重新打开推送通道。 6、用测试appKey测试正常,切换成正式appKey(测试appKey和正式appKey对应相同的包名)之后收不到推送。SDK在初始化过程中有本地请求缓存,更换appKey后需清理本地缓存或卸载测试app重新安装正式app。 7、从V2.+版本升级到V3.+版本后接收不到推送。V2.+和V3.+版本在配置上有所区别,详细排查逻辑请参考:移动推送Android SDK:推送从2.+版本升级到3.+版本后,收不到通知/消息 问题仍未解决 若上述步骤仍未能定位问题,可以: 加入钉钉群,群号:11795523。 或者提交工单,工单请选择类目移动推送。 反馈问题时,请附带下述格式化的问题上下文信息,方便快速定位问题(带*项必填): 您的操作行为: 异常的现象: 设备的平台(Android?iOS?),机型,系统版本号: 推送类型(消息?通知?): 推送方式(all? account?device?tag?alias?): * appkey: * 消息ID(控制台可以查到): * deviceid(终端日志可以看到):
保持可爱mmm 2020-03-30 09:48:07 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:22 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:24 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:22 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:22 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:24 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:24 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:24 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:24 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。
2019-12-01 23:13:23 0 浏览量 回答数 0

问题

Android SDK开发指南

1.前言 本文旨在介绍MAC Android SDK的接入步骤和使用方法 2.安装 2.1 配置maven仓库 build.gradle添加阿里云maven仓库 allprojects {    repositories...
青衫无名 2019-12-01 22:01:59 1644 浏览量 回答数 0

问题

【精品问答】Java技术1000问(1)

为了方便Java开发者快速找到相关技术问题和答案,开发者社区策划了Java技术1000问内容,包含最基础的如何学Java、实践中遇到的技术问题、RocketMQ面试、Java容器部署实践等维度内容。 我们会以每...
问问小秘 2019-12-01 21:57:43 46087 浏览量 回答数 16

问题

【Java学习全家桶】1460道Java热门问题,阿里百位技术专家答疑解惑

阿里极客公益活动: 或许你挑灯夜战只为一道难题 或许你百思不解只求一个答案 或许你绞尽脑汁只因一种未知 那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了 他们用户自己手中的技术来帮助用户成长 本次活动特邀百位阿里技术专家对Java常...
管理贝贝 2019-12-01 20:07:15 27612 浏览量 回答数 19

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT 阿里云科技驱动中小企业数字化