[原] unity3d调用android版 人人sdk
开发过程 遇到天坑:纯android工程没问题,集成到unity3d中 就老提示 没登陆 。最后跟到底 发现是Util.java 中 openUrl 函数出的bug。unity3d 中调android的HttpURLConnection 必须把整个请求放在Thread中,不过本文打好的renren.jar已解决此问题(要用人人sdk源码封sdk的童鞋们注意更改以下函数)
static String mString ="a";
/**
* 发送http请求
*
* @param url
* @param method GET 或 POST
* @param params
* @return
*/
public static String openUrl(final String url, final String method, final Bundle params) {
// if (method.equals("GET")) {
// url = url + "?" + encodeUrl(params);
// }
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
Log.d(LOG_TAG, method + " URL: " + url);
InputStream is = null;
conn.setRequestProperty("User-Agent",USER_AGENT_SDK);
if (!method.equals("GET")) {
conn.setDoOutput(true);
conn.setRequestMethod("POST");
Log.d("openUrl", "33333333333::::"+ encodeUrl(params).getBytes("UTF-8") );
conn.getOutputStream().write(encodeUrl(params).getBytes("UTF-8"));
Log.d("openUrl", "44444444444444::::");
}
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
is = conn.getInputStream();
} else {
is = conn.getErrorStream();
}
mString = read(is);
Log.d("openUrl", "101010101010101"+mString );
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
Log.e("mString ", mString);
return mString;
}
另外 作者把官方繁琐的demo 做了修改 简单实现调用人人 实现图文分享功能
主类代码:
public class RenrenSDKDemo extends UnityPlayerActivity {
private static final String API_KEY = "6b1016db20c540e78bd1b20be4c707a3";
private static final String SECRET_KEY = "4723a695c09e4ddebbe8d87393d95fb4";
private static final String APP_ID = "105381";
private Renren renren;
private Handler handler;
RenrenAuthListener listener ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
renren = new Renren(API_KEY, SECRET_KEY, APP_ID, this);
//Initialize the demo invoker
ApiDemoInvoker.init(renren);
renren.init(this);
handler = new Handler();
initButtons();
}
@Override
protected void onResume() {
super.onResume();
}
private final static int DATA_COMPLETE = 0xffff;
private final static int DATA_ERROR = 0xfffe;
private final static int DATA_FAULT = 0xfffd;
private final static String ERROR_MSG = "error_message";
/**
* start the api list activity
*/
private void startApiList() {
PhotoUploadRequestParam photoParam = new PhotoUploadRequestParam();
PhotoHelper photoHelper = new PhotoHelper(renren);
photoParam.setCaption("疯狂攀岩家 http://www.baidu.com");
photoParam.setFile(new File("/sdcard/myImage/data.png"));
photoHelper.asyncUploadPhoto(photoParam,
new AbstractRequestListener<PhotoUploadResponseBean>() {
@Override
public void onRenrenError(RenrenError renrenError) {
if (renrenError != null) {
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString(ERROR_MSG,
renrenError.getMessage());
message.what = DATA_ERROR;
message.setData(bundle);
handler1.sendMessage(message);
Util.logger("exception in uploading photo: "
+ renrenError.getMessage());
}
}
@Override
public void onFault(Throwable fault) {
if (fault != null) {
handler1.sendEmptyMessage(DATA_FAULT);
Util.logger("fault in uploading photo: "
+ fault.getMessage());
}
}
@Override
public void onComplete(
PhotoUploadResponseBean photoResponse) {
if (photoResponse != null) {
handler1.sendEmptyMessage(DATA_COMPLETE);
Util.logger("sucess uploading photo! \n"
+ photoResponse);
}
}
});
}
/**
* initialize the buttons and events
*/
private void initButtons() {
listener = new RenrenAuthListener() {
@Override
public void onComplete(Bundle values) {
Log.d("test",values.toString());
Log.e("AAAAAAAAAAAAA", "WWWWWWWWWW");
authorize();
}
@Override
public void onRenrenAuthError(
RenrenAuthError renrenAuthError) {
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(RenrenSDKDemo.this,
RenrenSDKDemo.this.getString(R.string.auth_failed),
Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onCancelLogin() {
}
@Override
public void onCancelAuth(Bundle values) {
}
};
}
public void ShareRenRen()
{
Message msgMessage =new Message();
msgMessage.what = 0;
handler1.sendMessage(msgMessage);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (renren != null) {
renren.authorizeCallback(requestCode, resultCode, data);
Log.e("onActivityResult", "SSSSSSSSSSSSSSS");
}
}
Handler handler1 = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case DATA_COMPLETE:
showTip("上传成功");
break;
case DATA_ERROR:
Bundle bundle = msg.getData();
String errorMessage = "上传失败";
if (bundle != null) {
String error = bundle.getString(ERROR_MSG);
if (error != null || !"".equals(error)) {
errorMessage = "," + error;
}
}
showTip(errorMessage);
break;
case DATA_FAULT:
showTip("上传失败");
break;
case 0:
Log.e("ShareRenRen", "SSSSSSSSSSSSSSS");
renren.authorize(RenrenSDKDemo.this, listener);
break;
default:
break;
}
}
};
/**
* 显示Toast提示
*
* @param message
*/
protected void showTip(String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
private void authorize() {
AuthorizationHelper.check(renren, RenrenSDKDemo.this,
new String[] { PhotoHelper.UPLOAD_PHPTO_PERMISSION },
new RenrenAuthListener() {
@Override
public void onRenrenAuthError(
RenrenAuthError renrenAuthError) {
finish();
}
@Override
public void onComplete(Bundle values) {
startApiList();
}
@Override
public void onCancelLogin() {
finish();
}
@Override
public void onCancelAuth(Bundle values) {
finish();
}
});
}
}
public void ShareRenRen() //unity3d调用的入口
{
Message msgMessage =new Message();
msgMessage.what = 0;
handler1.sendMessage(msgMessage);
}
因为直接调用会出错 作者通过在handler里面实现具体函数调用
android工程下载地址 http://vdisk.weibo.com/s/IzsAo
[原] unity3d调用android版 人人sdk的更多相关文章
- [原]unity3d调用android webView
1.配置dialog xml文件: <resources> <style name="dialogStyleWindow" parent="@an ...
- Unity3D调用android方法(非插件方式)
关于Unity3Dproject与androidproject的转换与合并,请參考我的另外一篇博客.假设你对Unity3Dproject增加到androidproject的过程不熟悉.也请先看完以下这 ...
- Unity3D 调用Android与IOS的剪贴板
Unity3D剪贴板 最近遇到一个需要调用Android与IOS设备本身剪贴板的需求,就是在Unity中,要将文本复制到设备本身的剪贴板中,然后在其他应用程序中都能粘贴. 最开始在网上查到的方式是使用 ...
- [Unity3D]调用Android接口
简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...
- Unity3D如何接入第三方的SDK - iOS篇
来源:http://blog.csdn.net/smlisi2/article/details/8786485 授人以鱼,不如授人以渔”,以UNITY3D调用iOS版的91SDK为例,利用C# / C ...
- Android 版 Facebook 登录
Android 版 Facebook SDK 让用户可以通过 Facebook 登录注册您的应用.通过 Facebook 登录您的应用时,用户可以向应用授予权限,以便您可以检索信息或以用户的身份在 F ...
- cordova百度地图定位Android版插件
本插件利用百度地图提供的定位功能进行Android版手机定位. 为什么没有iOS版? 因为iOS版有官方的定位插件cordova-plugin-geolocation可以使用. 请参照:cordova ...
- 开发腾讯移动游戏平台SDK Android版Ane扩展 总结
本文记录了在开发 腾讯移动游戏平台SDK(MSDK) Android版Ane扩展 过程中所遇到的问题和相关解决方式 问题一:编译报错:Unable to resolve target 'android ...
- Unity3d和Android之间互相调用
摘抄博客 Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用,一共四章,一定要看完 No1: 总体来说Unity3d与Android之间的互相调用,是 ...
随机推荐
- 简析TCP的三次握手与四次分手<转>
TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也 ...
- CPP_封装_继承_多态
类的三方法:封装,继承,多态.封装:使用一整套方法去创建一个新的类型,这叫类的封装.继承:从一个现有的类型基础上,稍作改动,得到一个新的类型的方法,叫类的继承.多态:当有几个不同的子类对象时,对象调用 ...
- MySQL常用命令收集
转载自:http://www.educity.cn/wenda/400530.html 1.链接MySQL数据库 格式:mysql -h域名 -u用户名 -p密码 数据库名字 1.1 首先打开DOS窗 ...
- c# dump 程序崩溃 windbg
待研究 http://issf.blog.163.com/blog/static/194129082201002534895/ http://www.cppblog.com/woaidongmao/a ...
- docker安装及加速配置
需要centos7版本,内核版本不低于3.10 [root@localhost ~]# uname -r3.10.0-514.el7.x86_64 第一步:更新当前软件:[root@localhost ...
- Python __all__系统变量
#__all__系统变量的使用 ''' __all__可以赋值一个字符串列表,列表中的元素表示外界调用该py文件可以使用的函数或者类 如果使用了__all__系统变量,并且调用该py文件使用的是fro ...
- HashMap的最大容量为什么是2的30次方?
今天看HashMap的底层实现,发现HashMap的最大容量规定为: // 最大容量(必须是2的幂且小于2的30次方,传入容量过大将被这个值替换) static final int MAXIMUM_C ...
- Google ProtocolBuffers2.4.1应用说明(一)
1.概念 Protocol buffers是一个用来序列化结构化数据的技术,支持多种语言诸如C++.Java以及Python语言,可以使用该技术来持久化数据或者序列化成网络传输的数据.相比较一些其他的 ...
- clapack在android上移植
参考 https://www.cnblogs.com/hrlnw/p/4128217.html 如何在android上进行android库编译 https://blog.csdn.net/h3c4le ...
- 使用3ds Max制作简单卧室
一.介绍 学习目标:熟练使用“标准基本体”和“扩展基本体”内的按钮来创建对象. 软件环境:3ds Max2015 二.实验步骤 1,启动3ds Max,使用“长方体”工具在场景中创建一个长方体作为空间 ...