1704B分享以及第三方登陆
一. 案例
二.实现流程1:官网申请key
1.注册账号省略
2.创建分享产品
- 产品—>分享—>立即使用
- 点击右上角查看查产品
- 点击管理 —>创建新的应用
- 填写信息,应用名必须写包名
- 生成key,后面会使用到
三.配置
1.添加依赖
//友盟统计
implementation 'com.umeng.sdk:common:1.5.1'
implementation 'com.umeng.sdk:analytics:7.5.0'
//友盟社会化分享
implementation 'com.umeng.sdk:share-core:6.9.1'
implementation 'com.umeng.sdk:share-qq:6.9.1.1'
implementation 'com.umeng.sdk:share-wechat:6.9.1'
implementation 'com.umeng.sdk:share-sina:6.9.1'
//分享面板
implementation 'com.umeng.sdk:shareboard-widget:6.9.1'
如果无法正常集成,则需要在项目的builde.gradle中添加如下配置:
allprojects {
repositories {
mavenCentral()
}
}
2.添加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
3. 分享相关配置
在app级别 build.gradle中的 defaultConfig下添加manifestPlaceholders = [qqappid: “你的qq appid”]
不配置会出现下面的错误:
defaultConfig {
manifestPlaceholders = [qqappid: "100424468"]
applicationId "com.example.day15_ument"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
4. 在applicatio的onCreate()中添加各平台的第三方key并初始化
@Override
public void onCreate() {
super.onCreate();
/**
* 初始化common库
* 参数1:上下文,必须的参数,不能为空
* 参数2:友盟 app key,非必须参数,如果Manifest文件中已配置app key,该参数可以传空,则使用Manifest中配置的app key,否则该参数必须传入
* 参数3:友盟 channel,非必须参数,如果Manifest文件中已配置channel,该参数可以传空,则使用Manifest中配置的channel,否则该参数必须传入,channel命名请详见channel渠道命名规范
* 参数4:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机
* 参数5:Push推送业务的secret,需要集成Push功能时必须传入Push的secret,否则传空
*/
UMConfigure.init(this,"你的应用在友盟上的APPKEY","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");
/**
* 友盟相关平台配置。注意友盟官方新文档中没有这项配置,但是如果不配置会吊不起来相关平台的授权界面
*/
PlatformConfig.setWeixin("你的微信APPID", "你的微信AppSecret");//微信APPID和AppSecret
PlatformConfig.setQQZone("你的QQAPPID", "你的QQAppSecret");//QQAPPID和AppSecret
PlatformConfig.setSinaWeibo("你的微博APPID", "你的微博APPSecret","微博的后台配置回调地址");//微博
}
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
UMConfigure.init(this,"5d3536623fc195bfc00009ad","Umeng",UMConfigure.DEVICE_TYPE_PHONE,"");
PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");
PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
PlatformConfig.setAlipay("2015111700822536");
PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
PlatformConfig.setPinterest("1439206");
PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");
PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");
PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");
}
}
清单文件配置application
四.Activity分享代码:设置点击事件弹出分享面板
public void share(){
//TODO 1:分享的内容
final UMImage shareimage = new UMImage(this, R.mipmap.ic_launcher);//分享图标
// final UMWeb web = new UMWeb("http://172.21.79.121/hfs/demo.html"); //切记切记 这里分享的链接必须是http开头
// web.setTitle("demo");//标题
// web.setThumb(shareimage); //缩略图
// web.setDescription("哈哈哈哈");//描述
//TODO 2:弹出分享面板
new ShareAction(this)
.setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)
.setShareboardclickCallback(new ShareBoardlistener() {
@Override
public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
if (share_media == SHARE_MEDIA.QQ) {
//只分享图片
new ShareAction(MainActivity.this).setPlatform(SHARE_MEDIA.QQ)
.withMedia(shareimage)
.setCallback(umShareListener)
.share();
} else if (share_media == SHARE_MEDIA.WEIXIN) {
new ShareAction(MainActivity.this).setPlatform(SHARE_MEDIA.WEIXIN)
.withMedia(web)
.setCallback(umShareListener)
.share();
} else if (share_media == SHARE_MEDIA.QZONE) {
new ShareAction(MainActivity.this).setPlatform(SHARE_MEDIA.QZONE)
.withMedia(web)
.setCallback(umShareListener)
.share();
} else if (share_media == SHARE_MEDIA.WEIXIN_CIRCLE) {
new ShareAction(MainActivity.this).setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)
.withMedia(web)
.setCallback(umShareListener)
.share();
}
}
}).open();
//TODO 3:分享回调:成功与否
umShareListener = new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
// 分享开始的回调
}
@Override
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(MainActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
}
};
}
五.Activity登陆代码:设置点击事件弹出分享面板
发起登录
private UMShareAPI umShareAPI;
private UMAuthListener umAuthListener;
mShareAPI = UMShareAPI.get(this);
mShareAPI.getPlatformInfo(this, SHARE_MEDIA.QQ, umAuthListener);//QQ登录
mShareAPI.deleteOauth(this, SHARE_MEDIA.QQ, umAuthListener);//撤销QQ授权
登录回调
umAuthListener = new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA platform) {}
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
// Logger.e("openid: " + data.get("uid"));
// Logger.e("昵称: " + data.get("name"));
// Logger.e("头像: " + data.get("iconurl"));
// Logger.e("性别: " + data.get("gender"));
}
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
}
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
}
};
在使用界面中要添加onActivityResult方法,否则授权回调不成功,获取不到第三方信息。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}