[原] 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

原文地址:https://www.cnblogs.com/U-tansuo/p/renren.html