本文已参与「新人创作礼」活动,一起开启掘金创作之路。
手动集成:
第一步:友盟开放平台申请友盟账号,创建应用,会有appkey,appsecret
第二步:在友盟开发者中心下载分享的SDK,选择自己需要集成的平台就可以
导入这三个包里面的lib文件夹里面的jar包
导入jar包之后选中jar包点击add as library
第三步:开始写代码
微信分享需要在包下创建wxapi包,里面创建WXEntryActivity继承WXCallbackActivity
public class WXEntryActivity extends WXCallbackActivity {
}
清单文件里面的配置:
<activity android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths"/>
</provider>
需要在res目录下新建一个xml目录,里面新建filepaths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path
name="umeng_cache"
path="umeng_cache"
/>
</paths>
接下来就是权限的添加啦
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
初始化的配置: 新建一个类继承Application
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
UMConfigure.init(this,"5a12384aa40fa3551f0001d1","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0
}
}
初始化完之后在application里面设置各个平台的appkey
// 微信设置
PlatformConfig.setWeixin("wxdc1e388c3822c80b","3baf1193c85774b3fd9d18447d76cab0");
PlatformConfig.setWXFileProvider("com.tencent.sample2.fileprovider");
// QQ设置
PlatformConfig.setQQZone("101830139","5d63ae8858f1caab67715ccd6c18d7a5");
PlatformConfig.setQQFileProvider("com.tencent.sample2.fileprovider");
// 新浪微博设置
PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");
PlatformConfig.setSinaFileProvider("com.tencent.sample2.fileprovider");
//钉钉设置
PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
PlatformConfig.setDingFileProvider("com.tencent.sample2.fileprovider");
// 企业微信设置
PlatformConfig.setWXWork("wwac6ffb259ff6f66a","EU1LRsWC5uWn6KUuYOiWUpkoH45eOA0yH-ngL8579zs","1000002","wwauthac6ffb259ff6f66a000002");
PlatformConfig.setWXWorkFileProvider("com.tencent.sample2.fileprovider");
// 其他平台设置
PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
PlatformConfig.setAlipay("2015111700822536");
PlatformConfig.setLaiwang("laiwangd497e70d4","d497e70d4c3e4efeab1381476bac4c5e");
PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi","MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
PlatformConfig.setPinterest("1439206");
PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");
PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");
PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");
// PlatformConfig.setYnote("9c82bf470cba7bd2f1819b0ee26f86c6ce670e9b");
以上操作都完成之后,添加控件设置点击事件
TextView wechat = findViewById(R.id.wechat);
wechat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ShareAction(MainActivity.this)
.setPlatform(SHARE_MEDIA.WEIXIN)//传入平台
.withText("内容")//分享内容
.setCallback(shareListener)//回调监听器
.share();
}
});
private UMShareListener shareListener = new UMShareListener() {
/**
* @descrption 分享开始的回调
* @param platform 平台类型
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @descrption 分享成功的回调
* @param platform 平台类型
*/
@Override
public void onResult(SHARE_MEDIA platform) {
//toast吐司
Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_SHORT).show();
}
/**
* @descrption 分享失败的回调
* @param platform 平台类型
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_SHORT).show();
}
/**
* @descrption 分享取消的回调
* @param platform 平台类型
*/
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_SHORT).show();
}
};
之后就运行一下,看看有没有什么问题! 果不其然,报错了,具体错误如下:
C:\Users\Administrator\Desktop\share\app\src\main\java\com\example\share\wxapi\WXEntryActivity.java:5: ����: ������IWXAPIEventHandler
public class WXEntryActivity extends WXCallbackActivity {
^
�Ҳ���com.tencent.mm.opensdk.openapi.IWXAPIEventHandler�����ļ�
当时一脸懵逼,明明都按照文档配置了,为什么会报错,还是乱码,根本不知道如何下手,之后我添加了依赖,错误解决了
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
项目跑起来之后,提示SDK初始化失败,请检查是否集成umeng-asms-1.2.X.arr库。
当时也是很懵,看了一下集成的jar里面并没有umeng-asms-1.2.X.arr这个库,后来添加的如下代码,错误解决
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation fileTree(dir: 'libs', include: ['umeng-abtest-v1.0.1.aar'])
implementation fileTree(dir: 'libs', include: ['umeng-asms-armeabi-v1.6.0.aar'])
这样分享就完成啦,但是会提示:包名不对,请检查包名是否与开放平台上一致,出现这个问题是因为我并没有创建应用,直接使用的官方文档里面的appkey
这个是分享的工具类
public class ShareUtils {
/**
* 分享链接
*/
public static void shareWeb(final Activity activity, String WebUrl, String title, String description, String imageUrl, int imageID, SHARE_MEDIA platform) {
UMWeb web = new UMWeb(WebUrl);//连接地址
web.setTitle(title);//标题
web.setDescription(description);//描述
if (TextUtils.isEmpty(imageUrl)) {
web.setThumb(new UMImage(activity, imageID)); //本地缩略图
} else {
web.setThumb(new UMImage(activity, imageUrl)); //网络缩略图
}
new ShareAction(activity)
.setPlatform(platform)
.withMedia(web)
.setCallback(new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
}
@Override
public void onResult(final SHARE_MEDIA share_media) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (share_media.name().equals("WEIXIN_FAVORITE")) {
Toast.makeText(activity, share_media + " 收藏成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(activity, share_media + " 分享成功", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onError(final SHARE_MEDIA share_media, final Throwable throwable) {
if (throwable != null) {
Log.d("throw", "throw:" + throwable.getMessage());
}
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, share_media + " 分享失败", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onCancel(final SHARE_MEDIA share_media) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, share_media + " 分享取消", Toast.LENGTH_SHORT).show();
}
});
}
})
.share();
//新浪微博中图文+链接
/*new ShareAction(activity)
.setPlatform(platform)
.withText(description + " " + WebUrl)
.withMedia(new UMImage(activity,imageID))
.share();*/
}
}