Android快速集成抖音分享

現在大火的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.** { *;}

大概集成流程就是這樣,歡迎有問題共同探討。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章