欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

使用twitter sdk实现分享功能,twittersdk实现分享,申请后要获得CONSUM

来源: 开发者 投稿于  被查看 2454 次 评论:173

使用twitter sdk实现分享功能,twittersdk实现分享,申请后要获得CONSUM


twitter的申请部分,这里就不在说了,大家可以到twitter开发者申请。申请后要获得CONSUMER_KEY、CONSUMER_SECRET , 这俩个在开发中要用到。

twitter的分享功能如果要使用sdk开发的画要比facebook的复杂一些,代码量和逻辑都不是一时半会就能弄清楚了,我可是用了一天的功夫才整明白的。

另外,首先提醒下,如果要分享链接的话, 链接的主机名部分不能写ip,必须是域名,否则twitter不认为他是一个链接。这点上我吃了很大的亏,所以要首先提出来。


其实,如果要是没有严格要求一定要使用sdk开发的,到是有个很简单的分享的实现:

String tweetUrl = "https://twitter.com/intent/tweet?text=&url=";
Uri uri = Uri.parse(tweetUrl);
startActivity(new Intent(Intent.ACTION_VIEW, uri));
此方法会打开浏览器或twitter客户端进行推送分享内容, 十分简单,没有特别情况,我一般使用的就是这种方法。


下面就着重介绍下如何使用twitter sdk进行开发。

第一步:导入jar包  

    将下载的开发包解压后,里边会有一些jar包,如果我们只是使用分享功能的话,只导入twitter4j-core-4.0.2.jar  这个核心包就行。


第二步:修改AndroidManifest.xml

    主要是添加权限:    

    <!-- Permission - Internet Connect -->
    <uses-permission android:name="android.permission.INTERNET" />    
    <!-- Network State Permissions -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

添加网络访问权限。


接下来就可以写java代码了。

第三步:初始化twitter实例

新建个activity,然后加入如下方法,

/**
	 * 初始化twitter实例
	 */
	private void initializeTwitter() {  
	    ConfigurationBuilder builder = new ConfigurationBuilder();  
	    builder.setOAuthConsumerKey(ConstantValues.TWITTER_CONSUMER_KEY); //我们申请的consumer_key  
	    builder.setOAuthConsumerSecret(ConstantValues.TWITTER_CONSUMER_SECRET); //我们申请的consumer_secret  
	    Configuration conf = builder.build();  
	    twitter = new TwitterFactory(conf).getInstance();         
	    twitter.setOAuthAccessToken(null);  
	}  
利用我们在twitter开发者申请的consumer_key和cunsumer_secret 创建twitter实例。之后的所有操作都是通过这个twitter实例来完成的。


第四步:获得requestToken

    从第四步开始实际上是应用授权的过程,只有我们的app通过了授权才能发送推文。

private void reOauth() {  
		final Handler handler = new Handler(){
			@Override
			public void handleMessage(Message msg) {
				if (requestToken != null) {  
			        Intent i = new Intent(MainActivity.this, BrowserActivity.class);  
			        i.putExtra("href", requestToken.getAuthenticationURL());  
			        startActivityForResult(i, 10);   
			  
			    }  
			}			
		};
		new Thread(){
			public void run(){
				try {  
			        twitter.setOAuthAccessToken(null);  
			        requestToken = twitter.getOAuthRequestToken(ConstantValues.TWITTER_CALLBACK_URL); //获取requestToken  
			    } catch (TwitterException e) {  
			    	e.printStackTrace();
			    } 
				handler.sendMessage(new Message());
			}
		}.start();
	    
	    
	} 
注意,由于授权过程需要访问网络,所以不能再主线程完成,这样就需要单独起个线程。获得requestToken后通过message发送出去。在消息处理中,如果成果获得了requestToken,可通过requestToken.getAuthenticationURL()获得认证的url,之后打开这个url。这里边我自己定义了个浏览器BrowserActivity,里边其实只有个webview,之所以要使用webview而不是第三方的浏览器(如uc),是因为测试经常发现调用url后没反应,无法返回。所以建议最好用webview。之后打开如下页面,输入你的twitter账号和密码。


点击"授权应用程序"。


第五步:获得access_token和access_token_secret

public class BrowserActivity extends Activity {
	private WebView webView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.browser);
		webView = (WebView)this.findViewById(R.id.browser_webview);
		webView.getSettings().setJavaScriptEnabled(true);
		webView.setWebViewClient(new MyWebViewClient());
		String href = this.getIntent().getStringExtra("href");
		webView.loadUrl(href);
	}
	private class MyWebViewClient extends WebViewClient{  
		@Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
			
		}
		@Override  
        public void onPageFinished(WebView view, String url) {
			if (url != null && url.startsWith(ConstantValues.TWITTER_CALLBACK_URL)) {  
	            String oauthVerifer = Uri.parse(url).  
	                getQueryParameter(ConstantValues.URL_TWITTER_OAUTH_VERIFIER);  
	              
	            Intent i = new Intent();  
	            i.putExtra(ConstantValues.URL_TWITTER_OAUTH_VERIFIER, oauthVerifer);  
	            setResult(RESULT_OK, i); //把获取的oauth_verifer  
	            finish();  
	        }  
        }
		
	}
	
}
onCreate中的href就是requestToken.getAuthenticationURL(),调用这个href后twitter会调用ConstantValues.TWITTER_CALLBACK_URL的地址将参数传回给我们,参数主要就是oauthVerifer。ConstantValues.TWITTER_CALLBACK_URL可以是个任意的地址,只要和开始设置的一样就行。
@Override  
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
	    super.onActivityResult(requestCode, resultCode, data); 
	    final Handler handler = new Handler(){
			@Override
			public void handleMessage(Message msg) {
				AccessToken at = (AccessToken)msg.obj;
				if(at == null)
					return ;
				String accessToken = at.getToken();  
                String accessTokenSecret = at.getTokenSecret();  
                twitter.setOAuthAccessToken(at); //这里要设置access_token  
                Editor editor = sharedPreferences.edit();
        		editor.putString("access_token", accessToken);
        		editor.putString("access_token_secret", accessTokenSecret);
        		editor.commit();
			}	    	
	    };
	    if (requestCode == 10) {  
	        if (resultCode == Activity.RESULT_OK) {  
	            final String oauthVerifier = data.getStringExtra(ConstantValues.URL_TWITTER_OAUTH_VERIFIER);                 
	            new Thread(){
            		public void run(){
            			try {
							AccessToken at = twitter.getOAuthAccessToken(requestToken, oauthVerifier);
							Message msg = new Message();
							msg.obj = at;
							handler.sendMessage(msg);
						} catch (TwitterException e) {
							e.printStackTrace();
						}              			
            		}
            	}.start();
	        }  
	    }  
	}  

接收oauthVerifier, 在连同requestToken一起,通过twitter.getOAuthAccessToken(requestToken, oauthVerifier)方法去获得AccessToken,通过AccessToken就可以获得access_token和access_token_secret,  有了这俩个东西授权就成功,我们就可以发送分享或推文了。access_token和access_token_secret最好是保存到sharedPreferences里,这样以后拿来用就行了。

第六步:发送推文   

twitter.updateStatus("http://www.google.com");
这样就可以将google的分享发送出去了。


最后要注意由于是要和twitter打交道,所以需要翻墙,使用facebook sdk实现分享功能我们介绍了一些翻墙的工具。需要的可以下载。

完整demo

优化后的demo


用户评论