1.没有密钥的朋友

请在这里注册一个移动应用,http://open.weibo.com/ 。注册成功后在应用信息-》基本信息中即可获得APP KEY 和 APP SECRET,没有这两个KEY你是无法发送微薄的。 仅仅这些还是不够,因为是刚刚注册的新密钥所以是不能被公众所使用的,你应当继续在 应用信息-> 测试帐号 中添加测试账号,只有添加过的测试帐号才能使用新注册的密钥发送微薄。

2.有密钥的朋友

可以直接使用你的密钥来进行开发。

接着我们下载新浪微博Andoid下API接口, 下载地址:http://code.google.com/p/android-weibo-sdk/downloads/list     我个人在选择API的时候习惯选择最新的版本,页面中最上面的下载地址就是最新的API

解压后使用Eclipse将整个工程引入,一定要从解压后的顶层的文件夹将下面的两个工程同时的引入Eclipse,不然你会出现错误 ”@style/ContentOverlay” 无法找到。这样的话就会将两个工程都引入至elipse,com_weibo_android 是API包, com_weibo_android_exampe 就是例子程序,直接运行它即可。

然后我们需要在Unity3D中制作Android的插件来调用新浪微博接口,如果你现在对Android的插件还是不是很了解,请阅读Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)文章。

开始MOMO使用com_weibo_android_exampe 来制作Android插件的时候发现最终Unity导出项目的时候无法运行,并且在手机中也无法找到刚刚编译的项目。非常奇怪,后来我就重新把API的代码整理了一遍,问题就解决了。

SinaMessageActivity.java  它是我们写的Activity插件, 当Unity 中准备好 文字与图片数据的时候调用它即可发送信息。

001 /*
002  * Copyright 2013 Michael.
003  *
004  * Licensed under the Apache License and Weibo License, Version 2.0 (the "License");
005  * you may not use this file except in compliance with the License.
006  * You may obtain a copy of the License at
007  *
008  *    http://www.open.weibo.com
009  *    http://www.apache.org/licenses/LICENSE-2.0
010  *
011  * Unless required by applicable law or agreed to in writing, software
012  * distributed under the License is distributed on an "AS IS" BASIS,
013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014  * See the License for the specific language governing permissions and
015  * limitations under the License.
016  */
017  
018 package com.yusong.momo;
019  
020 import java.io.IOException;
021 import java.net.MalformedURLException;
022  
023 import com.unity3d.player.UnityPlayerActivity;
024 import com.yusong.momo.AsyncWeiboRunner.RequestListener;
025  
026 import android.app.Activity;
027 import android.content.SharedPreferences;
028 import android.os.Bundle;
029 import android.text.TextUtils;
030 import android.widget.Toast;
031  
032 public class SinaMessageActivity extends UnityPlayerActivity implements RequestListener {
033  
034 //public class SinaMessageActivity extends Activity implements RequestListener {
035     //这个是你的密钥
036     private static final String CONSUMER_KEY = "1626952933";
037     private static final String CONSUMER_SECRET = "d92012d3d2ffa5630554723e1825b11c";
038  
039     @Override
040     public void onCreate(Bundle savedInstanceState) {
041         super.onCreate(savedInstanceState);
042  
043     }
044  
045     //在Unity中调用此方法进行登录、发送微薄
046     public void pressed(String name)
047     {
048         Weibo weibo = Weibo.getInstance();
049         weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);
050         weibo.setRedirectUrl("http://xuanyusong.com");
051  
052         SharedPreferences settings = getSharedPreferences("MOMO",
053                 Activity.MODE_PRIVATE);
054  
055         //token 和 expires_in 是登录一次成功后服务器返回给你的。
056         //因为我们不需要用户每次发送微薄时都登录
057         //所以应当记录用户第一次登录时返回的token 和 expires_in
058         //发送微博时直接使用之前保存的token和expires_in即可
059  
060         String token = settings.getString("token""");
061         String expires_in = settings.getString("expires_in""");
062  
063         //SharedPreferences 中如果有数据就直接发微薄,否则让用户重新登录
064         if (!TextUtils.isEmpty(token)
065                 && !TextUtils.isEmpty(expires_in)) {
066             AccessToken accessToken = new AccessToken(token,
067                     CONSUMER_SECRET);
068             accessToken.setExpiresIn(expires_in);
069             weibo.setAccessToken(accessToken);
070             accessToken = new AccessToken(weibo.getAccessToken()
071                     .getToken(), weibo.getAccessToken().getSecret());
072             accessToken = new AccessToken(token, CONSUMER_SECRET);
073  
074             weibo.setAccessToken(accessToken);
075  
076             //这里代码一定要加, 不然即时你保存了之前的 token 和 expires_in也 无法发送微薄
077             Utility.setAuthorization(new Oauth2AccessTokenHeader());
078             try {
079                 //发送一条文字信息
080                 update(weibo, Weibo.getAppKey(), "test1""",
081                         "");
082             catch (MalformedURLException e) {
083                 // TODO Auto-generated catch block
084                 e.printStackTrace();
085             catch (IOException e) {
086                 // TODO Auto-generated catch block
087                 e.printStackTrace();
088             catch (WeiboException e) {
089                 // TODO Auto-generated catch block
090                 e.printStackTrace();
091             }
092         else {
093  
094             //开始让用户登录
095             weibo.authorize(SinaMessageActivity.this,
096                     new AuthDialogListener());
097  
098         }
099  
100     }
101  
102     public void onResume() {
103         super.onResume();
104     }
105  
106     class AuthDialogListener implements WeiboDialogListener {
107  
108         @Override
109         public void onComplete(Bundle values) {
110  
111             //用户登录成功后直接发送微薄
112             String token = values.getString("access_token");
113             String expires_in = values.getString("expires_in");
114  
115             SharedPreferences settings = getSharedPreferences("MOMO",
116                     Activity.MODE_PRIVATE);
117             SharedPreferences.Editor editor = settings.edit();
118             editor.putString("token", token);
119             editor.putString("expires_in", expires_in);
120             editor.commit();
121  
122             AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET);
123             accessToken.setExpiresIn(expires_in);
124             Weibo weibo = Weibo.getInstance();
125             weibo.setAccessToken(accessToken);
126             accessToken = new AccessToken(weibo.getAccessToken().getToken(),
127                     weibo.getAccessToken().getSecret());
128             accessToken = new AccessToken(token, CONSUMER_SECRET);
129  
130             weibo.setAccessToken(accessToken);
131             //这里代码一定要加, 不然即时你保存了之前的 token 和 expires_in也 无法发送微薄
132             Utility.setAuthorization(new Oauth2AccessTokenHeader());
133  
134                 try {
135                     //在这里发送一条 文字+ 图片的微薄
136                     //路径比较重要,在Unity中将图片保存在这个路径下
137                     //在Android插件中直接通过这个路径即可拿到图片对象
138                     upload(weibo, Weibo.getAppKey(), "/data/data/com.yusong.momo/files/Screenshot.png",
139                             "Unity3D 中调用新浪微博接口 分享自 @雨松MOMO  """"") ;
140  
141                 catch (WeiboException e) {
142                     // TODO Auto-generated catch block
143                     e.printStackTrace();
144                 }
145  
146         }
147  
148         @Override
149         public void onError(DialogError e) {
150             Toast.makeText(getApplicationContext(),
151                     "Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show();
152         }
153  
154         @Override
155         public void onCancel() {
156             Toast.makeText(getApplicationContext(), "Auth cancel",
157                     Toast.LENGTH_LONG).show();
158         }
159  
160         @Override
161         public void onWeiboException(WeiboException e) {
162             Toast.makeText(getApplicationContext(),
163                     "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
164                     .show();
165         }
166  
167     }
168  
169     // 发送文字
170     private String upload(Weibo weibo, String source, String file,
171             String status, String lon, String lat) throws WeiboException {
172         WeiboParameters bundle = new WeiboParameters();
173         bundle.add("source", source);
174         bundle.add("pic", file);
175         bundle.add("status", status);
176         if (!TextUtils.isEmpty(lon)) {
177             bundle.add("lon", lon);
178         }
179         if (!TextUtils.isEmpty(lat)) {
180             bundle.add("lat", lat);
181         }
182         String rlt = "";
183         String url = Weibo.SERVER + "statuses/upload.json";
184         AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo);
185         weiboRunner.request(this, url, bundle, Utility.HTTPMETHOD_POST, this);
186  
187         return rlt;
188     }
189  
190     // 发送文字 + 图片
191     private String update(Weibo weibo, String source, String status,
192             String lon, String lat) throws MalformedURLException, IOException,
193             WeiboException {
194         WeiboParameters bundle = new WeiboParameters();
195         bundle.add("source", source);
196         bundle.add("status", status);
197         if (!TextUtils.isEmpty(lon)) {
198             bundle.add("lon", lon);
199         }
200         if (!TextUtils.isEmpty(lat)) {
201             bundle.add("lat", lat);
202         }
203         String rlt = "";
204         String url = Weibo.SERVER + "statuses/update.json";
205         AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo);
206         weiboRunner.request(this, url, bundle, Utility.HTTPMETHOD_POST, this);
207         return rlt;
208     }
209  
210     @Override
211     public void onComplete(String response) {
212         runOnUiThread(new Runnable() {
213  
214             @Override
215             public void run() {
216                 Toast.makeText(SinaMessageActivity.this"微薄分享成功",
217                         Toast.LENGTH_LONG).show();
218             }
219         });
220  
221     }
222  
223     @Override
224     public void onIOException(IOException e) {
225         runOnUiThread(new Runnable() {
226  
227             @Override
228             public void run() {
229                 Toast.makeText(SinaMessageActivity.this"微薄分享错误",
230                         Toast.LENGTH_LONG).show();
231             }
232         });
233  
234     }
235  
236     @Override
237     public void onError(WeiboException e) {
238         runOnUiThread(new Runnable() {
239             @Override
240             public void run() {
241                 Toast.makeText(SinaMessageActivity.this"微薄分享失败",
242                         Toast.LENGTH_LONG).show();
243             }
244         });
245  
246     }
247  
248 }

当插件准备完毕后,将它导入至Unity3D中,如果不会的朋友请看我之前的文章。Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)

我们在看看Unity中是如何调用插件中的分享接口的。

Test.cs

01 using System.Collections;
02 using System.IO;
03 using System.Collections.Generic;
04 using System;
05  
06 public class Test : MonoBehaviour {
07  
08     void Start ()
09     {
10         //在Unity截取一张图片
11                 //该图片的路径保存在"/data/data/com.yusong.momo/files/Screenshot.png"
12                 //在Android插件中根据这个路径即可拿到该图片
13         Application.CaptureScreenshot("Screenshot.png");
14  
15     }
16  
17     void Update ()
18     {
19  
20     }
21  
22     void OnGUI()
23     {
24         if(GUILayout.Button("sendSinaMessage",GUILayout.Width(200),GUILayout.Height(100)))
25         {
26  
27             //开始登录新浪微博
28             using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
29             {
30                 using( AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
31                 {
32                       //在这里直接调用pressed方法进行登录与发送微薄
33                       jo.Call("pressed","");
34                 }
35             }
36  
37         }
38  
39     }
40 }

调用接口后会调用新浪登录界面,继续发送新浪微薄。

最后我把文本的Android插件代码 以及 Unity工程放出来, 下载完毕后解压即可看到工程。雨松MOMO希望大家学习愉快。

下载地址 http://vdisk.weibo.com/s/d3xA1

2013年3月23日补充

在调用新浪微薄Android接口的时候我还出现了一个 Can’t create handler inside thread that has not called Looper.prepare() 错误。

这个错误前段时间一直因为别的事情没有能即时的解决。 这几天MOMO在做Android for QQzone的插件中也遇到了同样的错误。出现这个错误的额原因就是unity调用插件中的方法中又开启了新的线程。

先改动一下上面的unity C#脚本,方法名我就不换了。。。主要说原理。。

01         if(GUILayout.Button(" Send QQ zone", GUILayout.Height(50)))
02         {
03  
04                          AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
05  
06              using (AndroidJavaObject jo = jc.GetStatic("currentActivity"))
07             {
08                 jo.Call("LoginAndSend",jo);
09  
10            }
11  
12         }

 这段代码的意思就是在unity中把当前的Activity对象传递给Android插件中。在插件中这样来写。

view source
01 public void LoginAndSend(final Activity currentActivity)
02 {
03     currentActivity.runOnUiThread(new Runnable() {
04  
05         @Override
06         public void run() {
07             //doyourcode
08  
09                      });
10     
11  
12 }

在插件中通过调用UI主线程来执行原先的子线程。。

Android调用微博接口相关推荐

  1. php访问微博页面,PHP调用微博接口实现微博登录的方法示例

    PHP调用微博接口实现微博登录的方法示例 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  PHP调用微博接口实现微博登录的方法示例.txt ] (友情提示:右键点 ...

  2. android调用web接口,Android调用webservice 接口

    以查询手机号码归属地的Web service为例,它的wsdl为 1 在Android项目中导入??Ksoap2-android jar第三方jar包?? 2 Activity代码 public cl ...

  3. android调用webservice传参数,android调用webservice接口获取信息

    我的有一篇博客上讲了如何基于CXF搭建webservice,service层的接口会被部署到tomcat上,这一篇我就讲一下如何在安卓中调用这些接口传递参数. 1.在lib中放入ksoap2的jar包 ...

  4. php 登陆微博,PHP调用微博接口实现微博登录的方法示例

    在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站.这里以微博登录为例.微博登录包括身份认证.用户关系以及内容传播.允许用户使用微博帐号登录访问第三方网站,分享内容 ...

  5. android调用java接口_java/Android 接口调用的几种写法

    虽然Handler用的地方比较普遍,但是接口也有他的独特之处,比较直观,然后降低了耦合性 如有一接口,需要将数据传给使用的activity中,接口如下 public interfacePushValu ...

  6. Android调用天气接口(和风天气)

    第一次开通博客,不知写些什么.目前正在做一个Android项目,需要调用天气接口来显示连续几天的天气信息状况,但由于网上一些资料有点杂乱或不全(或许是自己水平不够,别人写的简洁),总之刚开始时无从下手 ...

  7. php微博登录授权代码,PHP调用微博接口实现微博登录的方法示例

    在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站.这里以微博登录为例.微博登录包括身份认证.用户关系以及内容传播.允许用户使用微博帐号登录访问第三方网站,分享内容 ...

  8. android调用web接口,Android调用WebService系列之请求调用

    好久没写博客,快有3年了.当初想在CTO把自己的技术文章一直延续,可却没有坚持! 开发Android网络App,通讯方式决定了你App所需的能力! 最近正在用Web Service进行通讯,那么就让我 ...

  9. Qt for Android调用原生接口打开相机拍照并存储照片

    Qt开发Android应用,需求是通过调用Android原生接口去打开系统相机拍照,并返回拍摄的照片.原理很简单,现在Java文件中写android代码调用相机,拍照后将将相片存储在SD卡,然后在C+ ...

最新文章

  1. Ubuntu18.04安装Scala
  2. 关于小程序·云开发峰会,你想get的干货全在这了!
  3. 封装一个邮件发送工具类,一个字,巴适
  4. php 100万数据,关于批量插入数据之我见(100万级别的数据,mysql)
  5. 详解static、volatile、const
  6. 早秋精品电商男装页面\海报设计PSD模板
  7. 注册表的监控 -- WIN9X
  8. Node——设置响应报文头实现下载
  9. Ubuntu Git安装与使用
  10. 怎么定义int_「C语言更新」C语言中如何来定义一个指针,并且对其进行初始化...
  11. Python中神奇的迭代器和生成器
  12. 通过CocoCut插件和m3u8下载器下载网页视频并转换成mp4格式
  13. 计算机应用职业生涯规划,计算机应用专业个人职业规划
  14. 推荐3个开源的快速开发平台,前后端都有,项目经验又有着落了!
  15. 计算机二级考试加油作文,为中考而加油作文(精选10篇)
  16. app中跳转到手机浏览器,部分手机白屏解决(Vue)
  17. 如何将word文件的大小进行压缩?
  18. linux下dd工具,dd 工具使用
  19. 自定义Android聊天气泡ChatView。仿微信聊天气泡,能自定义边框,颜色,点击特效。
  20. 华为p40手机是不是android,华为P40新手机配新操作系统,网友:再见了安卓

热门文章

  1. 《北京市机动车停车管理条例(草案送审稿)》征求意见
  2. 本科毕业后的几张PS作品
  3. 别人做的一个XML+XSL的实例(值得初学者收藏)
  4. 科学技术工程活动感悟
  5. windows消息和消息队列详解
  6. 小程序在线支付教程一
  7. HTML实现表白biu爱心特效 (程序员专属情人节表白网站)
  8. 绕过网站安全狗,方法 适合所有
  9. EUI学习笔记(持续更新中)
  10. IEEE CEC benchmarks概述