in FBSDKGamingServicesKit/FBSDKGamingServicesKit/GamingImageUploader.swift [101:192]
func uploadImage(
with configuration: GamingImageUploaderConfiguration,
completion completionHandler: @escaping GamingServiceResultCompletion,
andProgressHandler progressHandler: GamingServiceProgressHandler?
) {
let errorFactory = ErrorFactory()
if AccessToken.current == nil {
completionHandler(
false,
nil,
errorFactory.error(
code: CoreError.errorAccessTokenRequired.rawValue,
userInfo: nil,
message: "A valid access token is required to upload Images",
underlyingError: nil
)
)
return
}
guard let imageData = configuration.image.pngData() else {
completionHandler(
false,
nil,
errorFactory.error(
code: CoreError.errorInvalidArgument.rawValue,
userInfo: nil,
message: "Attempting to upload a nil image",
underlyingError: nil
)
)
return
}
let connection = graphRequestConnectionFactory.createGraphRequestConnection()
let uploader = GamingImageUploader(progressHandler: progressHandler)
connection.delegate = uploader
InternalUtility.shared.registerTransientObject(connection.delegate as Any)
connection.add(
GraphRequest(
graphPath: "me/photos",
parameters: [
"caption": configuration.caption ?? "",
"picture": imageData,
],
httpMethod: .post
)
) { [weak self] graphConnection, result, error in
guard let strongSelf = self else { return }
if let graphConnectionDelegate = graphConnection?.delegate {
InternalUtility.shared.unregisterTransientObject(graphConnectionDelegate)
}
if error != nil || result == nil {
completionHandler(
false,
nil,
errorFactory.error(
code: CoreError.errorGraphRequestGraphAPI.rawValue,
userInfo: nil,
message: "Image upload failed",
underlyingError: error
)
)
return
}
let result = result as? [String: Any]
if !configuration.shouldLaunchMediaDialog {
completionHandler(true, result, nil)
return
}
let controller = strongSelf.factory.create(
serviceType: .mediaAsset,
pendingResult: result,
completion: completionHandler
)
controller.call(withArgument: result?["id"] as? String)
}
connection.start()
}