最近用到了友盟的社会化分享,特此记录一下,避免下次踩坑
上面图片点击设置,选择需要集成的第三方平台,我需要集成的是新浪微博、QQ和微信
点击确定后,会得到一个压缩包,压缩包包含:
其中 common 中包含组件化核心库(必须添加)
share包中包含第三方平台(也就是新浪微博平台,QQ平台和微信平台)和分享面板(分享面板如果自己有自定义的就可以不添加)
将share下main包和platforms包中lib包放到工程libs下
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。
QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中,添加:
//
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//QQ 微博需要
UMShareAPI.get(ShareActivity.this).onActivityResult(requestCode, resultCode, data);
}
<!-- sina微博 -->
<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
android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize" />
<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>
<!-- 微信 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- 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" />
<!--tencent+腾讯appid-->
<data android:scheme="tencentXXXXXXX" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<meta-data
android:name="UMENG_APPKEY"
android:value="你的友盟appkey" />
如果项目做到最后再集成友盟的话,以下权限基本上都已经添加了,可以忽略
<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"/>
如果 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 的onCreate方法中初始化
@Override
public void onCreate() {
super.onCreate();
//分享功能初始化
UMShareAPI.get(this);
//初始化时可以通过该方法设置组件化的Log是否输出,默认关闭Log输出
UMConfigure.setLogEnabled(true);
/**
* 设置日志加密
* 参数:boolean 默认为false(不加密)
*/
// UMConfigure.setEncryptEnabled(true);
UMConfigure.init(this,"友盟平台的appId"
,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"");
PlatformConfig.setWeixin("微信APPID", "微信App Secret");
PlatformConfig.setQQZone("QQ App id","QQ App key");
//新浪微博(第三个参数为回调地址) 我写的是百度地址
PlatformConfig.setSinaWeibo("新浪微博 APP Key","微博 APP Secret","http://www.baidu.com");
}
将文件夹中的签名文件放入到工程中,例如我的签名文件是debug.keystore
tips:至于签名文件在哪,一般的默认安装到C盘的 签名文件在C:\Users\Administrator.android路径下
在增加签名文件的密码:
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
}
然后在buildTypes中将这个signingConfigs配置进去(签名文件如果不加,部分平台的授权会受到影响),如下图所示:
点击了分享按钮,调用以下方法即可
以下的popWindow 是我自定义的分享面板呀
private void UMshare(SHARE_MEDIA var1) {
String webUrl = "https://www.baidu.com";
String title = "潮趣校园生活尽在猫盒APP";
String description = "为您提供触手可及的品质生活服务。";
String imageUrl = "";
//连接地址
UMWeb web = new UMWeb(webUrl);
web.setTitle(title);
//描述
web.setDescription(description);
if (TextUtils.isEmpty(imageUrl)) {
//本地缩略图
web.setThumb(new UMImage(this, R.mipmap.share));
} else {
//网络缩略图
web.setThumb(new UMImage(this, imageUrl));
}
new ShareAction(this)
.setPlatform(var1) //SHARE_MEDIA.等等
.withMedia(web)
.setCallback(new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
}
@Override
public void onResult(final SHARE_MEDIA share_media) {
showToast("分享成功!");
popWindow.dismiss();
}
@Override
public void onError(final SHARE_MEDIA share_media, final Throwable throwable) {
showToast("分享失败!");
popWindow.dismiss();
}
@Override
public void onCancel(final SHARE_MEDIA share_media) {
showToast("取消分享!");
popWindow.dismiss();
}
}).share();
}
友盟社会化分享完成,运行后会发现,只有QQ和新浪微博可以分享出去,呃。。。微信的坑,换成app的正式签名就好了。