您的位置:首页 > 移动开发 > Android开发

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();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐