• [原] 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! 
    "
                                        + 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();
                        }
                    });
        }
        
    }
    View Code

        public void ShareRenRen() //unity3d调用的入口
        {
            Message msgMessage =new Message();
            msgMessage.what = 0;
            handler1.sendMessage(msgMessage);
        }

    因为直接调用会出错 作者通过在handler里面实现具体函数调用

    android工程下载地址  http://vdisk.weibo.com/s/IzsAo

  • 相关阅读:
    兄弟连,一般人来不起,来的肯定不是一般人!
    50天之脱变,66期第一个项目感受。切记平常心
    2016十大影响事件
    为什么要写年终总结
    20161228阅读笔记
    为什么要认识牛人
    李笑来:演讲能力是我这一生有幸学到的最重要能力
    张辉:工作几年就应该给自己“清零”
    小马宋:目标决定方法~坚持目标而不是方法
    李笑来的财务自由法~把一份时间卖出很多份
  • 原文地址:https://www.cnblogs.com/U-tansuo/p/renren.html
Copyright © 2020-2023  润新知