友盟接入微信、QQ、微博三方登录、分享

现如今,谁家的应用还没个第三方登录呢?不得接入个微信、QQ、微博登录吗?我做App接入登录不下于三遍了,可以说是驾轻就熟了吧。直接上手。

友盟接入官方文档

实现步骤:

1. 添加jar和res

下载友盟集成工具.jar文件,运行jar文件,选中需要接入第三方平台。

image.png

点击OK在同级文件夹下生成umeng_integratetool_result文件,将里面文件都考入项目对应目录,里面包括各平台jar包,so库,图片资源文件等。

image.png

2. 在Application类调用配置第三方平台的id和secrete
        PlatformConfig.setWeixin("wxe3946ac664570cda", "9aa49428437ed36468fb23d81e38e524");
        PlatformConfig.setQQZone("1106703728", "YZ3xnJa6BsikqlQd");
        //PlatformConfig.setSinaWeibo("39212943254", "04b48b094faeb92830c32669824ebdad", "http://sns.whalecloud.com");

初始化UMShareAPI并创建mShareAPI全局对象

@Override
public void onCreate() {
        super.onCreate();
        mShareAPI = UMShareAPI.get(this);
}
3. 微信回调类配置:在包名目录下一层创建wxapi文件夹,再创建WXEntryActivity继承WXCallbackActivity类。
image.png

WXEntryActivity为空类即可

import com.umeng.socialize.weixin.view.WXCallbackActivity;

public class WXEntryActivity extends WXCallbackActivity {

}

QQ与新浪需要在使用QQ分享或者授权的Activity中,添加:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
4. Manifest添加

添加对应权限

<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" />

配置需要的Activity

<!-- 友盟登录分享使用 -->
        <!-- 新浪微博 -->
        <activity
            android:name="com.umeng.socialize.media.WBShareCallBackActivity"
            android:configChanges="keyboardHidden|orientation"
            android:exported="false"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
        <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.sina.weibo.sdk.web.WeiboSdkWebActivity"
            android:configChanges="keyboardHidden|orientation"
            android:exported="false"
            android:windowSoftInputMode="adjustResize"></activity>
        <activity
            android:name="com.sina.weibo.sdk.share.WbShareTransActivity"
            android:launchMode="singleTask"
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
            <intent-filter>
                <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <!-- QQ -->
        <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="tencent1106720278" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <!-- 友盟登录分享配置结束 -->
5. gradle文件添加配置:

添加友盟appkey和messagesecret

        <meta-data
            android:name="UMENG_APPKEY"
            android:value="5a740def323e484a928280cf" />
        <meta-data
            android:name="UMENG_MESSAGE_SECRET"
            android:value="863ee4721150c0e84eef202df0435" />

添加正式keystore文件到项目中,并配置


image.png
    signingConfigs {
        config {
            keyAlias '12345678'
            keyPassword '12345678'
            storeFile file('keystore.jks')
            storePassword '12345678'
        }
    }
    buildTypes {
        release {
            minifyEnabled false   //是否开启代码混淆
//            shrinkResources true   //去除无用资源
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
        debug {
            signingConfig signingConfigs.config
        }
    }
6. 获取第三方登录用户信息:shareMedia平台类型包括SHARE_MEDIA.WEIXIN、SHARE_MEDIA.QQ等。
        AppContext.getShareApi().getPlatformInfo(this, shareMedia, new UMAuthListener() {
            @Override
            public void onStart(SHARE_MEDIA share_media) {}

            @Override
            public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> data) {
                String nickName = data.get("name");
                String accessToken = data.get("accessToken");
                String expiration = data.get("expiration");
                String openId = data.get("openid");
                // expiration   时间戳
                // gender  性别
                // iconurl   头像
            }

            @Override
            public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
                ToastUtil.showShortToast(getApplicationContext(),"授权失败");
            }

            @Override
            public void onCancel(SHARE_MEDIA share_media, int i) {
                ToastUtil.showShortToast(getApplicationContext(),"授权取消");
            }
        });

遍历所有map的key和value,这里获取我的微信登录信息:


image.png

第三方分享

这里以分享网页为例,网页链接是百度首页,显示图标为应用启动图标,标题为title,描述为content。分享成功会通过
UMShareListener进行回调。

    private void thirdShare(SHARE_MEDIA platform){
        String webUrl = "www.baidu.com";
        UMImage image = new UMImage(getApplicationContext(),R.mipmap.ic_launcher);//资源文件
        UMWeb umWeb = new UMWeb(webUrl,"title","content",image); //URL 标题 描述 封面图
        new ShareAction(this)
                .setPlatform(platform)//传入平台
                .withText("HiVideo")//标题
                .withMedia(umWeb)
                .setCallback(shareListener)//回调监听器
                .share();
    }

    private UMShareListener shareListener = new UMShareListener() {
        @Override
        public void onStart(SHARE_MEDIA platform) {

        }

        @Override
        public void onResult(SHARE_MEDIA platform) {
            Log.i("minfo","分享成功");
        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Log.i("minfo","分享失败");
        }

        @Override
        public void onCancel(SHARE_MEDIA platform) {
            Log.i("minfo","分享取消");
        }
    };

调用方法传入各个平台类型即可进行调用。

        thirdShare(SHARE_MEDIA.SINA);
        thirdShare(SHARE_MEDIA.WEIXIN);
        thirdShare(SHARE_MEDIA.WEIXIN_CIRCLE);
        thirdShare(SHARE_MEDIA.QQ);
        thirdShare(SHARE_MEDIA.QZONE);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。