RSHARE 这个 Demo 中支持: 微信、QQ、新浪微博、Facebook、GooglePlus(Google +)、Twitter、WhatsApp、Line、Tumblr、Instagram、Pinterest 11 个 Social 平台.
❤️🧡💛💚💙💜🖤 详细设计、注意事项 ❤️🧡💛💚💙💜🖤
分享需要注册平台, 腾讯开发者主页, SDK 下载, QQ SDK 目前不支持 compile 集成, Android API 调用说明文档.
a. 手动添加 SDK 到 libs
文件夹, 并:
b. 在 AndroidManifest.xml 的 <application>
节点下增加:
<activity
android:name="com.tencent.tauth.AuthActivity"
android:noHistory="true"
android:launchMode="singleTask" >
<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="tencentYOURAPPID" />
</intent-filter>
</activity>
c. 添加以下权限:
<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" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
a. 内部初始化 SDK
private lateinit var mTencent : Tencent
mTencent = Tencent.createInstance(appId, context)
b. 分享
内部:
private var mMainHandlerLock = Any()
internal val mainHandler : Handler = Handler()
get() {
if (field == null) {
synchronized(mMainHandlerLock) {
if (field == null) {
field = Handler(Looper.getMainLooper())
}
}
}
return field
}
调用:
mainHandler.post(
Runnable {
kotlin.run {
/// ...
}
)
网页分享:
RQqManager.instance.shareWebpage(context, webpageUrl, title, description, thumbImageUrl, callback)
图片分享:
RQqManager.instance.shareImage(context, targetImage, callback)
音频链分享:
RQqManager.instance.shareMusic(context, audioStreamUrl, musicWebpageUrl, title, description, thumbImageUrl, callback)
应用分享:
RQqManager.instance.shareApp(context, appUrl, title, description, thumbImageUrl, callback)
分享网页到空间:
RQqManager.instance.shareWebpageToZone(context, webpageUrl, title, description, imageUrlList, callback)
分享图片到空间:
RQqManager.instance.publishImagesToZone(context, targetImages, description, callback)
分享本地视频到空间:
RQqManager.instance.publishVideoToZone(context, localVideoUrl, description, callback)
分享需要注册平台, 微信开放平台, SDK 下载, 微信 SDK 支持 compile 集成, 分享 & 收藏 API 调用说明.
a.
在 Application 级 build.gradle
中配置:
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
或者
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
前者包括统计功能.
b. 添加以下权限:
<uses-permission android:name="android.permission.INTERNET"/>
<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"/>
c. 当需要在分享完毕后接受微信的传值需要在你的包名相应目录下新建一个 wxapi 目录,并在该 wxapi 目录下新增一个 WXEntryActivity
类,该类继承自 Activity
, 在 AndroidManifest.xml 的 <application>
节点下增加:
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
/>
a. 内部初始化 SDK
val mIWXApi = WXAPIFactory.createWXAPI(context, appId)
mIWXApi.registerApp(appId)
b. 分享
文字分享:
RWechatManager.instance.shareText(context, description, scene, callback)
图片分享:
RWechatManager.instance.shareImage(context, targetImage, scene, callback)
网页分享:
RWechatManager.instance.shareWebpage(context, webpageUrl, title, description, thumbImage, scene, callback)
视频链分享: 实质就是网页的分享, 在此不作代码示例.
音频链分享:
RWechatManager.instance.shareMusic(context, audioStreamUrl, title, description, thumbImage, musicWebapgeUrl, scene, callback)
小程序分享:
RWechatManager.instance.shareMiniProgram(context, userName, path, MINIPROGRAM_TYPE, webpageUrl,title, description, thumbImage, scene, callback)
文件分享:
RWechatManager.instance.shareFile(context, localFileUrl, title, thumbImage, scene, callback)
分享需要注册平台, 新浪开放平台, SDK 下载, 新浪 SDK 支持 compile 集成, Android 接口调用文档.
a.
在 Project 级 build.gradle
中配置:
allprojects {
repositories {
google()
jcenter()
maven { url "https://dl.bintray.com/thelasterstar/maven/" }
}
}
在 Application 级 build.gradle
中配置:
dependencies {
compile 'com.sina.weibo.sdk:core:4.3.0:openDefaultRelease@aar'
}
a. 内部初始化 SDK
WbSdk.install(context, AuthInfo(context, key, redirectUrl, scope))
val handler = WbShareHandler(context as Activity)
handler.registerApp()
b. 分享
文字分享:
RSinaWeiboManager.instance.shareText(context, text, callback)
图片分享:
RSinaWeiboManager.instance.sharePhoto(context, targetImages, description, isToStory(true or false), callback)
本地视频分享:
RSinaWeiboManager.instance.shareLocalVideo(context, localVideoUrl, description, isToStory(true or false), callback)
网页分享:
RSinaWeiboManager.instance.shareWebpage(context, webpageUrl, title, description, thumbImage,callback)
分享需要注册平台, Facebook 开发者主页, Facebook SDK 支持 compile 集成, 分享接口调用说明.
a.
在 Project 级 build.gradle
中配置:
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
}
在 Application 级 build.gradle
中配置:
dependencies {
implementation 'com.facebook.android:facebook-share:4.34.0'
}
b. 在 AndroidManifest.xml 的 <application>
节点下增加:
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
<provider android:authorities="com.facebook.app.FacebookContentProviderYOURAPPID"
android:name="com.facebook.FacebookContentProvider"
android:exported="true" />
<activity android:name="com.facebook.CustomTabActivity"
android:exported="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="fbYOURAPPID" />
</intent-filter>
</activity>
a. 内部初始化 SDK
Facebook 分享在配置 AndroidManifest.xml 后无需代码代码初始化.
b. 分享
网页分享:
RFacebookManager.instance.shareWebpage(context, webpageUrl, description, hashTag, mode, callback)
图片分享:
RFacebookManager.instance.sharePhoto(context, targetImages)
本地视频分享:
RFacebookManager.instance.shareLocalVideo(context, localVideoUrl)
c. 获取散列
RFacebookManager
提供了获取散列的方法.
分享需要注册平台, Twitter 开发者主页, 注册应用主页, Twitter SDK 支持 compile 集成, 分享接口调用说明.
a. 在 Project 级 build.gradle
中配置:
allprojects {
repositories {
google()
jcenter()
}
}
在 Application 级 build.gradle
中配置:
dependencies {
implementation 'com.twitter.sdk.android:tweet-composer:3.1.1'
implementation 'com.twitter.sdk.android:twitter-core:3.1.1'
}
a. 内部初始化 SDK
val config = TwitterConfig.Builder(context)
.logger(DefaultLogger(Log.DEBUG))
.twitterAuthConfig(TwitterAuthConfig(key, secret))
.debug(true)
.build()
Twitter.initialize(config)
b. 授权 Twitter 客户端 登录(授权监听接口以及 callback):
internal typealias RTwitterAuthCallback = ((state : Int) -> Unit)
判断是否登录过:
RTwitterAuthHelper.instance.hasLogged
登录授权:
RTwitterAuthHelper.instance.authorizeTwitter(context) { state ->
when (state) {
1 -> {
// ...
}
0 -> {
// ...
}
}
}
c. 分享
RTwitterManager.instance.share(context, webpageUrl, description, targetImage, hashTag, mode, callback)
分享无需注册平台无需 SDK, Instagram 开发者主页, 构建 Intent 方式分享.
分享
图片分享:
RInstagramManager.instance.shareImage(context, targetImage)
本地视频分享:
RInstagramManager.instance.shareVideo(context, localVideoUrl)
分享需要注册平台, Tumblr 开发者主页, 注册应用主页, Tumblr SDK 支持 compile 集成, 分享接口调用说明.
a. 此 Demo 中是手动集成的 6.1.0 版本的 SDK.
a. 内部初始化 SDK
FlurryAgent.setLogEnabled(true);
FlurryAgent.init(context, flurryKey);
TumblrShare.setOAuthConfig(key, secret);
b. 分享
文字分享:
RTumblrManager.instance.shareText(context, description, title, webpageUrl, callback)
图片链接分享:
RTumblrManager.instance.shareImage(context, targetImageUrl, description, webpageUrl, callback )
Android 端无需集成 SDK, 仅通过 Intent 方式就可以分享, 但是 iOS 需要.
b. 分享
图片链接分享:
RPinterestManager.instance.shareImage(context, targetImageUrl)
无需集成 SDK, 仅通过 Intent 方式就可以分享.
b. 分享
文字分享:
RLineManager.instance.share(context, text)
图片分享:
RLineManager.instance.share(context, targetImage)
分享无需注册平台.
Android 端无需集成 SDK, 仅通过 Intent 方式就可以分享, 但是 iOS 需要.
b. 分享
图文分享:
RWhatsAppManager.instance.share(context, targetImage, description)
需要注册平台, Google Plus 开发者主页 , 创建流程.
需要 Google Service 的支持, 在 Application 级 build.gradle
中配置:
dependencies {
implementation 'com.google.android.gms:play-services-plus:15.0.1'
}
分享网页:
RGooglePlusManager.instance.share(context, webpageUrl, description)
- RShareManger: 主分享 Manager, 子平台 Manager 的初始化、分享、应用跳转和一些其他操作都在此进行;
- RImageContent、RVideoContent、RTextContent、RWebpageContent 为四种对应分享内容模型.
构建分享模型
以 RImageContent
为例:
Java:
RImageContent content = new RImageContent.Builder(targetImage, targetImageUrl)
// ...
.build();
Kotlin:
val content : RImageContent = RImageContent().apply {
// ...
}
分享:
以分享 RImageContent
为例:
Java:
RShareManager.getInstance().shareImage(context, content, channel, new RShareListener() {
@Override
public void onComplete(RSharePlatform.Platform platform) {
// ...
}
@Override
public void onFail(RSharePlatform.Platform platform, String errorInfo) {
// ...
}
@Override
public void onCancel(RSharePlatform.Platform platform) {
// ...
}
});
Kotlin:
RShareManager.instance.shareImage(context, content, channel) { platform, state, errorInfo ->
// ...
}