张萌&韩墨羽——Ument_Share集成

Ument_Share集成

U-Share集成

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
适用范围
该文档适用于Android组件化分享SDK6.9.0及以上版本。

更新说明
如果您想进行SDK升级操作,请根据如下情况选择合适的升级方式

如果您使用的是6.3之前的版本,建议根据集成文档重新进行集成。
如果您使用的是6.3之后的版本,只需要根据限免的升级建议,将6.3以后的变动合并到您的代码中即可。例如您的当前版本是6.4.5,那么请参照6.4.5更新至最新版的更新说明进行更新。
6.4.5接口变动
新浪不再需要WBShareActivity,只需在AndroidManifest中配置:

 <activity
            android:name="com.umeng.socialize.media.WBShareCallBackActivity"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:launchMode="singleTask"
            android:exported="false"
            android:screenOrientation="portrait" >
        </activity>
 <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
                  android:configChanges="keyboardHidden|orientation"
                  android:exported="false"
                  android:windowSoftInputMode="adjustResize"
            >
        </activity>
        <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>

6.5Jar更新
使用6.5.0的用户需要替换所有jar,同时增加一个新的jar:umeng-common-vx.x.x.jar,这是一个Common包,使用友盟push或统计都会有这个包,保留一个即可。

6.7.0更新
微信配置不再区分精简版或完整版,统一使用com.umeng.socialize.weixin.view.WXCallbackActivityQQ配置不再区分精简版或完整版,AndroidManifest统一配置

 <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="tencent100424468" />
            </intent-filter>
    </activity>
    <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"/>

6.8.0更新
新浪配置统一修改为:

 <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"
              android:configChanges="keyboardHidden|orientation"
              android:exported="false"
              android:windowSoftInputMode="adjustResize"
    >
    </activity>
    <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>

同时去掉原有的WBShareActivity.java

6.9.0更新
jar包名称修改由以前的SocialSDK_xxx.jar统一改为umeng-share-xxx.jar

QQ兼顾Android 8.0,将配置修改为:

 <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="tencent100424468" />
        </intent-filter>
        </activity>
        <activity
        android:name="com.tencent.connect.common.AssistActivity"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:configChanges="orientation|keyboardHidden|screenSize"/>

微信兼顾8.0:

<activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

集成准备
获取Appkey
集成【友盟+】SDK之前,您首先需要到 【友盟+】官网注册并且添加新应用,获得Appkey。

特别提醒 :我们建议开发者在注册账号时使用企业邮箱,避免使用个人邮箱注册,防止由于个人离职带来的问题,建议使用的账号形式:umeng@企业域名、apps@企业域名、dev@企业域名。

center

常见问题FAQ
Q :应用的安卓版和iOS版能否共用一个appkey

A :不同平台的应用禁止使用相同的Appkey,需要分开注册。

Q :注册应用时,提示应用名称已存在;

A :【友盟+】后台的应用名与实际应用名和包名无关,建议命名为应用名+平台(iOS/Android)。

快速集成
快速集成包含自动集成与手动集成两种方式,开发者可以根据自身情况选择一种集成方式即可

手动集成
如果使用了自动集成的开发者,不用再进行手动集成的配置,请跳到权限添加

获取SDK
下载SDK操作流程

下载内容

导入jar和res
将main文件夹以及platform(选择你想使用的平台即可)文件下,对应的资源文件和jar放入你的工程

image | center

添加回调Activity

微信
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。

image | center

支付宝

与微信相似,支付宝需要在包名目录下创建apshare文件夹,然后建立一个ShareEntryActivity的类,继承ShareCallbackActivity。

钉钉

与微信相似,钉钉需要在包名目录下创建ddshare文件夹,然后建立一个DDShareActivity的类,DingCallBack。

QQ与新浪

QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中,添加:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}

注意onActivityResult不可在fragment中实现,如果在fragment中调用登录或分享,需要在fragment依赖的Activity中实现

配置Android Manifest XML
sdk中需要的Activity
新浪:

  <activity
        android:name="com.umeng.socialize.media.WBShareCallBackActivity"
        android:configChanges="keyboardHidden|orientation"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:exported="false"
        >
    </activity>
    <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
              android:configChanges="keyboardHidden|orientation"
              android:exported="false"
              android:windowSoftInputMode="adjustResize"
    >
    </activity>
    <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>

微信:

 <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

支付宝:

钉钉:

  <activity
        android:name=".ddshare.DingCallBack"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:exported="true"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />

qq(请注意将我们的qq appkey替换成您自己的qq appkey):

 <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="tencent100424468" />
    </intent-filter>
    </activity>
    <activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:configChanges="orientation|keyboardHidden|screenSize"/>

分享编辑页(只有豆瓣,人人,腾讯微博,领英,twitter需要):

<activity
          android:name="com.umeng.socialize.editorpage.ShareActivity"
          android:theme="@android:style/Theme.NoTitleBar"
          android:excludeFromRecents="true"
          />

其他平台的配置请参照附录其他平台配置。

权限添加
请在AndroidManifest中添加如下权限

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

如果需要使用QQ纯图分享或避免其它平台纯图分享的时候图片不被压缩,可以增加以下权限:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Android6.0权限适配
请查看你的build.gradle文件,如果 targetSdkVersion小于或等于22,可以忽略这一步,如果大于或等于23,需要做权限的动态申请:

if(Build.VERSION.SDK_INT>=23){
                  String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};
                  ActivityCompat.requestPermissions(this,mPermissionList,123);
              }

其中123是requestcode,可以根据这个code判断,用户是否同意了授权。如果没有同意,可以根据回调进行相应处理:

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
}

初始化设置
初始化需要在您的Application中调用我们的初始化接口:

@Override
    public void onCreate() {
        super.onCreate();
        UMConfigure.init(this,"5a12384aa40fa3551f0001d1"
                ,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0
    }

更多了解初始化接口可以参照文档接下来需要设置各个平台的appkey:

  PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
    //豆瓣RENREN平台目前只能在服务器端配置
    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");
    PlatformConfig.setYnote("9c82bf470cba7bd2f1819b0ee26f86c6ce670e9b");

该设置需要在Application中进行设置。

签名配置
签名的概念将文件夹中的签名文件放入到工程中,例如我的签名文件是debug.keystore

image | center

然后增加签名文件的密码:

signingConfigs {
    debug {
        storeFile file('debug.keystore')
        storePassword "android"
        keyAlias "androiddebugkey"
        keyPassword "android"
    }
}

然后在buildTypes中将这个signingConfigs配置进去,如下图所示:

image | center

签名文件如果不加,部分平台的授权会受到影响。

使用分包功能的注意事项
部分用户可能会由于方法数限制问题使用了multiDexEnabled true对于这部分用户,需要正确配置application否则可能会出现NoClassDefFoundError具体配置可以参照MultiDex教学

混淆设置

-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**
-keep public class javax.**
-keep public class android.webkit.**
-dontwarn android.support.v4.**
-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep class com.facebook.**
-keep class com.facebook.** { *; }
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-keep class com.umeng.socialize.handler.**
-keep class com.umeng.socialize.handler.*
-keep class com.umeng.weixin.handler.**
-keep class com.umeng.weixin.handler.*
-keep class com.umeng.qq.handler.**
-keep class com.umeng.qq.handler.*
-keep class UMMoreHandler{*;}
-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}
-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
-keep class com.tencent.mm.sdk.** {
   *;
}
-keep class com.tencent.mm.opensdk.** {
   *;
}
-keep class com.tencent.wxop.** {
   *;
}
-keep class com.tencent.mm.sdk.** {
   *;
}
-keep class com.twitter.** { *; }
-keep class com.tencent.** {*;}
-dontwarn com.tencent.**
-keep class com.kakao.** {*;}
-dontwarn com.kakao.**
-keep public class com.umeng.com.umeng.soexample.R$*{
    public static final int *;
}
-keep public class com.linkedin.android.mobilesdk.R$*{
    public static final int *;
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class com.tencent.open.TDialog$*
-keep class com.tencent.open.TDialog$* {*;}
-keep class com.tencent.open.PKDialog
-keep class com.tencent.open.PKDialog {*;}
-keep class com.tencent.open.PKDialog$*
-keep class com.tencent.open.PKDialog$* {*;}
-keep class com.umeng.socialize.impl.ImageImpl {*;}
-keep class com.sina.** {*;}
-dontwarn com.sina.**
-keep class  com.alipay.share.sdk.** {
   *;
}
-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}
-keep class com.linkedin.** { *; }
-keep class com.android.dingtalk.share.ddsharemodule.** { *; }
-keepattributes Signature

U-Share基础功能
分享
友盟分享分为两种形式:

使用分享面板的分享,用户可以调用我们的打开分享面板的方法,点击分享面板的对应平台进行分享。

不使用分享面板的分享,用户可以自己写分享按钮,或者触发事件,然后调用我们的分享方法,进行分享。

简而言之,直接分享就是在用户自己的界面组件中插入分享行为,分享面板是打开我们写好的一个界面组件,根据点击事件进行分享。

分享(带面板)
打开分享面板的代码如下:

new ShareAction(MainActivity.this).withText("hello").setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)
.setCallback(umShareListener).open();

关于分享面板的更多功能可以参照分享面板自定义。

分享(不带面板)
分享可以通过如下代码实现:

new ShareAction(MainActivity.this)
.setPlatform(SHARE_MEDIA.QQ)//传入平台
.withText("hello")//分享内容
.setCallback(umShareListener)//回调监听器
.share();

其中umShareListener为回调监听,构建如下:

 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.makeText(ShareDetailActivity.this,"成功                                        了",Toast.LENGTH_LONG).show();
        }
        /**
         * @descrption 分享失败的回调
         * @param platform 平台类型
         * @param t 错误原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Toast.makeText(ShareDetailActivity.this,"失败"+t.getMessage(),Toast.LENGTH_LONG).show();
        }
        /**
         * @descrption 分享取消的回调
         * @param platform 平台类型
         */
        @Override
        public void onCancel(SHARE_MEDIA platform) {
            Toast.makeText(ShareDetailActivity.this,"取消了",Toast.LENGTH_LONG).show();
        }
    };

分享的消息类型
对于分享内容可以有如下设置

文本
纯文本分享如下:

new ShareAction(ShareActivity.this).withText("hello").withMedia(image).share();

图片
在使用ShareAction的时候,调用withMedia可以设置一个UMImage(图片分享),UMImage的构建有如下几种形式

UMImage image = new UMImage(ShareActivity.this, "imageurl");//网络图片
UMImage image = new UMImage(ShareActivity.this, file);//本地文件
UMImage image = new UMImage(ShareActivity.this, R.drawable.xxx);//资源文件
UMImage image = new UMImage(ShareActivity.this, bitmap);//bitmap文件
UMImage image = new UMImage(ShareActivity.this, byte[]);//字节流

推荐使用网络图片和资源文件的方式,平台兼容性更高。对于部分平台,分享的图片需要设置缩略图,缩略图的设置规则为:

UMImage thumb =  new UMImage(this, R.drawable.thumb);
image.setThumb(thumb);

用户设置的图片大小最好不要超过250k,缩略图不要超过18k,如果超过太多(最好不要分享1M以上的图片,压缩效率会很低),图片会被压缩。用户可以设置压缩的方式:

image.compressStyle = UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,适合普通很大的图
image.compressStyle = UMImage.CompressStyle.QUALITY;//质量压缩,适合长图的分享

压缩格式设置
image.compressFormat = Bitmap.CompressFormat.PNG;//用户分享透明背景的图片可以设置这种方式,但是qq好友,微信朋友圈,不支持透明背景图片,会变成黑色
创建好UMImage之后调用分享即可,如下所示:

new ShareAction(ShareActivity.this).withText("hello").withMedia(image).share();

多图分享
现在支持多图分享的平台有两个,一个是新浪微博一个是QQ空间,都是最多上传9张图片,新浪微博超过9张不会上传,QQ空间超过九张会上传QQ空间相册。

  new ShareAction(ShareDetailActivity.this).withMedias(imagelocal,imagelocal,imagelocall)
                        .setPlatform(share_media)
                        .withText("hello")
                        .setCallback(shareListener).share();

注意上传多图需要带文字描述(WithText)

链接
分享链接可以使用UMWeb进行分享:

UMWeb  web = new UMWeb(Defaultcontent.url);
        web.setTitle("This is music title");//标题
        web.setThumb(thumb);  //缩略图
        web.setDescription("my description");//描述

然后调用将这个参数设置到ShareAction中:

new ShareAction(ShareActivity.this)
    .withMedia(web)
    .share();

视频
视频只能使用网络视频:

UMVideo video = new UMVideo(videourl);
video.setTitle("This is music title");//视频的标题
video.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//视频的缩略图
video.setDescription("my description");//视频的描述

建立好之后可以进行分享:

new ShareAction(ShareActivity.this).withText("hello").withMedia(video).share();

音乐
音乐只能使用网络音乐:

UMusic music = new UMusic(musicurl);//音乐的播放链接
music.setTitle("This is music title");//音乐的标题
music.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//音乐的缩略图
music.setDescription("my description");//音乐的描述
music.setmTargetUrl(Defaultcontent.url);//音乐的跳转链接

建立好之后可以进行分享:

new ShareAction(ShareActivity.this).withMedia(music).share();

特别说明:播放链接是指在微信qq分享音乐,是可以在当前聊天界面播放的,要求这个musicurl(播放链接)必须要以.mp3等音乐格式结尾,跳转链接是指点击linkcard之后进行跳转的链接。

GIF
目前只有微信好友分享支持Emoji表情,其他平台暂不支持

UMEmoji emoji = new UMEmoji(this,"http://img5.imgtn.bdimg.com/it/u=2749190246,3857616763&fm=21&gp=0.jpg");
emoji.setThumb(new UMImage(this, R.drawable.thumb));
new ShareAction(ShareActivity.this)
.withMedia(emoji).share();

微信小程序
目前只有微信好友支持小程序分享,朋友圈,收藏及其他平台暂不支持:

UMMin umMin = new UMMin(Defaultcontent.url);
//兼容低版本的网页链接
umMin.setThumb(imagelocal);
// 小程序消息封面图片
umMin.setTitle(Defaultcontent.title);
// 小程序消息title
umMin.setDescription(Defaultcontent.text);
// 小程序消息描述
umMin.setPath("pages/page10007/xxxxxx");
//小程序页面路径
umMin.setUserName("gh_xxxxxxxxxxxx");
// 小程序原始id,在微信平台查询
new ShareAction(ShareDetailActivity.this)
.withMedia(umMin)
.setPlatform(share_media)
.setCallback(shareListener).share();

第三方登录
第三方登录包含两种使用场景:

获取用户资料的授权接口,使用该接口可以获取该三方平台返回的所有资料(包括姓名,性别,头像等)目前支持第三方登录的平台包括:

国内平台(微信、新浪微博、QQ、豆瓣、人人)

国外平台(Facebook、Twitter、linkedIn、kakao、VKontakte、Dropbox)

这里推荐直接使用第一种方式实现,因为本质上三方登录最终都需要拉取三方平台的用户资料,从这点来说,直接调用SDK和通过后台服务器请求,安全性是一样的。

获取用户资料
获取用户资料可以使用如下接口:

mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);

其中umAuthListener为授权回调,构建如下:

UMAuthListener authListener = new UMAuthListener() {
        /**
         * @desc 授权开始的回调
         * @param platform 平台名称
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {
        }
        /**
         * @desc 授权成功的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         * @param data 用户资料返回
         */
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
            Toast.makeText(mContext, "成功了", Toast.LENGTH_LONG).show();
       }
        /**
         * @desc 授权失败的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         * @param t 错误原因
         */
        @Override
       public void onError(SHARE_MEDIA platform, int action, Throwable t) {
           Toast.makeText(mContext, "失败:" + t.getMessage(),                                     Toast.LENGTH_LONG).show();
        }
        /**
         * @desc 授权取消的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         */
        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
        }
    };

登录成功后,第三方平台会将用户资料传回, 全部会在Map data中返回 ,由于各个平台对于用户资料的标识不同,因此为了便于开发者使用,我们将一些常用的字段做了统一封装,开发者可以直接获取,不再需要对不同平台的不同字段名做转换,这里列出我们封装的字段及含义。

U-Share高级功能

删除授权
对于退出登录,想要删除授权的用户可以使用如下接口:

UMShareAPI.get(mContext).deleteOauth(Activity, Platform, authListener);

其中第一个参数为Context,第二个参数为平台,第三个参数为删除授权的回调。

分享按钮自定义
为分享面板添加一个自定义按钮:

new ShareAction(ShareMenuActivity.this)
.setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)//分享平台
.addButton("umeng_sharebutton_custom","umeng_sharebutton_custom","info_icon_1","info_icon_1")// 自定义按钮
.setShareboardclickCallback(shareBoardlistener)//面板点击监听器
.open();

addButton
下面对addButton进行一下解释:

第一个参数(umeng_sharebutton_custom)和第二个参数(umeng_sharebutton_custom)

第一个参数是显示的名字,第二个参数是平台名称,用法如下:在string文件中设置:

<string name="umeng_sharebutton_custom">自定义分享按钮</string>

然后将名字umeng_sharebutton_custom当做参数传入。

第三个参数(info_icon_1)和第四个参数(info_icon_1):

第三个参数是按钮图标的图片名字,第四个按钮是置灰情况下按钮图标的图片名字,例如,你在drawable文件夹下有个图片叫做info_icon_1.png,想用该图片做按钮图标,可以将info_icon_1作为参数传入

分享面板回调监听
该监听器的目的是监听分享面板的点击事件:

private ShareBoardlistener shareBoardlistener = new  ShareBoardlistener() {
    @Override
    public void onclick(SnsPlatform snsPlatform,SHARE_MEDIA share_media) {
        if (share_media==null){
        //根据key来区分自定义按钮的类型,并进行对应的操作
            if (snsPlatform.mKeyword.equals("umeng_sharebutton_custom")){
                Toast.makeText(ShareActivity.this,"add button                                            success",Toast.LENGTH_LONG).show();
            }
        }
        else {//社交平台的分享行为
            new ShareAction(ShareActivity.this)
            .setPlatform(share_media)
            .setCallback(umShareListener)
            .withText("多平台分享")
            .share();
        }
    }
};

分享编辑页自定义
分享编辑页只能在人人,豆瓣,twitter,领英中使用,该编辑页的自定义只支持umeng_socialize_share.xml中的配置,具体组件对应如下:

分享面板自定义
关于分享面板,开发者可以根据喜好,对背景颜色,显示位置,字体颜色等进行配置,配置需要使用ShareBoardConfig类,ShareBoardConfig类的使用方式如下:

ShareBoardConfig config = new ShareBoardConfig();//新建ShareBoardConfig
config.setShareboardPostion(ShareBoardConfig.SHAREBOARD_POSITION_CENTER);//设置位置
config.setMenuItemBackgroundShape(ShareBoardConfig.BG_SHAPE_CIRCULAR);
config.setCancelButtonVisibility(true);
shareAction.open(config);//传入分享面板中

具体配置方式如下:

设置分享面板title文本内容

public ShareBoardConfig setTitleText(String title)

设置分享面板title文本颜色

public ShareBoardConfig setTitleTextColor(int color)

color的int值(不是color的资源id)

设置title是否显示
visibility(true为显示,false为隐藏)

public ShareBoardConfig setTitleVisibility(boolean visibility)

设置item文字的字体颜色
color的int值(不是color的资源id)

ShareBoardConfig setMenuItemTextColor(int color)

设置item图标按下效果颜色
color的int值(不是color的资源id)

ShareBoardConfig setMenuItemIconPressedColor(int color)

设置item背景颜色
normalColor背景色

color的int值(不是color的资源id)

public ShareBoardConfig setMenuItemBackgroundColor(int normalColor)

设置item背景颜色
normalColor背景色

pressedColor按下时色值

color的int值(不是color的资源id)

public ShareBoardConfig setMenuItemBackgroundColor(int normalColor, int pressedColor)

设置item背景形状
shape 背景形状的type,可选值:

ShareBoardConfig.BG_SHAPE_NONE(无背景)
ShareBoardConfig.BG_SHAPE_CIRCULAR(圆形)
ShareBoardConfig.BG_SHAPE_ROUNDED_SQUARE(圆角方形)

public ShareBoardConfig setMenuItemBackgroundShape(int shape)

设置item背景形状
shape 背景形状的type,可选值:

ShareBoardConfig.BG_SHAPE_NONE(无背景)
ShareBoardConfig.BG_SHAPE_CIRCULAR(圆形)
ShareBoardConfig.BG_SHAPE_ROUNDED_SQUARE(圆角方形)
angle 圆角角度

ShareBoardConfig setMenuItemBackgroundShape(int shape, int angle)

设置指示器的颜色
normalColor未选中的指示器颜色

color的int值(不是color的资源id)

ShareBoardConfig setIndicatorColor(int normalColor)

设置指示器的颜色
normalColor未选中的指示器颜色

selectedColor当前页面指示器的颜色

color的int值(不是color的资源id)

ShareBoardConfig setIndicatorColor(int normalColor, int selectedColor)

设置指示器的显示状态

ShareBoardConfig setIndicatorVisibility(boolean visibility)

设置取消按钮的背景色
normalColor背景色

color的int值(不是color的资源id)

ShareBoardConfig setCancelButtonBackground(int normalColor)

设置取消按钮的背景色
normalColor背景色

pressedColor按下时色值

color的int值(不是color的资源id)

ShareBoardConfig setCancelButtonBackground(int normalColor, int pressedColor)

设置取消按钮文本内容

ShareBoardConfig setCancelButtonText(String text)

设置取消按钮文本字体颜色
color字体颜色

color的int值(不是color的资源id)

ShareBoardConfig setCancelButtonTextColor(int color)

设置取消按钮是否显示
visibility(true为显示,false为隐藏)

ShareBoardConfig setCancelButtonVisibility(boolean visibility)

设置分享面板的背景颜色
color背景颜色

color的int值(不是color的资源id)

ShareBoardConfig setShareboardBackgroundColor(int color)

设置分享面板的位置
position 位置,可选值:

ShareBoardConfig.SHAREBOARD_POSITION_CENTER(居中显示)
ShareBoardConfig.HAREBOARD_POSITION_BOTTOM(底部显示)
ShareBoardConfig setShareboardPostion(int position)

设置分享面板消失监听
分享面板的关闭监听可以通过这种方式设定:

config.setOnDismissListener(new PopupWindow.OnDismissListener() {
     @Override
     public void onDismiss() {
     }               
});

内存泄漏解决方案
在使用分享或者授权的Activity中,重写onDestory()方法:

@Override
protected void onDestroy() {
        super.onDestroy();
        UMShareAPI.get(this).release();
}

判断客户端安装
使用如下接口

mShareAPI.isInstall(this, SHARE_MEDIA.WEIXIN)

设置每次登录拉取确认界面

UMShareConfig config = new UMShareConfig();
config.isNeedAuthOnGetUserInfo(true);
UMShareAPI.get(InfoDetailActivity.this).setShareConfig(config);

目前SDK默认设置为在Token有效期内登录不进行二次授权,如果有需要每次登录都弹出授权页面,便于切换账号的开发者可以添加上述代码

水印开启
在6.2之后的版本之后,开发者可以调用我们的方法添加水印。需要注意的是,控制添加水印图片的大小,防止OOM首先使用水印功能,需要额外的umeng_social_tool.jar,不使用水印功能,可以不用添加。然后调用方法,进行添加:

UMImageMark umImageMark = new UMImageMark();
umImageMark.setGravity(Gravity.BOTTOM | Gravity.RIGHT);
umImageMark.setMarkBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.umeng_socialize_twitter));
umImageMark.setAlpha(xxxx)//设置透明度
umImageMark.setMargins(left,top,right,bottom)//设置边距

然后将构建好的umImageMark放入要分享的UMImage中即可:

imagelocal = new UMImage(this,R.drawable.logo,umImageMark);

需要注意的是本地文件和网络链接的图片形式,不支持添加水印。

智慧校园建设是当前高校关注的焦点之一。本文将从智慧校园建设的问题与对策、水平评价、第三方企业代理、国内研究综述和技术标准等方面进行综合分析。 首先,文献[6]针对高校智慧校园建设问题进行了研究。从智慧校园建设的现状和存在的问题出发,提出了相应的对策。例如,加强对智慧校园建设的投入、完善智慧校园建设的相关规定等。 其次,文献[7]则从智慧校园建设水平评价出发,提出了评价指标和方法,并对评价结果进行了解读。该文献为高校智慧校园建设提供了一定的参考依据。 此外,文献[8]则提出了第三方企业代理智慧校园建设、评价与改进策略。该方案可以有效地提高智慧校园建设效率和质量,避免了高校在建设过程中可能遇到的困难。 同时,文献[9]则对国内智慧校园研究综述进行了总结和反思。该文献指出,虽然国内对智慧校园建设进行了一定的研究,但是仍然存在很多问题需要解决,例如如何保证智慧校园中的数据安全和隐私保护等。 最后,文献[10]则从技术标准的角度探讨了智慧校园建设的相关问题。该文献指出,智慧校园建设需要遵循相应的技术标准,才能保证智慧校园的正常运行。 综合以上五篇文献可以看出,智慧校园建设是当前高校关注的重要领域。虽然各高校在智慧校园建设方面已经有所建设,但是仍然存在很多问题需要解决。例如,如何保证数据的安全和隐私的保护等。在未来的发展中,除了需要加强对智慧校园建设的投入之外,还需要加强对智慧校园建设中所面临的问题的研究与解决。同时,在智慧校园建设过程中,需要遵循相应的技术标准,以保证智慧校园的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值