友盟分享集成教程(精简版)

之前项目中集成过多次友盟的分享,当时做完后没有写博客记录,然后现在公司的项目市场是国外主要,用到的都是Facebook分享和Android原生的系统分享,所以也用不到国内社交平台的分享集成,但是今天个人的项目里面需要用到集成友盟了,由于当时没有用博客记笔记详细记录,所以再次集成的时候很多都忘了,之前爬过的坑有的甚至重新爬了一次又,所以感觉有必要认真的做下笔记了!于是有了今天这篇博客~,哈哈

第一步:在友盟开放平台注册账号,创建应用并获取到对应的友盟的key值;

第二步:为自己的应用在常用的社交软件开放平台申请创建应用,并提交审核获取对应的appkey和secret;

第三步:从友盟平台下载对应的友盟的jar包,我这里用的都是精简版的jar包,qq,微信,微博都是用的精简版的jar包,将jar包复制到项目的libs目录下并在build.gradle文件中添加依赖;

第四步:在项目的清单文件AndroidManifest.xml文件中进行各个社交平台的活动配置和友盟key的配置

 <meta-data
            android:name="UMENG_APPKEY"
            android:value="5a7a6c3fa40fa355170002323" >
        </meta-data>

        <!--第三方分享  新浪-->
        <activity
            android:name="com.umeng.socialize.media.WBShareCallBackActivity"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:exported="false"
            android:screenOrientation="portrait" >
        </activity>
        <!--<activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"-->

        <activity
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
            android:launchMode="singleTask"
            android:name="com.sina.weibo.sdk.share.WbShareTransActivity">
            <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.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" />
                <data android:scheme="1177678592" />   <-- 填写你在腾讯应用平台申请下来的应用的appid-->
            </intent-filter>
        </activity>

        <activity
            android:name="com.umeng.qq.tencent.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"/>
        <activity android:name=".wxapi.WXEntryActivity"/>

第五步:在application类中进行初始化sdk

//注意这里的微信的secret要用签名工具生成md5值复制到这里,注意手机上装的你的应用一定是reslease版本的,否则获取到的md5值正式环境分享时会出问题,这里附上签名工具的下载地址,由于md5值是一样的,我直接用的微博的md5签名工具,这里附上下载地址:
[微博的md5签名工具下载地址](https://github.com/mobileresearch/weibo_android_sdk/blob/master/%E5%BE%AE%E5%8D%9AAndroid%E5%B9%B3%E5%8F%B0SDK%E6%96%87%E6%A1%A3V2.4.0.pdf)

        //微信开放平台申请下离的应用id和md5签名工具生成的md5值
        PlatformConfig.setWeixin("wx9b5134440f179efd", "4efdff8ea6cd8070682a3866c0f444ae");

        //从腾讯开放平台获取你申请的qq分享相关的appid和screct值
        PlatformConfig.setQQZone("11066785552", "hus3kuqIGq055qUN");
        //从微博开放平台获取你的appkey和screct值
        PlatformConfig.setSinaWeibo("1844955595", "2119f6551d01695b6555555693d575", "http://sns.whalecloud.com");

第六步:开始核心的代码部分
我将核心的分享代码封装到了工具类ShareUtil中,便于调用各处:
工具类ShareUtil.kt代码:

class SharerUtil :View.OnClickListener{
    val TAG = "SharerUtil"
    private val PERMISSIONS_STORAGE = arrayOf("android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE")
    private val REQUEST_EXTERNAL_STORAGE = 1


    var dialog: AlertDialog?= null
    var activity: Activity? = null
    var webUrl:String?= null
    var UMimgUrl:String?= null
    var title:String?= null
    var description:String?= null




    constructor (activity: Activity) {
        this.activity = activity
    }
    companion object{
        //Android原生系统分享,缺点不能自定义分享的布局
        open fun shareMore(activity: Activity,url:String){
            val textIntent = Intent(Intent.ACTION_SEND)
            textIntent.type = "text/plain"
            textIntent.putExtra(Intent.EXTRA_TEXT, url)
            activity!!.startActivity(Intent.createChooser(textIntent, "Share"))
        }
    }



    open fun showShareDialog(webUrl:String,UMimgUrl:String,title:String,description:String) {
        this.webUrl = webUrl
        this.UMimgUrl = UMimgUrl
        this.title = title
        this.description = description

        var view = LayoutInflater.from(activity).inflate(R.layout.share_public_view, null, false)
        dialog = AlertDialog.Builder(activity).setView(view).create()
        view.tv_cancle.setOnClickListener(this)
        view.ll_shareto_weicheat.setOnClickListener(this)
        view.ll_jubao_jcdetial.setOnClickListener(this)
        view.ll_shareto_weicheatRrang.setOnClickListener(this)
        view.ll_shareto_qq.setOnClickListener(this)
        view.ll_shareto_weibo.setOnClickListener(this)
        view.ll_shareto_qqspace.setOnClickListener(this)
        dialog!!.show()
        //此处设置位置窗体大小,我这里设置为了手机屏幕宽度的3/4
        dialog!!.getWindow().setLayout((ScreenUtils.getScreenWidth(activity)),RelativeLayout.LayoutParams.WRAP_CONTENT)
    }



    override fun onClick(v: View?) {
        when(v!!.id){
            R.id.tv_cancle->{
                dialog!!.dismiss()
            }
            R.id.ll_shareto_weicheat->{
                initShareType(SHARE_MEDIA.WEIXIN,webUrl,UMimgUrl,title,description)
            }
            R.id.ll_shareto_weicheatRrang->{
                initShareType(SHARE_MEDIA.WEIXIN_CIRCLE, webUrl, UMimgUrl, title, description)
            }
            R.id.ll_shareto_qq->{
                initShareType(SHARE_MEDIA.QQ,webUrl, UMimgUrl, title, description)
            }
            R.id.ll_shareto_weibo->{
                initShareType(SHARE_MEDIA.SINA,webUrl,  UMimgUrl, title, description)
            }
            R.id.ll_shareto_qqspace->{
                initShareType(SHARE_MEDIA.QZONE,webUrl, UMimgUrl, title, description)
            }
            R.id.ll_jubao_jcdetial->{
            }

        }

    }

    private fun initShareType(shareType: SHARE_MEDIA, webUrl: String?, uMimgUrl: String?, title: String?, description: String?) {
        val thumb2 = UMImage(activity, uMimgUrl!!)
        val web2 = UMWeb(webUrl)
        web2.title = title//标题
        web2.setThumb(thumb2)  //缩略图
        web2.description = description//描述

        ShareAction(activity)
                .setPlatform(shareType)//传入平台
                .withMedia(web2)
                .setCallback(object : UMShareListener {
                    override fun onStart(share_media: SHARE_MEDIA) {
                        Toast.makeText(activity, "分享开始", Toast.LENGTH_LONG).show()
                    }

                    override fun onResult(share_media: SHARE_MEDIA) {
                        Toast.makeText(activity, "成功了", Toast.LENGTH_LONG).show()
                    }

                    override fun onError(share_media: SHARE_MEDIA, throwable: Throwable) {
                        Toast.makeText(activity, "异常:"+throwable.message, Toast.LENGTH_LONG).show()
                        verifyStoragePermissions(activity!!)
                    }

                    override fun onCancel(share_media: SHARE_MEDIA) {
                        Toast.makeText(activity, "取消分享", Toast.LENGTH_LONG).show()
                    }
                })
                .share()

    }


    //qq分享需要读写sd卡权限,如果没有这个方法分享时会出现异常,实际上这个检查权限的方法应该在分享的activity初始化的生命周期方法里面进行,我在这里也写了,当分享失败的时候会再次检查申请权限
    fun verifyStoragePermissions(activity: Activity) {

        try {
            //检测是否有写的权限
            val permission = ActivityCompat.checkSelfPermission(activity,
                    "android.permission.WRITE_EXTERNAL_STORAGE")
            if (permission != PackageManager.PERMISSION_GRANTED) {
                // 没有写的权限,去申请写的权限,会弹出对话框
                ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE)
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }

    }



}

关键调用代码:

//记得在activityoncreate方法中申请检查读写sd卡的权限,否则会分享异常
 verifyStoragePermissions(activity!!)

//当点击分享的按钮后调用下面方法进行弹出分享对话框布局视图
fun share(){
   var sharerUtil: SharerUtil? =  SharerUtil(this)
   sharerUtil!!.showShareDialog("http://www.mingshiapp.top:8080/AllThingArePosible/sharePage1",
                        articleDetailBean?.info?.headerImage!!, articleDetailBean?.info?.title!!,"作者:"+ articleDetailBean?.info?.trends_autor_name!!)

}

强调一点记得在调用的activity中重写这个方法,否则会有异常出现

 // QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中,添加
     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
        super.onActivityResult(requestCode, resultCode, data)
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data)
    }

然后到这里就集成成功了,集成分享的坑有时候会遇到很多莫名其妙的,如果你也遇到了或者有不明白的地方可以在文章底部留言给我,我看到后会第一时间回复,我们可以一起探讨,交流,学习进步!

猜你喜欢

转载自blog.csdn.net/wjj1996825/article/details/80796312