本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Android快速集成抖音分享
mylove136 · 3200浏览 · 发布于2019-09-12 +关注

现在大火的app,抖音肯定有姓名。19年初抖音就开始支持Android应用接入抖音分享以及登录了,目前市场上我知道的轻颜相机已经集成分享。最近有一个新需求就是集成抖音分享,集成较为简单,但是也由于疏忽遇到了小的问题。这里整体梳理集成流程供大家参考。


抖音分享开发者文档:http://open.douyin.com/platform/doc/m-1-3-2


集成准备:

  1. SDK最低支持:Android API 16 - 4.1.x版本 (这里需要升级自己项目的minSdkVersion>=16 如果满足条件请忽略)

  2. 向抖音短视频申请你的clientkey及相关权限  (这里授权登录,携带话题等需要另外申请,目前我这里只集成分享)

  3. 集成SDK分别在gradle文件中添加如下图


maven { url 'https://dl.bintray.com/aweme-open-sdk-team/public' }
 
compile 'com.bytedance.ies.ugc.aweme:open-sdk:0.0.1.1'

开始集成:

1.添加权限

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

2.初始化在Application中,初始化TikTokOpenApiFactory

String clientkey = "XXXXX"; // 修改为在开发者应用登记页面申请的clientkey
TikTokOpenApiFactory.init(new BDOpenConfig(clientkey));

3.目前抖音支持视频和图片分享这里举例视频分享

ArrayList<String> mUri = new ArrayList<>();
 mUri.add(UriUtil.convertUriToPath(activity, Uri.parse(shareBean.video_url)));
TiktokOpenApi bdOpenApi = TikTokOpenApiFactory.create(activity);
        Share.Request request = new Share.Request();
        DYVideoObject videoObject = new DYVideoObject();
        videoObject.mVideoPaths = mUri;
        DYMediaContent content = new DYMediaContent();
        content.mMediaObject = videoObject;
        request.mMediaContent = content;
        request.mState = "ss";
        request.callerLocalEntry = "xx.bdopen.BdEntryActivity";
        request.mTargetApp = DYOpenConstants.TARGET_APP.AWEME;
        bdOpenApi.share(request);

注意:

request.mTargetApp = DYOpenConstants.TARGET_APP.AWEME;    抖音文档没有明确说明,但是必须设置,否则你别想调起抖音,别问我为啥知道,都是泪啊


其次视频路径必须是绝对路径抖音提供的demo里有获取绝对路径的util代码

4.接受回调类,这里使用抖音提供demo里的方式

包名下创建bdopen.BdEntryActivity,初始化TikTokOpenApiFactory,实现BDApiEventHandler接口,在onResp方法中回调授权结果。


注:bdopen.前边的package路径需和app的包名一致,否则回调将找不到这个类,也可以选择在传分享参数时,通过request.callerLocalEntry参数来自己指定接收回调的全路径 例如request.callerLocalEntry = "xx.bdopen.BdEntryActivity";

public class BdEntryActivity extends Activity implements BDApiEventHandler {
    private static PlatformUtils.OnPlatformShareListener mOnPlatformShareListener;
    private static Activity mActivity;
    TiktokOpenApi ttOpenApi;
 
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ttOpenApi = TikTokOpenApiFactory.create(this);
        ttOpenApi.handleIntent(getIntent(), this);
    }
    
    public static void shareDouYin(Activity activity, ShareBean shareBean, PlatformUtils.OnPlatformShareListener onPlatformShareListener) {
        mActivity = activity;
        mOnPlatformShareListener = onPlatformShareListener;
        ShareDouYinUtil.getInstance().share(activity, shareBean);
    }
 
    @Override
    public void onReq(BaseReq req) {
    }
 
    @Override
    public void onResp(BaseResp resp) {
        if (resp.getType() == DYOpenConstants.ModeType.SHARE_CONTENT_TO_DY_RESP) {
            Share.Response response = (Share.Response) resp;
            if (response != null && response.errorCode == DYOpenConstants.ErrorCode.ERR_OK)
                mOnPlatformShareListener.onShareComplete(PlatformConst.PLAT_NAME_DOU_YIN);
            else
                mOnPlatformShareListener.onError();
            startActivity(new Intent(this, mActivity.getClass()));
            finish();
        }
    }
 
    @Override
    public void onErrorIntent(@Nullable Intent intent) {
        mOnPlatformShareListener.onError();
        startActivity(new Intent(this, mActivity.getClass()));
        finish();
    }
}

这里有两个需要注意的点:


  1. 收到回调处理完逻辑之后记得finish()这个页面否则你会一脸懵逼咋一片白我的布局呢,哈哈。 

  2. 如果只集成分享记得在回调分享结果外层添加if (resp.getType() ==BDOpenConstants.ModeType.SEND_AUTH_RESPONSE)

5.抖音分享对图片视频有一定限制

//视频限制

* 检测文件是否可以导入,要求如下

* 1、时长不满足,要求视频在3s-1小时内;

* 2、格式要求mp4文件,且文件支持解析

* 3、画幅尺寸 最小边 小于1100;

* 4、多图生成照片电影,暂无限制;


//图片限制

* 检测图文是否可以导入,要求如下

* 条件一:宽高都大于360

* 条件二:高宽比小于等于2.2

* 条件三:高宽比大于等于1/2.2


返回码参考:

public interface ErrCode {
    int ERR_OK = 0;      // 成功   
    int ERR_FAILED_COMMON = -1; // 通用错误类型, 一般未知的错误会走这个回调
    int ERR_USER_CANCEL = -2; // 用户手动取消,用户拒绝权限,中断流程等
    int ERR_SEND_FAIL = -3; // 发送失败
    int ERR_AUTH_DENIED = -4; // 权限错误, 第三方未获取相关分享权限或获取权限失败
    int ERR_UNSUPPORT = -5; // 文件解析过程出错或命中其它的一些限制
}


6.混淆


千万记得混淆,要不然打包你的抖音分享就无法成功。但是抖音开发者文档并没有加混淆说明,这一点很不友好。这是我自己加的,后面打包分享正常。


#抖音混淆
-keep class com.bytedance.** { *;}



相关推荐

android下vulkan与opengles纹理互通

talkchan · 1178浏览 · 2020-11-23 10:37:39
Android 使用RecyclerView实现轮播图

奔跑的男人 · 2175浏览 · 2019-05-09 17:11:13
微软发布新命令行工具 Windows Terminal

吴振华 · 869浏览 · 2019-05-09 17:15:04
Facebook 停止屏蔽部分区块链广告

· 754浏览 · 2019-05-09 17:20:08
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页