程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了YouTube API 3上传视频-未配置访问权限-Android大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决YouTube API 3上传视频-未配置访问权限-Android?

开发过程中遇到YouTube API 3上传视频-未配置访问权限-Android的问题如何解决?下面主要结合日常开发的经验,给出你关于YouTube API 3上传视频-未配置访问权限-Android的解决方法建议,希望对你解决YouTube API 3上传视频-未配置访问权限-Android有所启发或帮助;

@Ibrahim提供的答案对我来说几乎是正确的。我需要做的是编辑我的API配置。但是,这不是我需要编辑的“简单API访问”部分,而是单击“创建另一个客户端ID”按钮后的设置。

然后,我可以选择“已安装的应用程序”->“ AndroID”。输入我的软件包名称和SHA1,并等待15分钟后,我的应用程序按预期工作。我还设置了“简单API访问”。我不确定是否需要两者。

解决方法

我正在使用一个Android应用程序来录制视频,并允许用户使用YouTube数据API v3将其直接上传到YouTube。

我已经在Google的API控制台中设置了我的应用。在服务下,我启用了YouTube数据API
v3。在API访问下,我有一个“已安装应用程序的客户端ID”部分(包括一个客户端ID和客户端密钥)和一个“简单API访问”部分->“
Android应用程序的密钥(带有证书)”(其中包括一个API密钥)和“
Android应用程序”部分,该部分暂时留空,即允许所有Android应用程序,但我已尝试通过设置android密钥来进行尝试)。

我的代码来自很多地方,主要是:

https://developers.google.com/youtube/v3/code_samples/java#upload_a_video

https://code.google.com/p/google-api-java-client/source/browse/tasks-android-
sample/src/main/java/com/google/api/services/samples/tasks/android/
TasksSample.java?repo=样本

上载初始化确定,启动AsyncTask,但是随后我抛出IOException:

{
    "code": 403,"errors": [
        {
            "domain": "usageLimits","message": "Access Not Configured","reason": "accessnotConfigured"
        }
    ],"message": "Access Not Configured"
}

类似的SO帖子建议这与我的Google
API控制台设置有关,但我找不到任何错误。有什么建议?我想知道是否是因为我没有在任何地方提供我的客户ID或机密信息&Hellip;

谢谢。

我的代码从包含视频列表的片段中运行。相关部分是:

- 在里面

public class UploadFragment extends Fragment {

    private static GoogleAccountCredential credential;
    private static final httpTransport transport = Androidhttp.newCompatibleTransport();
    private static final JsonFactory jsonFactory = new GsonFactory();
    public YouTube youtube;
    List<String> scopes = Lists.newArrayList(YouTubeScopes.YOUTUBE_UPLOAD);
    private static String VIDEO_FILE_FORMAT = "video/*";

    static final int requEST_GOOGLE_PLAY_serviCES = 0;
    static final int requEST_AUTHORIZATION = 1;
    static final int requEST_account_PICKER = 2;

-设置凭据和YouTube

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceStatE) {
        ...
        credential = googleAccountCredential(scopes);
        youtube = new YouTube.builder(transport,jsonFactory,credential)
            .setApplicationName("MyAppName")
            .build();
        ...
    }

-单击按钮即可启动上传

    @Override void onClick(View v) {
        ...
        if (hasGooglePlayservices()) {
            uploadYouTubeVideos();

        ...
    }

-建立凭证

    /**
     * Get the credential to authorize the installed application to access user's protected data.
     *
     * @param scopes list of scopes needed to run YouTube upload.
     */
    private static GoogleAccountCredential googleAccountCredential(List<String> scopes) throws Exception {
        credential = GoogleAccountCredential.usingOAuth2(context,scopes)
            .setSELEctedAccountName(PreferenceManager.getAccountName());
        return credential;
    }

-向用户请求一个帐户

    /**
     * FirE intent to get user to choose account
     * Return to onActivityResult
     */
    private void chooseAccount() {
        startActivityForResult(credential.newChooseAccounTintent(),requEST_account_PICKER);
    }

-从用户选择和帐户返回时-/请求授权

    /**
     * Returns from chooseAccount and from request authorization
     */
    @Override
    public void onActivityResult(int requestCode,int resultCode,Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
        switch (requestCodE) {
            case requEST_AUTHORIZATION:
                if (resultCode == Activity.RESULT_OK) {
                    uploadYouTubeVideos();
                } else {
                    chooseAccount();
                }
                break;
            case requEST_account_PICKER:
                if (resultCode == Activity.RESULT_OK && data != null && data.getExtras() != null) {
                    String accountName = data.getExtras().getString(AccountManager.KEY_account_Name);
                    if (accountName != null) {
                        credential.setSELEctedAccountName(accountName);
                        PreferenceManager.setAccountName(accountName);
                        uploadYouTubeVideos();
                    }
                }
                break;
        }
    }

-根据我们拥有的信息(帐户,授权等)多次调用

    /**
     * Uploads user SELEcted video to the user's YouTube account using OAuth2
     * for authentication.
     *
     * @param videoFile file to be uploaded
     */
    public void uploadYouTubeVideos() {
        if (credential.getSELEctedAccountName() == null) {
            chooseAccount();
        } else {
            File videoFile = getVideoFile();
            Insert videoInsert = prepareUpload(videoFilE);
            new VideoUploadAsyncTask().execute(videoInsert);
        }
    }

-准备上传-将所有内容放在一起

    /**
     * Prepare upload. Just leaves execute to be run in AsyncTask.
     *
     * @param videoFile file to be uploaded
     * @return 
     */
    public Insert prepareUpload( File videoFile ) {
        try {
            // Add extra information to the video before uploading.
            Video videoObjectDefiningMetadata = new Video();

            // Set the video to public (default).
            VideoStatus status = new VideoStatus();
            status.setPrivacyStatus("public");
            videoObjectDefiningMetadata.setStatus(status);

            // We set a majority of the metadata with the VideoSnippet object.
            VideoSnippet snippet = new VideoSnippet();

            // Video file name.
            snippet.settitle(videoFile.getName());
            snippet.setDescription("Test description");

            // Set keywords.
            List<String> tags = new ArrayList<String>();
            tags.add("test");
            snippet.setTags(tags);

            // Set completed snippet to the video object.
            videoObjectDefiningMetadata.setSnippet(snippet);

            InputStreamContent mediaContent = new InputStreamContent(
                    VIDEO_FILE_FORMAT,new BufferedInputStream(new FileInputStream(videoFilE)));
            mediaContent.setLength(videoFile.length());

            /*
             * The upload command includes: 1. Information we want returned after file is successfully
             * uploaded. 2. Metadata we want associated with the uploaded video. 3. Video file itself.
             */
            YouTube.Videos.Insert videoInsert = youtube.videos()
                    .insert("snippet,statistics,status",videoObjectDefiningMetadata,mediaContent);

            // Set the upload type and add event listener.
            MediahttpUploader uploader = videoInsert.getMediahttpUploader();

            /*
             * Sets whether direct media upload is enabled or disabled. True = whole media content is
             * uploaded in a single request. false (default) = resumable media upload protocol to upload
             * in data chunks.
             */
            uploader.setDirectUploadEnabled(false);

            MediahttpUploaderProgressListener progressListener = new MediahttpUploaderProgressListener() {
                public void progressChanged(MediahttpUploader uploader) throws IOException {
                    switch (uploader.getUploadState()) {
                        case INITIATION_STARTED:
                            Log.d(tag,"Upload file: Initiation Started");
                            break;
                        case INITIATION_COMPLETE:
                            Log.d(tag,"Upload file: Initiation Completed");
                            break;
                        case MEDIA_IN_PROGRESS:
                            Log.d(tag,"Upload file: Upload in progress");
                            Log.d(tag,"Upload file: Upload percentage: " + uploader.getProgress());
                            break;
                        case MEDIA_COMPLETE:
                            Log.d(tag,"Upload file: Upload Completed!");
                            break;
                        case NOT_STARTED:
                            Log.d(tag,"Upload file: Upload Not Started!");
                            break;
                    }
                }
            };
            uploader.setProgressListener(progressListener);

            return videoInsert;
        } catch (FileNotFoundException E) {
            Log.e(tag,"File not found: " + e.getmessage());
            return null;
        } catch (IOException E) {
            Log.e(tag,"IOException: " + e.getmessage());
            return null;
        }
    }

-需要Google Play服务

    /** 
     * Pop up dialog requesTing user to download Google Play services.
     * Returns to onActivityResult
     */
    void showGooglePlayservicesAvailabilityErrorDialog(final int connectionStatusCodE) {
        getActivity().runOnUiThread(new Runnable() {
            public void run() {
                Dialog dialog = 
                        GooglePlayservicesUtil.getErrorDialog(connectionStatusCode,getActivity(),requEST_GOOGLE_PLAY_serviCES);
                dialog.show();
            }
        });
    }

-运行的AsyncTask在上载时执行

    public class VideoUploadAsyncTask extends AsyncTask<Insert,Void,Void> {
        @Override
        protected Void doInBACkground( Insert... inserts ) {
            Insert videoInsert = inserts[0];
            try {
                Video returnVideo = videoInsert.execute();
            } catch (final GooglePlayservicesAvailabilityIOException availabilityException) {
                showGooglePlayservicesAvailabilityErrorDialog(
                        availabilityException.getConnectionStatusCode());
            } catch (UserRecoverableAuthIOException userRecoverableException) {
                startActivityForResult(
                        userRecoverableException.geTintent(),UploadFragment.requEST_AUTHORIZATION);
            } catch (IOException E) {
                Log.e(tag,"IOException: " + e.getmessage());
            }
            return null;
        }
    }

}

大佬总结

以上是大佬教程为你收集整理的YouTube API 3上传视频-未配置访问权限-Android全部内容,希望文章能够帮你解决YouTube API 3上传视频-未配置访问权限-Android所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:YouTube