• 分享图片或链接到抖音


    目录

    前言

    一、官方文档

    二、开始配置

    第一步:向抖音短视频申请你的 clientkey 及相关权限

    第二步:集成到开发环境

    1.根目录下build.gradle引入库

    2.app moudel目录下build.gradle引入库

    3.配置抖音的软件包可见性

    使用一:Android-分享给抖音好友or群

    向抖音短视频申请你的clientkey及相关权限请到开发者应用登记页面进行申请,申请后将获得clientkey, 之后通过clientkey为应用申请相关的权限,如分享到抖音联系人/群(im.share)等;审核通过后即可使用相关的功能;

    使用二:android 分享图片支持fileprovider方式

    1. 配置



    前言

    此篇仅用来记录相关配置


    一、官方文档

    抖音开放平台抖音开放平台,致力于打造抖音开放的生态系统,将从基础能力、内容、数据、服务等层面的开放,为开发者提供高效便捷的解决方案https://open.douyin.com/platform/doc?doc=docs/develop/share/android

    二、开始配置

    SDK 最低支持:Android API 15 - 4.0.x 版本

    SDK 接入目前需要引入两个依赖包,包括opensdk-china-externalopensdk-common,为了方便,两者使用同样的版本号。当前最新版本为 0.1.9.0。

    第一步:向抖音短视频申请你的 clientkey 及相关权限

    请到开发者应用登记页面进行申请,申请后将获得 clientkey, 之后通过 clientkey 为应用申请相关的权限,如分享、授权、默认话题等;审核通过后即可使用相关的功能;

    第二步:集成到开发环境

    1.根目录下build.gradle引入库

    1. buildscript {
    2. repositories {
    3. google()
    4. jcenter()
    5. mavenCentral()
    6. maven { url "https://jitpack.io" }
    7. //抖音
    8. maven { url 'https://artifact.bytedance.com/repository/AwemeOpenSDK' }
    9. maven { url "https://maven.byted.org/repository/android_public/" }
    10. }
    11. dependencies {
    12. classpath "com.android.tools.build:gradle:7.0.2"
    13. classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21'
    14. // NOTE: Do not place your application dependencies here; they belong
    15. // in the individual module build.gradle files
    16. }
    17. }
    18. allprojects {
    19. repositories {
    20. google()
    21. jcenter()
    22. mavenCentral()
    23. maven { url "https://jitpack.io" }
    24. //抖音
    25. maven { url 'https://artifact.bytedance.com/repository/AwemeOpenSDK' }
    26. maven { url "https://maven.byted.org/repository/android_public/" }
    27. }
    28. }
    29. task clean(type: Delete) {
    30. delete rootProject.buildDir
    31. }

    2.app moudel目录下build.gradle引入库

    1. //抖音平台接入
    2. implementation 'com.bytedance.ies.ugc.aweme:opensdk-china-external:0.1.9.0'
    3. implementation 'com.bytedance.ies.ugc.aweme:opensdk-common:0.1.9.0'

    3.配置抖音的软件包可见性

    Android 11 为了加强了隐私保护策略,引入了很多变更和限制,其中软件包可见性 变更,将会导致第三方应用通过抖音开放平台的 SDK 无法正常拉起抖音,从而无法使用开放平台的全部功能,包括但不限于分享消息到抖音、通过抖音进行账号登陆等功能。

    特别需要注意的是,Android11 的该变更只会影响到升级targetSdkVersion=30的应用,未升级的应用暂不受影响。

    1. <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="你的包名">
    2. <queries>
    3. <package android:name="com.ss.android.ugc.aweme" />
    4. <package android:name="com.ss.android.ugc.aweme.lite" />
    5. queries>
    6. manifest>

    使用一:Android-分享给抖音好友or群

    向抖音短视频申请你的clientkey及相关权限请到开发者应用登记页面进行申请,申请后将获得clientkey, 之后通过clientkey为应用申请相关的权限,如分享到抖音联系人/群(im.share)等;审核通过后即可使用相关的功能;

    1. 初始化 在Application中,初始化DouYinOpenApiFactory
    1. // 修改为在开发者应用登记页面申请的clientkey
    2. DouYinOpenApiFactory.init(new DouYinOpenConfig("[Client Key]"));

        2. - Manifest中申请权限,注册接收回调activity

    1. <uses-permission android:name="android.permission.INTERNET" />
    2. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    3. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    4. //如果第三方自定义了接收回调的activity则可以跳过此步骤
    5. <activity
    6. android:name=".douyinapi.DouYinEntryActivity"
    7. android:launchMode="singleTask"
    8. android:taskAffinity="你的包名"
    9. android:exported="true">
    10. activity>

     3.分享html (注意:如果您想要分享html链接到抖音联系人,请先到官网管理中心的您应用下的im.share 权限添加分享链接进行页面链接验证,才可以成功分享。)

    1. val douyinOpenApi = DouYinOpenApiFactory.create(activity)
    2. //抖音分享html
    3. val request = ShareToContact.Request().apply {
    4. htmlObject = ContactHtmlObject().apply {
    5. html = "https://www.baidu.com/" //你的html链接(必填)
    6. discription = "百度" // 你的html描述(必填)
    7. title = “App Name” // 你的html title(必填)
    8. //thumbUrl // 你的html的封面图(远程图片) (选填,若不填,则使用开放平台官网申请时上传的图标)
    9. }
    10. }
    11. // 调起分享
    12. if (douyinOpenApi.isAppSupportShareToContacts) {
    13. douyinOpenApi.shareToContacts(request)
    14. } else {
    15. showToast(R.string.tiktok_version_not_support)
    16. }

     4.接收回调的activity

    1. /**
    2. * Description 接受返回信息
    3. * Version 1.0
    4. */
    5. public class DouYinEntryActivity extends Activity implements IApiEventHandler {
    6. DouYinOpenApi douYinOpenApi;
    7. @Override
    8. public void onCreate(@Nullable Bundle savedInstanceState) {
    9. super.onCreate(savedInstanceState);
    10. douYinOpenApi = DouYinOpenApiFactory.create(this);
    11. douYinOpenApi.handleIntent(getIntent(), this);
    12. }
    13. @Override
    14. public void onReq(BaseReq req) {
    15. }
    16. @Override
    17. public void onResp(BaseResp resp) {
    18. if (resp instanceof ShareToContact.Response) {
    19. switch (resp.errorCode) {
    20. case 20000:
    21. //TODO 分享成功
    22. break;
    23. case 20013:
    24. //TODO 取消分享
    25. break;
    26. default:
    27. //TODO 分享失败
    28. break;
    29. }
    30. finish();
    31. }
    32. }
    33. @Override
    34. public void onErrorIntent(@Nullable Intent intent) {
    35. //TODO 分享失败
    36. }
    37. }

     5.混淆

    -keep class com.bytedance.sdk.open.aweme.**

     注意,若您的应用的代码存在混淆情况,吊起抖音IM分享之后,不能拿到IM分享结果的回调,请将您接收回调的activity(DouYinEntryActivity或者您自定义的回调activity) 也加入免混淆清单

    使用二:android 分享图片支持fileprovider方式

    主要目的是适配Android11

    1. 配置

    在项目的AndroidManifest.xml添加相关配置

    1. <provider android:name="android.support.v4.content.FileProvider"
    2. android:authorities="${applicationId}.fileprovider"
    3. android:exported="false"
    4. android:grantUriPermissions="true">
    5. <meta-data
    6. android:name="android.support.FILE_PROVIDER_PATHS"
    7. android:resource="@xml/file_provider_paths" />
    8. provider>

     在res/xml目录(如果没有xml目录,则新建一个)下,添加文件file_provider_paths.xml,内容如下:

    1. <paths xmlns:android="http://schemas.android.com/apk/res/android">
    2. <external-files-path name="sharedata" path="shareData/"/>
    3. paths>

    2.使用FileProvider接口分享图片

    1. fun shareToDouYin(activity: Activity, bitmap: Bitmap) {
    2. //创建分享数据文件
    3. val pathDir = activity.getExternalFilesDir("shareData")!!.path
    4. val filePath = "$pathDir/share.jpg"
    5. //存储
    6. val saveSuccess = save(bitmap, File(filePath), Bitmap.CompressFormat.JPEG, false)
    7. if (saveSuccess) {
    8. val fileUri = getFileUri(activity.applicationContext, filePath)
    9. //分享单图/多图
    10. val douyinOpenApi = DouYinOpenApiFactory.create(activity)
    11. val request = ShareToContact.Request().apply {
    12. mMediaContent = MediaContent().apply {
    13. mMediaObject = ImageObject().apply {
    14. mImagePaths = arrayListOf(fileUri)
    15. }
    16. }
    17. }
    18. // 判断是否可以分享到联系人
    19. if (douyinOpenApi.isAppSupportShareToContacts) {
    20. douyinOpenApi.shareToContacts(request);
    21. } else {
    22. Toast.makeText(activity, "当前抖音版本不支持", Toast.LENGTH_SHORT).show()
    23. }
    24. } else {
    25. Toast.makeText(activity, "分享失败", Toast.LENGTH_SHORT).show()
    26. }
    27. }
    28. /**
    29. * Save the bitmap.
    30. *
    31. * @param src The source of bitmap.
    32. * @param file The file.
    33. * @param format The format of the image.
    34. * @param recycle True to recycle the source of bitmap, false otherwise.
    35. * @return `true`: success

      `false`: fail
    36. */
    37. fun save(src: Bitmap, file: File, format: CompressFormat, recycle: Boolean): Boolean {
    38. var os: OutputStream? = null
    39. var ret = false
    40. try {
    41. os = BufferedOutputStream(FileOutputStream(file))
    42. ret = src.compress(format, 100, os)
    43. if (recycle && !src.isRecycled) src.recycle()
    44. } catch (e: IOException) {
    45. e.printStackTrace()
    46. } finally {
    47. try {
    48. os?.close()
    49. } catch (e: IOException) {
    50. e.printStackTrace()
    51. }
    52. }
    53. return ret
    54. }
    55. fun getFileUri(context: Context, filePath: String): String {
    56. // 该filePath对应于xml/file_provider_paths里的第一行配置:,因此才可被共享
    57. val file = File(filePath)
    58. // 要与`AndroidManifest.xml`里配置的`authorities`一致
    59. val contentUri: Uri = FileProvider.getUriForFile(
    60. context,
    61. context.packageName + ".fileprovider",
    62. file
    63. )
    64. // 授权给抖音访问路径,这里填抖音包名
    65. context.grantUriPermission(
    66. "com.ss.android.ugc.aweme",
    67. contentUri,
    68. Intent.FLAG_GRANT_READ_URI_PERMISSION
    69. )
    70. // 使用contentPath作为文件路径进行分享 contentUri.toString() 即是以"content://"开头的用于共享的路径
    71. return contentUri.toString()
    72. }

    总结

    抖音的文档还是很清楚的,最后清单文件完整是这个样子的

    1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    2. xmlns:tools="http://schemas.android.com/tools"
    3. package="你的包名">
    4. <uses-permission android:name="android.permission.INTERNET" />
    5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    6. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    7. <queries>
    8. <package android:name="com.ss.android.ugc.aweme" />
    9. <package android:name="com.ss.android.ugc.aweme.lite" />
    10. queries>
    11. <application>
    12. <activity
    13. android:name=".douyinapi.DouYinEntryActivity"
    14. android:exported="true"
    15. android:launchMode="singleTask"
    16. android:taskAffinity="${applicationId}" />
    17. <provider android:name="android.support.v4.content.FileProvider"
    18. android:authorities="${applicationId}.fileprovider"
    19. android:exported="false"
    20. android:grantUriPermissions="true">
    21. <meta-data
    22. android:name="android.support.FILE_PROVIDER_PATHS"
    23. android:resource="@xml/file_provider_paths" />
    24. provider>
    25. application>
    26. manifest>

  • 相关阅读:
    分类和static
    02- pytorch 实现 RNN
    selenium教程 —— css定位
    Dubbo入门---搭建一个最简单的Demo框架
    C++代码转C#代码,制作DLL,以供python调用
    如何搭建高效安全的eBay测评环境:步骤与要点解析
    java毕业设计宠物互助领售平台mybatis+源码+调试部署+系统+数据库+lw
    项目启动 | 盘古信息助力鼎阳科技开启智能制造升级新征程
    Adobe推出AI视频超分辨率工具VideoGigaGAN
    【C++】模版-初阶
  • 原文地址:https://blog.csdn.net/Mr_theSun/article/details/125887682