开发过程 遇到天坑:纯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的更多相关文章

  1. [原]unity3d调用android webView

    1.配置dialog xml文件: <resources>    <style name="dialogStyleWindow" parent="@an ...

  2. Unity3D调用android方法(非插件方式)

    关于Unity3Dproject与androidproject的转换与合并,请參考我的另外一篇博客.假设你对Unity3Dproject增加到androidproject的过程不熟悉.也请先看完以下这 ...

  3. Unity3D 调用Android与IOS的剪贴板

    Unity3D剪贴板 最近遇到一个需要调用Android与IOS设备本身剪贴板的需求,就是在Unity中,要将文本复制到设备本身的剪贴板中,然后在其他应用程序中都能粘贴. 最开始在网上查到的方式是使用 ...

  4. [Unity3D]调用Android接口

    简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...

  5. Unity3D如何接入第三方的SDK - iOS篇

    来源:http://blog.csdn.net/smlisi2/article/details/8786485 授人以鱼,不如授人以渔”,以UNITY3D调用iOS版的91SDK为例,利用C# / C ...

  6. Android 版 Facebook 登录

    Android 版 Facebook SDK 让用户可以通过 Facebook 登录注册您的应用.通过 Facebook 登录您的应用时,用户可以向应用授予权限,以便您可以检索信息或以用户的身份在 F ...

  7. cordova百度地图定位Android版插件

    本插件利用百度地图提供的定位功能进行Android版手机定位. 为什么没有iOS版? 因为iOS版有官方的定位插件cordova-plugin-geolocation可以使用. 请参照:cordova ...

  8. 开发腾讯移动游戏平台SDK Android版Ane扩展 总结

    本文记录了在开发 腾讯移动游戏平台SDK(MSDK) Android版Ane扩展 过程中所遇到的问题和相关解决方式 问题一:编译报错:Unable to resolve target 'android ...

  9. Unity3d和Android之间互相调用

    摘抄博客 Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用,一共四章,一定要看完 No1: 总体来说Unity3d与Android之间的互相调用,是 ...

随机推荐

  1. WCF数据交互时长度超过8192

    wcf项目里面,客户端的某个函数执行时可能需要上传13000个字符到服务器. 按照常规的接口+客户端调用写好代码之后,出现了这么个错误: 网上查了很多资料,没有能够一步到位解决问题的.花了2个小时,总 ...

  2. Photoshop图层混合模式计算公式大全

    下面是photoshop cs2中所有混合模式的数学计算公式,另外还介绍了不透明度,这些公式仅适用于RGB图像,对于Lab颜色图像而言,这些公式将不再适用. 1.Opacity 不透明度 C=d*A+ ...

  3. MVC教程八:母版页(布局页)视图

    一.母版页介绍和使用 母版页的扩展名为".cshtml",也叫做视图布局页,它相当于网页的模板.在其他网页中,只要引用了母版页,母版页的页面内容就可以自动显示出来,设计者可以修改引 ...

  4. librtmp编译for android and ios 不要openssl

    git clone git://git.ffmpeg.org/rtmpdump 不想要openssl 在rtmp.h里面 #undef CRYPTO 编译动态库与静态库只需要修改下面的 #includ ...

  5. Android studio导入framework编译的classes.jar包

    1.在libs文件夹中加入jar包,并将其置顶 注:studio3.1的scope没有Provided选项,都默认选择implementation,studio2.3及以下版本需要将scope设置为P ...

  6. PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization

    用卷积神经网络对相机位置和角度进行回归.

  7. SAP中方会计凭证打印解决方案

    中方会计凭证由于 编码格式 以及 科目对照关系 是无法直接使用SAP自带的凭证打印功能的,如下为客户开发的一个解决方案,供各位参考 1).需要定制几个Table的结构 zc0000fit0009[科目 ...

  8. C语言中的数组与字符串

    1. 数组与指针: 对于数组,需要注意两点:1, C语言中只有一维数组, 而且数组的大小必须在编译期就作为一个常数确定下来: 2. 对于一个数组,我们只能做两件事:确定数组的大小 和 获得指向该数组下 ...

  9. 第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器

    第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器 编写spiders爬虫文件循环 ...

  10. WebService系列二:使用JDK和CXF框架开发WebService

    一.使用JDK开发WebService 服务端程序创建: 1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer 2. 定义一个接口,使用@WebSer ...