現在関わっている案件で、zendeskという顧客とサービス側とのコミュニケーションをチケット方式やチャットなどで簡易に利用できるサービスを導入しています。
webアプリ側では既に実装されており、今回iOS版のアプリにも導入する事となり画像のアタッチメントの方法が少し分かりずらかったので共有致します。
因みに、デベロッパー向けのドキュメントには下記の使用例が記載されています。
var request = ZDKCreateRequest()
request.attachments = UploadResponse
request.subject = "My printer is on fire!"
request.requestDescription = "The smoke is very colorful."
provider.createRequest(request) { result, error in
}
うん、まずUploadResponseって何ですか?という感じですね。
もう少し内容を見ていくと下記の記述が、、、
In the following example, replace UploadResponse with a ZDKUploadResponse retrieved with the uploadAttachment method of the ZDKUploadProvider.
リンク先に飛んで、ふむ、メソッド定義されてますね、、、
- (void) uploadAttachment:(NSData *)attachment |
---|
withFilename:(NSString *)filename |
andContentType:(NSString*)contentType |
callback:(ZDKUploadCallback)callback; |
で?
と取り急ぎ対応を依頼されてる身としては、いくつか言いたい事はありましたが、
とりあえずはコールバックあるから、ZDKUploadProviderをインスタンス化してメソッド使ってみようかなと色々試行錯誤して成功した方法を記載致します。
ここからが具体的な設定方法
事前にAppDelegate.swiftに下記の初期設定を行なって下さい。
// zendesk SDK 初期化設定
ZDKConfig.instance().initialize(
withAppId: /*zendesk管理画面で設定されているWITHAPPID*/,
zendeskUrl: /*zendesk管理画面で設定されているZENDESKURL*/,
clientId: /*zendesk管理画面で設定されているCLIENTID*/)
let identity = ZDKAnonymousIdentity()
ZDKConfig.instance().userIdentity = identity
ViewController内でフォームは別途用意して下さい。
※ここでは送信ボタンイベント内を想定しております。
また、画像をライブラリから添付する方法等も割愛させて頂きます。
// コールバックで返却されたオブジェクトを格納
var attachments: [AnyObject]! = []
// プロバイダ作成
let provider = ZDKRequestProvider()
// リクエストを作成
var request = ZDKCreateRequest()
// 添付ファイルのアップロードに使用
let zdkUploader = ZDKUploadProvider()
let attach = <引数などで渡されたイメージ> as? UIImage
// ここでは、ユーザー名_日付という添付画像名を想定
let imageName = String("\(name + "_" + Date())")
zdkUploader.uploadAttachment(UIImageJPEGRepresentation(attach!, 0.5), withFilename: imageName, andContentType: "image/jpeg") { (response, error) -> Void in
if error == nil {
self.attachments.append(response!)
}
request.subject = "タイトル"
request.requestDescription = "本文"
if self.attachments != nil { request.attachments = self.attachments! } //添付ファイルをセット
provider.createRequest(request) { result, error in
if error == nil {
print("送信完了しました。")
} else {
print("送信に失敗しました。")
}
}
}
SDKは便利なサービスですが、特殊な使い方だったりドキュメントを素直に追っても中々分かりずらかったりしますね。
勿論、自身の精進も必要ですが、、
ニッチな内容なので汎用性は無いですが、もし本記事が参考になった方がいれば幸いでございます。