Android中集成友盟微信分享

631 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

手动集成:

第一步:友盟开放平台申请友盟账号,创建应用,会有appkey,appsecret

第二步:在友盟开发者中心下载分享的SDK,选择自己需要集成的平台就可以

1650247969(1).png

导入这三个包里面的lib文件夹里面的jar包

1650248066(1).png

导入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库。

bea1435cf63feb17a226e995ce03024.jpg

当时也是很懵,看了一下集成的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();*/
    }
}