前言:如果已经集成好SDK,可以直接从7开始
1、友盟jar下载地址 http://mobile.umeng.com/custom_sdk
2、解压后打开share,再双击 友盟集成工具.jar 如下图
3、点击OK后会生成一个文件夹 如下图
4、双击该文件夹 ,点开libs 将里面jar包全部复制到自己项目中libs下 如下图
5、点开个人中心-我的产品-添加新应用 在提交并获取AppKey
http://mobile.umeng.com/apps
6、以QQ为例:腾讯开放平台注册,添加应用得到APP ID APP KEY
7、清单文件 AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.helloworld.com.umengdemo">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<activity
android:name="wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="wxapi.WBShareActivity"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
intent-filter>
activity>
<activity
android:name="com.umeng.qq.tencent.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" />
<activity
android:name="com.umeng.socialize.editorpage.ShareActivity"
android:excludeFromRecents="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<meta-data
android:name="UMENG_APPKEY"
android:value="步骤5中的友盟AppKey"/>
application>
manifest>
8、新建文件夹wxapi 分享回调类
WBShareActivity WXEntryActivity
package wxapi;
import com.umeng.socialize.media.WBShareCallBackActivity;
/**
* 微博分享回调
*/
public class WBShareActivity extends WBShareCallBackActivity {
}
package wxapi;
import com.umeng.weixin.callback.WXCallbackActivity;
/**
* 微信分享回调
*/
public class WXEntryActivity extends WXCallbackActivity {
}
9、MyApplication 用于初始化友盟SDK
package com.helloworld.com.umengdemo;
import android.app.Application;
import com.umeng.socialize.Config;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.UMShareAPI;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化友盟SDK
UMShareAPI.get(this);//初始化sd
//开启debug模式,方便定位错误,具体错误检查方式可以查看
//http://dev.umeng.com/social/android/quick-integration的报错必看,正式发布,请关闭该模式
Config.DEBUG = true;
//微信
PlatformConfig.setWeixin("wxdc1e388c1111c80b", "3baf1193c85774b3fd9d11117d76cab0");
//新浪微博(第三个参数为回调地址)
PlatformConfig.setSinaWeibo("3111100954", "04b48b094faeb16683c32111124ebdad",
"http://sns.whalecloud.com/sina2/callback");
//应用宝开放平台 APP ID APP KEY
PlatformConfig.setQQZone("1111114798", "aEIMjd6vWSADA5ol");
}
}
10、MainActivity
package com.helloworld.com.umengdemo;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMAuthListener;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;
import com.umeng.socialize.media.UMWeb;
import java.util.Map;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
//之所以要删除授权,是因为每次都拉取对应授权页
//否则是直接授权并不能切换其他账号登入
umengDeleteOauth(SHARE_MEDIA.QQ);
//开始授权
shareLoginUmeng(this, SHARE_MEDIA.QQ);
//shareLoginUmeng(this, SHARE_MEDIA.WEIXIN);
//shareLoginUmeng(this, SHARE_MEDIA.SINA);
break;
case R.id.button2:
//以QQ为例
shareWeb(this, "http://www.baidu.com", "Hello Word", "Word", SHARE_MEDIA.QQ);
//shareWeb(this, "", "Hello Word", "Word", SHARE_MEDIA.SINA);
//shareWeb(this, "", "Hello Word", "Word", SHARE_MEDIA.WEIXIN);
break;
}
}
/**
* 友盟开始授权(登入)
*/
public static void shareLoginUmeng(final Activity activity, SHARE_MEDIA share_media_type) {
UMShareAPI.get(activity).getPlatformInfo(activity, share_media_type, new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
Log.e(TAG, "onStart授权开始: ");
}
@Override
public void onComplete(SHARE_MEDIA share_media, int i, Map map) {
//sdk是6.4.5的,但是获取值的时候用的是6.2以前的(access_token)才能获取到值,未知原因
String uid = map.get("uid");
String openid = map.get("openid");//微博没有
String unionid = map.get("unionid");//微博没有
String access_token = map.get("access_token");
String refresh_token = map.get("refresh_token");//微信,qq,微博都没有获取到
String expires_in = map.get("expires_in");
String name = map.get("name");//名称
String gender = map.get("gender");//性别
String iconurl = map.get("iconurl");//头像地址
Log.e(TAG, "onStart授权完成: " + openid);
Log.e(TAG, "onStart授权完成: " + unionid);
Log.e(TAG, "onStart授权完成: " + access_token);
Log.e(TAG, "onStart授权完成: " + refresh_token);
Log.e(TAG, "onStart授权完成: " + expires_in);
Log.e(TAG, "onStart授权完成: " + uid);
Log.e(TAG, "onStart授权完成: " + name);
Log.e(TAG, "onStart授权完成: " + gender);
Log.e(TAG, "onStart授权完成: " + iconurl);
}
@Override
public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
Toast.makeText(activity, "授权失败", Toast.LENGTH_LONG).show();
Log.e(TAG, "onError: " + "授权失败");
}
@Override
public void onCancel(SHARE_MEDIA share_media, int i) {
Toast.makeText(activity, "授权取消", Toast.LENGTH_LONG).show();
Log.e(TAG, "onError: " + "授权取消");
}
});
}
/**
* 友盟取消授权(登入)
*/
private void umengDeleteOauth(SHARE_MEDIA share_media_type) {
UMShareAPI.get(this).deleteOauth(this, share_media_type, new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
//开始授权
Log.e(TAG, "onStart: ");
}
@Override
public void onComplete(SHARE_MEDIA share_media, int i, Map map) {
//取消授权成功 i=1
Log.e(TAG, "onComplete: ");
}
@Override
public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
//授权出错
Log.e(TAG, "onError: ");
}
@Override
public void onCancel(SHARE_MEDIA share_media, int i) {
//取消授权
Log.e(TAG, "onCancel: ");
}
});
}
/**
* 友盟分享
* 上下文activity、分享的链接、标题、内容、类型
* 若是要分享视频、音乐可看官方文档
*/
public static void shareWeb(final Activity activity, String WebUrl, String title, String description, SHARE_MEDIA
platform) {
UMImage thumb = new UMImage(activity, R.mipmap.ic_launcher);
UMWeb web = new UMWeb(WebUrl);//连接地址(注意链接开头必须包含http)
web.setTitle(title);//标题
web.setDescription(description);//描述
web.setThumb(thumb);//缩略图
new ShareAction(activity)
//分享的平台
.setPlatform(platform)
.withMedia(web)
.setCallback(new UMShareListener() {
/**
* @descrption 分享开始的回调
* @param share_media 平台类型
*/
@Override
public void onStart(SHARE_MEDIA share_media) {
Log.e(TAG, "onStart开始分享的平台: " + share_media);
}
/**
* @descrption 分享成功的回调
* @param share_media 平台类型
*/
@Override
public void onResult(final SHARE_MEDIA share_media) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, " 分享成功 ", Toast.LENGTH_SHORT).show();
Log.e(TAG, "onStart分享成功的平台: " + share_media);
}
});
}
/**
* @descrption 分享失败的回调
* @param share_media 平台类型
* @param throwable 错误原因
*/
@Override
public void onError(final SHARE_MEDIA share_media, final Throwable throwable) {
if (throwable != null) {
//失败原因
Log.e(TAG, "throw:" + throwable.getMessage());
}
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, share_media + " 分享失败", Toast.LENGTH_SHORT).show();
}
});
}
/**
* @descrption 分享取消的回调
* @param share_media 平台类型
*/
@Override
public void onCancel(final SHARE_MEDIA share_media) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, " 分享取消 ", Toast.LENGTH_SHORT).show();
}
});
}
})
.share();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
Log.e(TAG, "onActivityResult: " + requestCode + "\n" + resultCode + "\n" + data);
}
}
对应的activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.helloworld.com.umengdemo.MainActivity">
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="QQ、微信、微博登入" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="QQ、微信、微博分享" />
LinearLayout>
11、回调后的打印以及遇到的问题
刚开始的时候报错如下图
type表明你缺少的文件类型,可能是string,drawable,layout等资源类型,你只需要在你下载的包中对应的string文件或布局文件的文件夹中去找即可。
这里是缺少string资源, 在项目values-strings目录下添加下面2句即可
<string name="umeng_socialize_female">女string>
<string name="umeng_socialize_male">男string>