Android 第三方分享集成
2014-12-11 11:07
85 查看
---集成的包括QQ、新浪、微信
1、申请第三方应用的开发者权限
微信:https://open.weixin.qq.com/
QQ:http://open.qq.com/
新浪:http://open.weibo.com/
2、生成自己项目的debug.keystore (百度查找生成keystore的方法)
3、下载签名工具,获取应用的签名(根据debug.keystore生成的MD5签名),再去申请应用
微信:https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&verify=1&lang=zh_CN
新浪:https://github.com/sinaweibosdk/weibo_android_sdk
3、(1)申请应用:(流程自行百度)
微信:https://open.weixin.qq.com/ 管理中心
QQ:http://open.qq.com/apps/dev
新浪:http://open.weibo.com/apps
* 项目包名
* 项目签名
在Eclipse中就能看到md5签名,也可以使用MD5签名生成器生成,项目build到手机上的时候,需要指定你自己的keystore,用来对应开发者账号所申请的应用的包名和签名。如下图:
4、开发
AdnroidManifest.xml文件添加:
<!-- 新浪微博第三方授权 -->
<activity
android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize" >
</activity>
<service
android:name="com.sina.weibo.sdk.net.DownloadService"
android:exported="false" >
</service>
<!-- qq第三方授权 -->
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent1103566344" />
<!-- 100380359 100381104 222222 -->
</intent-filter>
</activity>
<!-- 分享 -->
<receiver
android:name=".AppRegister"
android:permission="com.tencent.mm.plugin.permission.SEND" >
<intent-filter>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
</intent-filter>
</receiver>
代码实现:
package com.cdsmartlink.wine.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.cdsmartlink.utils.cache.SharedPreferencesUtils;
import com.cdsmartlink.wine.android.activity.R;
import com.cdsmartlink.wine.android.constants.Constants;
import com.sina.weibo.sdk.api.TextObject;
import com.sina.weibo.sdk.api.WebpageObject;
import com.sina.weibo.sdk.api.WeiboMessage;
import com.sina.weibo.sdk.api.WeiboMultiMessage;
import com.sina.weibo.sdk.api.share.IWeiboShareAPI;
import com.sina.weibo.sdk.api.share.SendMessageToWeiboRequest;
import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest;
import com.sina.weibo.sdk.auth.AuthInfo;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.exception.WeiboException;
import com.sina.weibo.sdk.utils.Utility;
import com.tencent.connect.share.QQShare;
import com.tencent.connect.share.QzoneShare;
import com.tencent.mm.sdk.openapi.BaseReq;
import com.tencent.mm.sdk.openapi.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.openapi.WXWebpageObject;
import com.tencent.open.t.Weibo;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
public class ThridPartyShareUtils{
private static Activity LocalActivity;
/**
* 分享到朋友圈
* @param wxapi
* @param WXSupportAPINo
*/
public static void shareToWechatFriend(IWXAPI wxapi, int WXSupportAPINo){
WXWebpageObject wxWebpageObject = new WXWebpageObject();
wxWebpageObject.webpageUrl=Constants.getShareTargetUrl();
// 用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = wxWebpageObject;
msg.title = Constants.SHARE_DEFAULT_TITLE;
msg.description = Constants.SHARE_DEFAULT_SUMMARY;
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage"); // transaction字段用于唯一标识一个请求
req.message = msg;
// req.scene = SendMessageToWX.Req.WXSceneTimeline;
req.scene = SendMessageToWX.Req.WXSceneTimeline;
wxapi.sendReq(req);
}
/**
* 分享到微信
* @param wxapi
* @param WXSupportAPINo
*/
public static void shareToWechat(IWXAPI wxapi, int WXSupportAPINo){
WXWebpageObject wxWebpageObject = new WXWebpageObject();
wxWebpageObject.webpageUrl=Constants.getShareTargetUrl();
// 用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = wxWebpageObject;
msg.title = Constants.SHARE_DEFAULT_TITLE;
msg.description = Constants.SHARE_DEFAULT_SUMMARY;
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage"); // transaction字段用于唯一标识一个请求
req.message = msg;
// req.scene = SendMessageToWX.Req.WXSceneTimeline;
req.scene = SendMessageToWX.Req.WXSceneSession;
wxapi.sendReq(req);
}
/**
* 分享到QQ
* @param mTencent
* @param activity
* @param shareType
* @param mExtarFlag
*/
public static void shareToQQ(Tencent mTencent,final Activity activity,int shareType,int mExtarFlag){
// 初始化QQ分享用实例
Bundle bundle = new Bundle();
//这条分享消息被好友点击后的跳转URL。
bundle.putString(QQShare.SHARE_TO_QQ_TARGET_URL, Constants.getShareTargetUrl());
//分享的标题。注:PARAM_TITLE、PARAM_IMAGE_URL、PARAM_
SUMMARY不能全为空,最少必须有一个是有值的。
bundle.putString(QQShare.SHARE_TO_QQ_TITLE, Constants.SHARE_DEFAULT_TITLE);
//分享的图片URL
bundle.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, Constants.getShareImageUrl());
//分享的消息摘要,最长50个字
bundle.putString(QQShare.SHARE_TO_QQ_SUMMARY, Constants.SHARE_DEFAULT_SUMMARY);
//手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替
bundle.putString(QQShare.SHARE_TO_QQ_APP_NAME, Constants.PARAM_APP_NAME);
// //标识该消息的来源应用,值为应用名称+AppId。
// bundle.putString(QQShare.s, Constants.PARAM_APP_NAME + Constants.TENCENT_APP_ID);
bundle.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, shareType);
bundle.putInt(QQShare.SHARE_TO_QQ_EXT_INT, mExtarFlag);
mTencent.shareToQQ(activity, bundle , new IUiListener() {
@Override
public void onError(UiError e) {
Toast.makeText(activity, "分享失败:message /n "+ e.errorDetail,Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(Object obj) {
JSONObject json = (JSONObject) obj;
Log.i("info", json.toString());
}
@Override
public void onCancel() {
}
});
}
/**
* 分享到QQ空间
* @param activity 打开该界面的parent activity
* @param qzone_shareType 分享类型
* @param shareType
* @param mTencent 授权信息
*/
public static void shareToQzone(final Activity activity,int qzone_shareType,int shareType,Tencent mTencent) {
QzoneShare mqQzoneShare = new QzoneShare(activity, mTencent.getQQToken());
final Bundle params = new Bundle();
params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE, qzone_shareType);
params.putString(QzoneShare.SHARE_TO_QQ_TITLE, Constants.SHARE_DEFAULT_TITLE);
params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, Constants.SHARE_DEFAULT_SUMMARY);
if (shareType != QzoneShare.SHARE_TO_QZONE_TYPE_APP) {
// app分享不支持传目标链接
params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL,Constants.getShareTargetUrl());
}
// 支持传多个imageUrl
ArrayList<String> imageUrls = new ArrayList<String>();
imageUrls.add(Constants.getShareImageUrl());
// for (int i = 0; i < mImageContainerLayout.getChildCount(); i++) {
// LinearLayout addItem = (LinearLayout)
// mImageContainerLayout.getChildAt(i);
// EditText editText = (EditText) addItem.getChildAt(1);
// imageUrls.add(editText.getText().toString());
// }
// String imageUrl = "http://img3.cache.netease.com/photo/0005/2013-03-07/8PBKS8G400BV0005.jpg";
// params.putString(QzoneShare.SHARE_TO_QQ_IMAGE_URL, imageUrl);
params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL,imageUrls);
mqQzoneShare.shareToQzone(activity, params, new IUiListener() {
@Override
public void onError(UiError e) {
Log.i("info", e.errorDetail);
Toast.makeText(activity, "分享失败:message /n "+ e.errorDetail,Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(Object obj) {
Log.i("info",obj.toString());
Toast.makeText(activity, "分享成功",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Log.i("info","onCancel:");
Toast.makeText(activity, "取消分享",Toast.LENGTH_SHORT).show();
}
});
}
/**
* 分享到腾讯微博
* @param mTencent 授权信息
* @param activity
* @param mWeibo
*/
public static void shareToQQWeibo(Tencent mTencent,final Activity activity,Weibo mWeibo){
LocalActivity = activity;
if(!mTencent.isSessionValid()){
mTencent.login(activity, "all", new QQTrirdPartyLoginLstener());
}
String content = Constants.SHARE_DEFAULT_TITLE +" /n || "+ Constants.SHARE_DEFAULT_CONTENT +" /n || "+ Constants.getShareTargetUrl();
mWeibo.sendText(content, new IUiListener() {
@Override
public void onError(UiError e) {
Log.i("info",e.errorDetail);
Toast.makeText(activity, "分享失败:message /n "+ e.errorDetail,Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(Object obj) {
Log.i("info",obj.toString());
Toast.makeText(activity, "分享成功",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Log.i("info","onCancel");
Toast.makeText(activity, "取消分享",Toast.LENGTH_SHORT).show();
}
});
}
public static void shareToSina(final Activity activity, int mShareType,
int SHARE_CLIENT,final IWeiboShareAPI mWeiboShareAPI) {
AuthInfo authInfo = new AuthInfo(activity,
Constants.SINA_APP_KEY, Constants.REDIRECT_URL,
Constants.SCOPE);
String token = SharedPreferencesUtils
.getDatasFromSharedPreferences(activity,
SharedPreferencesUtils.USER_LOGIN_FILE_NAME,
Context.MODE_PRIVATE,
SharedPreferencesUtils.SINA_ACCESS_TOKEN);
mWeiboShareAPI.sendRequest(activity, initSendMultiMessage(activity),authInfo, token, new WeiboAuthListener() {
@Override
public void onWeiboException(WeiboException arg0) {
}
@Override
public void onComplete(Bundle bundle) {
Oauth2AccessToken newToken = Oauth2AccessToken
.parseAccessToken(bundle);
// Map<String, String> map = new HashMap<String, String>();
// map.put(SharedPreferencesUtils.SINA_ACCESS_TOKEN,
// newToken.getToken());
// SharedPreferencesUtils
// .saveDatasInSharedPreferences(
// activity,
// SharedPreferencesUtils.USER_LOGIN_FILE_NAME,
// Context.MODE_PRIVATE, map);
}
@Override
public void onCancel() {
}
});
}
public static SendMultiMessageToWeiboRequest initSendMultiMessage(final Activity activity){
// 1. 初始化微博的分享消息
WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
TextObject textObject = new TextObject();
textObject.text = Constants.SHARE_DEFAULT_TITLE;
// 1. 初始化微博的分享消息
WebpageObject mediaObj = new WebpageObject();
mediaObj.actionUrl = Constants.getShareTargetUrl();
mediaObj.identify = Utility.generateGUID();
mediaObj.title = Constants.SHARE_DEFAULT_TITLE;
mediaObj.description = Constants.SHARE_DEFAULT_SUMMARY;
// 设置 Bitmap 类型的图片到对象里
BitmapDrawable mBitmapDrawable = (BitmapDrawable) activity.getResources()
.getDrawable(R.drawable.app_icon);
mediaObj.setThumbImage(mBitmapDrawable.getBitmap());
mediaObj.defaultText = Constants.SHARE_DEFAULT_CONTENT;
weiboMessage.mediaObject = mediaObj;
weiboMessage.textObject = textObject;
// 2. 初始化从第三方到微博的消息请求
SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
// 用transaction唯一标识一个请求
request.transaction = String.valueOf(System.currentTimeMillis());
request.multiMessage = weiboMessage;
return request;
}
public static SendMessageToWeiboRequest initSendSingleMessage(){
// 1. 初始化微博的分享消息
WeiboMessage weiboMessage = new WeiboMessage();
WebpageObject mediaObject = new WebpageObject();
mediaObject.identify = Utility.generateGUID();
mediaObject.title = Constants.SHARE_DEFAULT_TITLE;
mediaObject.description = Constants.SHARE_DEFAULT_SUMMARY;
// 设置 Bitmap 类型的图片到视频对象里
// mediaObject.setThumbImage(mShareWebPageView.getThumbBitmap());
mediaObject.actionUrl = Constants.getShareTargetUrl();
mediaObject.defaultText = Constants.SHARE_DEFAULT_CONTENT;
weiboMessage.mediaObject = mediaObject;
// 2. 初始化从第三方到微博的消息请求
SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();
// 用transaction唯一标识一个请求
request.transaction = String.valueOf(System.currentTimeMillis());
request.message = weiboMessage;
return request;
}
/**
* qq一键登录
* @author Administrator
*/
public static class QQTrirdPartyLoginLstener implements IUiListener {
@Override
public void onCancel() {
}
@Override
public void onComplete(Object obj) {
JSONObject json = (JSONObject) obj;
try {
String openid = json.getString(Constants.TENCENT_OPENID);
String access_token = json.getString(Constants.TENCENT_ACCESS_TOKEN);
String expires_in = json.getString(Constants.TENCENT_EXPIRES_IN);
Long expiresing_in= System.currentTimeMillis() + Long.parseLong(expires_in) * 1000;
//将其余信息放入map中
Map<String, String> map = new HashMap<String, String>();
map.put(SharedPreferencesUtils.QQ_OPENID, openid);
map.put(SharedPreferencesUtils.QQ_ACCESS_TOKEN, access_token);
map.put(SharedPreferencesUtils.QQ_TOKEN_EXPIRES_TIME,String.valueOf(expiresing_in));
//保存到登录的用户信息文件中
SharedPreferencesUtils.saveDatasInSharedPreferences(LocalActivity,
SharedPreferencesUtils.USER_LOGIN_FILE_NAME,
Context.MODE_PRIVATE, map);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError arg0) {
}
}
private static String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis())
: type + System.currentTimeMillis();
}
}
}
1、申请第三方应用的开发者权限
微信:https://open.weixin.qq.com/
QQ:http://open.qq.com/
新浪:http://open.weibo.com/
2、生成自己项目的debug.keystore (百度查找生成keystore的方法)
3、下载签名工具,获取应用的签名(根据debug.keystore生成的MD5签名),再去申请应用
微信:https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&verify=1&lang=zh_CN
新浪:https://github.com/sinaweibosdk/weibo_android_sdk
3、(1)申请应用:(流程自行百度)
微信:https://open.weixin.qq.com/ 管理中心
QQ:http://open.qq.com/apps/dev
新浪:http://open.weibo.com/apps
* 项目包名
* 项目签名
在Eclipse中就能看到md5签名,也可以使用MD5签名生成器生成,项目build到手机上的时候,需要指定你自己的keystore,用来对应开发者账号所申请的应用的包名和签名。如下图:
4、开发
AdnroidManifest.xml文件添加:
<!-- 新浪微博第三方授权 -->
<activity
android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize" >
</activity>
<service
android:name="com.sina.weibo.sdk.net.DownloadService"
android:exported="false" >
</service>
<!-- qq第三方授权 -->
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent1103566344" />
<!-- 100380359 100381104 222222 -->
</intent-filter>
</activity>
<!-- 分享 -->
<receiver
android:name=".AppRegister"
android:permission="com.tencent.mm.plugin.permission.SEND" >
<intent-filter>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
</intent-filter>
</receiver>
代码实现:
package com.cdsmartlink.wine.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.cdsmartlink.utils.cache.SharedPreferencesUtils;
import com.cdsmartlink.wine.android.activity.R;
import com.cdsmartlink.wine.android.constants.Constants;
import com.sina.weibo.sdk.api.TextObject;
import com.sina.weibo.sdk.api.WebpageObject;
import com.sina.weibo.sdk.api.WeiboMessage;
import com.sina.weibo.sdk.api.WeiboMultiMessage;
import com.sina.weibo.sdk.api.share.IWeiboShareAPI;
import com.sina.weibo.sdk.api.share.SendMessageToWeiboRequest;
import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest;
import com.sina.weibo.sdk.auth.AuthInfo;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.exception.WeiboException;
import com.sina.weibo.sdk.utils.Utility;
import com.tencent.connect.share.QQShare;
import com.tencent.connect.share.QzoneShare;
import com.tencent.mm.sdk.openapi.BaseReq;
import com.tencent.mm.sdk.openapi.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.openapi.WXWebpageObject;
import com.tencent.open.t.Weibo;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
public class ThridPartyShareUtils{
private static Activity LocalActivity;
/**
* 分享到朋友圈
* @param wxapi
* @param WXSupportAPINo
*/
public static void shareToWechatFriend(IWXAPI wxapi, int WXSupportAPINo){
WXWebpageObject wxWebpageObject = new WXWebpageObject();
wxWebpageObject.webpageUrl=Constants.getShareTargetUrl();
// 用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = wxWebpageObject;
msg.title = Constants.SHARE_DEFAULT_TITLE;
msg.description = Constants.SHARE_DEFAULT_SUMMARY;
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage"); // transaction字段用于唯一标识一个请求
req.message = msg;
// req.scene = SendMessageToWX.Req.WXSceneTimeline;
req.scene = SendMessageToWX.Req.WXSceneTimeline;
wxapi.sendReq(req);
}
/**
* 分享到微信
* @param wxapi
* @param WXSupportAPINo
*/
public static void shareToWechat(IWXAPI wxapi, int WXSupportAPINo){
WXWebpageObject wxWebpageObject = new WXWebpageObject();
wxWebpageObject.webpageUrl=Constants.getShareTargetUrl();
// 用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = wxWebpageObject;
msg.title = Constants.SHARE_DEFAULT_TITLE;
msg.description = Constants.SHARE_DEFAULT_SUMMARY;
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage"); // transaction字段用于唯一标识一个请求
req.message = msg;
// req.scene = SendMessageToWX.Req.WXSceneTimeline;
req.scene = SendMessageToWX.Req.WXSceneSession;
wxapi.sendReq(req);
}
/**
* 分享到QQ
* @param mTencent
* @param activity
* @param shareType
* @param mExtarFlag
*/
public static void shareToQQ(Tencent mTencent,final Activity activity,int shareType,int mExtarFlag){
// 初始化QQ分享用实例
Bundle bundle = new Bundle();
//这条分享消息被好友点击后的跳转URL。
bundle.putString(QQShare.SHARE_TO_QQ_TARGET_URL, Constants.getShareTargetUrl());
//分享的标题。注:PARAM_TITLE、PARAM_IMAGE_URL、PARAM_
SUMMARY不能全为空,最少必须有一个是有值的。
bundle.putString(QQShare.SHARE_TO_QQ_TITLE, Constants.SHARE_DEFAULT_TITLE);
//分享的图片URL
bundle.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, Constants.getShareImageUrl());
//分享的消息摘要,最长50个字
bundle.putString(QQShare.SHARE_TO_QQ_SUMMARY, Constants.SHARE_DEFAULT_SUMMARY);
//手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替
bundle.putString(QQShare.SHARE_TO_QQ_APP_NAME, Constants.PARAM_APP_NAME);
// //标识该消息的来源应用,值为应用名称+AppId。
// bundle.putString(QQShare.s, Constants.PARAM_APP_NAME + Constants.TENCENT_APP_ID);
bundle.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, shareType);
bundle.putInt(QQShare.SHARE_TO_QQ_EXT_INT, mExtarFlag);
mTencent.shareToQQ(activity, bundle , new IUiListener() {
@Override
public void onError(UiError e) {
Toast.makeText(activity, "分享失败:message /n "+ e.errorDetail,Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(Object obj) {
JSONObject json = (JSONObject) obj;
Log.i("info", json.toString());
}
@Override
public void onCancel() {
}
});
}
/**
* 分享到QQ空间
* @param activity 打开该界面的parent activity
* @param qzone_shareType 分享类型
* @param shareType
* @param mTencent 授权信息
*/
public static void shareToQzone(final Activity activity,int qzone_shareType,int shareType,Tencent mTencent) {
QzoneShare mqQzoneShare = new QzoneShare(activity, mTencent.getQQToken());
final Bundle params = new Bundle();
params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE, qzone_shareType);
params.putString(QzoneShare.SHARE_TO_QQ_TITLE, Constants.SHARE_DEFAULT_TITLE);
params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, Constants.SHARE_DEFAULT_SUMMARY);
if (shareType != QzoneShare.SHARE_TO_QZONE_TYPE_APP) {
// app分享不支持传目标链接
params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL,Constants.getShareTargetUrl());
}
// 支持传多个imageUrl
ArrayList<String> imageUrls = new ArrayList<String>();
imageUrls.add(Constants.getShareImageUrl());
// for (int i = 0; i < mImageContainerLayout.getChildCount(); i++) {
// LinearLayout addItem = (LinearLayout)
// mImageContainerLayout.getChildAt(i);
// EditText editText = (EditText) addItem.getChildAt(1);
// imageUrls.add(editText.getText().toString());
// }
// String imageUrl = "http://img3.cache.netease.com/photo/0005/2013-03-07/8PBKS8G400BV0005.jpg";
// params.putString(QzoneShare.SHARE_TO_QQ_IMAGE_URL, imageUrl);
params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL,imageUrls);
mqQzoneShare.shareToQzone(activity, params, new IUiListener() {
@Override
public void onError(UiError e) {
Log.i("info", e.errorDetail);
Toast.makeText(activity, "分享失败:message /n "+ e.errorDetail,Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(Object obj) {
Log.i("info",obj.toString());
Toast.makeText(activity, "分享成功",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Log.i("info","onCancel:");
Toast.makeText(activity, "取消分享",Toast.LENGTH_SHORT).show();
}
});
}
/**
* 分享到腾讯微博
* @param mTencent 授权信息
* @param activity
* @param mWeibo
*/
public static void shareToQQWeibo(Tencent mTencent,final Activity activity,Weibo mWeibo){
LocalActivity = activity;
if(!mTencent.isSessionValid()){
mTencent.login(activity, "all", new QQTrirdPartyLoginLstener());
}
String content = Constants.SHARE_DEFAULT_TITLE +" /n || "+ Constants.SHARE_DEFAULT_CONTENT +" /n || "+ Constants.getShareTargetUrl();
mWeibo.sendText(content, new IUiListener() {
@Override
public void onError(UiError e) {
Log.i("info",e.errorDetail);
Toast.makeText(activity, "分享失败:message /n "+ e.errorDetail,Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(Object obj) {
Log.i("info",obj.toString());
Toast.makeText(activity, "分享成功",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Log.i("info","onCancel");
Toast.makeText(activity, "取消分享",Toast.LENGTH_SHORT).show();
}
});
}
public static void shareToSina(final Activity activity, int mShareType,
int SHARE_CLIENT,final IWeiboShareAPI mWeiboShareAPI) {
AuthInfo authInfo = new AuthInfo(activity,
Constants.SINA_APP_KEY, Constants.REDIRECT_URL,
Constants.SCOPE);
String token = SharedPreferencesUtils
.getDatasFromSharedPreferences(activity,
SharedPreferencesUtils.USER_LOGIN_FILE_NAME,
Context.MODE_PRIVATE,
SharedPreferencesUtils.SINA_ACCESS_TOKEN);
mWeiboShareAPI.sendRequest(activity, initSendMultiMessage(activity),authInfo, token, new WeiboAuthListener() {
@Override
public void onWeiboException(WeiboException arg0) {
}
@Override
public void onComplete(Bundle bundle) {
Oauth2AccessToken newToken = Oauth2AccessToken
.parseAccessToken(bundle);
// Map<String, String> map = new HashMap<String, String>();
// map.put(SharedPreferencesUtils.SINA_ACCESS_TOKEN,
// newToken.getToken());
// SharedPreferencesUtils
// .saveDatasInSharedPreferences(
// activity,
// SharedPreferencesUtils.USER_LOGIN_FILE_NAME,
// Context.MODE_PRIVATE, map);
}
@Override
public void onCancel() {
}
});
}
public static SendMultiMessageToWeiboRequest initSendMultiMessage(final Activity activity){
// 1. 初始化微博的分享消息
WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
TextObject textObject = new TextObject();
textObject.text = Constants.SHARE_DEFAULT_TITLE;
// 1. 初始化微博的分享消息
WebpageObject mediaObj = new WebpageObject();
mediaObj.actionUrl = Constants.getShareTargetUrl();
mediaObj.identify = Utility.generateGUID();
mediaObj.title = Constants.SHARE_DEFAULT_TITLE;
mediaObj.description = Constants.SHARE_DEFAULT_SUMMARY;
// 设置 Bitmap 类型的图片到对象里
BitmapDrawable mBitmapDrawable = (BitmapDrawable) activity.getResources()
.getDrawable(R.drawable.app_icon);
mediaObj.setThumbImage(mBitmapDrawable.getBitmap());
mediaObj.defaultText = Constants.SHARE_DEFAULT_CONTENT;
weiboMessage.mediaObject = mediaObj;
weiboMessage.textObject = textObject;
// 2. 初始化从第三方到微博的消息请求
SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
// 用transaction唯一标识一个请求
request.transaction = String.valueOf(System.currentTimeMillis());
request.multiMessage = weiboMessage;
return request;
}
public static SendMessageToWeiboRequest initSendSingleMessage(){
// 1. 初始化微博的分享消息
WeiboMessage weiboMessage = new WeiboMessage();
WebpageObject mediaObject = new WebpageObject();
mediaObject.identify = Utility.generateGUID();
mediaObject.title = Constants.SHARE_DEFAULT_TITLE;
mediaObject.description = Constants.SHARE_DEFAULT_SUMMARY;
// 设置 Bitmap 类型的图片到视频对象里
// mediaObject.setThumbImage(mShareWebPageView.getThumbBitmap());
mediaObject.actionUrl = Constants.getShareTargetUrl();
mediaObject.defaultText = Constants.SHARE_DEFAULT_CONTENT;
weiboMessage.mediaObject = mediaObject;
// 2. 初始化从第三方到微博的消息请求
SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();
// 用transaction唯一标识一个请求
request.transaction = String.valueOf(System.currentTimeMillis());
request.message = weiboMessage;
return request;
}
/**
* qq一键登录
* @author Administrator
*/
public static class QQTrirdPartyLoginLstener implements IUiListener {
@Override
public void onCancel() {
}
@Override
public void onComplete(Object obj) {
JSONObject json = (JSONObject) obj;
try {
String openid = json.getString(Constants.TENCENT_OPENID);
String access_token = json.getString(Constants.TENCENT_ACCESS_TOKEN);
String expires_in = json.getString(Constants.TENCENT_EXPIRES_IN);
Long expiresing_in= System.currentTimeMillis() + Long.parseLong(expires_in) * 1000;
//将其余信息放入map中
Map<String, String> map = new HashMap<String, String>();
map.put(SharedPreferencesUtils.QQ_OPENID, openid);
map.put(SharedPreferencesUtils.QQ_ACCESS_TOKEN, access_token);
map.put(SharedPreferencesUtils.QQ_TOKEN_EXPIRES_TIME,String.valueOf(expiresing_in));
//保存到登录的用户信息文件中
SharedPreferencesUtils.saveDatasInSharedPreferences(LocalActivity,
SharedPreferencesUtils.USER_LOGIN_FILE_NAME,
Context.MODE_PRIVATE, map);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError arg0) {
}
}
private static String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis())
: type + System.currentTimeMillis();
}
}
}
相关文章推荐
- 最新Android实现分享到QQ QZone 博客功能(集成官方SDK,不使用第三方)
- 史上最详细Android集成QQ,微信,微博分享(不用第三方)持续更新中
- React Native 集成分享第三方登录功能分享第三方登录模块开发(Android)
- Android使用友盟集成QQ、微信、微博等第三方分享与登录方法详解
- Android第三方集成之一键分享ShareSDK的使用eclipse篇
- Android使用ShareSDK集成QQ、微信、微博等第三方分享
- Android使用ShareSDK集成第三方登录和分享(v3.1.2)
- [置顶] Android使用友盟集成QQ、微信、微博等第三方分享
- 史上最详细Android集成QQ,微信,微博分享(不用第三方)持续更新中
- Android集成ShareSDK的分享及第三方登录
- 史上最详细Android集成QQ,微信,微博分享(不用第三方)持续更新中
- Android使用官方API分享内容到QQ和微信(非第三方集成)
- android studio SDK 集成 一键分享 第三方登录:
- 史上最详细Android集成QQ,微信,微博分享(不用第三方)持续更新中
- 史上最详细Android集成QQ,微信,微博分享(不用第三方)持续更新中
- Android中集成第三方的分享和版本更新以及用户量统计
- Android友盟集成QQ、微信、微博等第三方登录与分享
- React Native 集成分享第三方登录功能分享第三方登录模块开发(Android)
- cocos2d-x C++ (Android)集成第三方微信分享
- 史上最详细Android集成QQ,微信,微博分享(不用第三方)持续更新中