Ios 在Swift中获取google日历事件时获取N错误域:“com.google.GTLJSONRPCErrorDomain”
我正在尝试将日历事件提取到iOS应用程序。为此,我在Google开发者控制台中创建了一个项目,并获得了客户端ID ApiKey 并安装了带有 在登录Gmail后,它会请求访问日历的权限,直到工作正常,但是,在获取显示以下错误的事件时Ios 在Swift中获取google日历事件时获取N错误域:“com.google.GTLJSONRPCErrorDomain”,ios,swift,calendar,google-calendar-api,google-authentication,Ios,Swift,Calendar,Google Calendar Api,Google Authentication,我正在尝试将日历事件提取到iOS应用程序。为此,我在Google开发者控制台中创建了一个项目,并获得了客户端ID ApiKey 并安装了带有 在登录Gmail后,它会请求访问日历的权限,直到工作正常,但是,在获取显示以下错误的事件时 error NSError domain: "com.google.GTLJSONRPCErrorDomain" - code: 401 0x0000604000646330 我的代码如下 private let scopes = [kGTLAuthScop
error NSError domain: "com.google.GTLJSONRPCErrorDomain" - code: 401 0x0000604000646330
我的代码如下
private let scopes = [kGTLAuthScopeCalendar]
private let service = GTLServiceCalendar()
private let kApiKey = "someKey"
let output = UITextView()
private let kKeychainItemName = "Google Calendar API"
private let kClientID = "SomeID"
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
if (error == nil) {
} else {
print("\(error.localizedDescription)")
}
if user != nil {
output.frame = view.bounds
output.isEditable = false
output.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 20, right: 0)
output.autoresizingMask = [.flexibleHeight, .flexibleWidth]
view.addSubview(output);
if let auth = GTMOAuth2ViewControllerTouch.authForGoogleFromKeychain(
forName: kKeychainItemName,
clientID: kClientID,
clientSecret: nil) {
service.authorizer = auth
}
print("\(user)")
service.authorizer = user.authentication.fetcherAuthorizer()
fetchEvents()
}
}
func fetchEvents() {
let query = GTLQueryCalendar.queryForEventsList(withCalendarId: "primary")
query?.maxResults = 10
query?.singleEvents = true
query?.orderBy = kGTLCalendarOrderByStartTime
service.executeQuery(
(query)!,
delegate: self,
didFinish: #selector(displayResultWithTicket(ticket:finishedWithObject:error:)))
}
// Display the start dates and event summaries in the UITextView
@objc func displayResultWithTicket(
ticket: GTLServiceTicket,
finishedWithObject response : GTLCalendarEvents,
error : NSError?) {
if let error = error {
showAlert(title: "Error", message: error.localizedDescription)
return
}
var eventString = ""
if let events = response.items(), !events.isEmpty {
for event in events as! [GTLCalendarEvent] {
print(event)
}
} else {
print("No upcoming events found.")
}
}
func showAlert(title: String, message: String) {
let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Thank You", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
GIDSignIn.sharedInstance().clientID = kClientID
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().scopes = scopes
GIDSignIn.sharedInstance().signIn()
GIDSignIn.sharedInstance().delegate = self
service.apiKey = kApiKey
}
即使我检查了几个论坛,我也没有得到任何解决方案
谁能告诉我哪里出错了
Swift-4
我不明白你为什么会犯这样的错误。
我认为您没有使用最新的播客。
参考下面的代码,这是我用来获取google日历事件的代码
豆荚:-
pod“GoogleapClientForest/Calendar”,“~>1.2.1”
pod“谷歌/登录”,“~>3.0.3”
import UIKit
import GoogleAPIClientForREST
import GoogleSignIn
class ClassForCalEvent: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate {
let eventArray = NSMutableArray()
private let scopes = [kGTLRAuthScopeCalendar]
private let service = GTLRCalendarService()
override func viewDidLoad() {
super.viewDidLoad()
// Configure Google Sign-in.
GIDSignIn.sharedInstance().delegate = self
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().scopes = scopes
GIDSignIn.sharedInstance().signIn()
}
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!,
withError error: Error!) {
if let error = error {
showAlert(title: "Authentication Error", message: error.localizedDescription)
self.service.authorizer = nil
} else {
self.service.authorizer = user.authentication.fetcherAuthorizer()
fetchEvents()
}
}
// Construct a query and get a list of upcoming events from the user calendar
func fetchEvents() {
let query = GTLRCalendarQuery_EventsList.query(withCalendarId: "primary")
query.maxResults = 10
query.timeMin = GTLRDateTime(date: Date())
query.singleEvents = true
query.orderBy = kGTLRCalendarOrderByStartTime
service.executeQuery(
query,
delegate: self,
didFinish: #selector(displayResultWithTicket(ticket:finishedWithObject:error:)))
}
// Display the start dates and event summaries in the UITextView
@objc func displayResultWithTicket(
ticket: GTLRServiceTicket,
finishedWithObject response : GTLRCalendar_Events,
error : NSError?) {
if let error = error {
showAlert(title: "Error", message: error.localizedDescription)
return
}
var outputText = ""
if let events = response.items, !events.isEmpty {
for event in events {
let start = event.start!.dateTime ?? event.start!.date!
let startString = DateFormatter.localizedString(
from: start.date,
dateStyle: .short,
timeStyle: .short)
let dataDic = ["start_Time":startString , "tag":"red", "Event_Name":event.summary!]
eventArray.add(dataDic)
outputText += "\(startString) - \(event.summary!)\n"
print("Output ", startString , event )
}
UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: eventArray), forKey: "EventArray")
UserDefaults.standard.synchronize()
} else
{
outputText = "No upcoming events found."
}
print("Output Text",outputText)
showAlert(title: "Event Sync Succesfully!", message:"")
}
那么,这些是正确的吗?Demp应用程序pod“GTMOAuth2”、“1.1.0”pod“Google/SignIn”、“3.0.3”pod“GoogleApiclientForest/Calendar”、“1.2.1”的pod和我在developer.Google控制台网站中只启用了Gmail和Calendar。好吗?我在pod安装后没有收到这样的模块“GoogleAppClient错误”,请清理您的项目,然后重试。尝试过,甚至重新安装pod。但是,同样的问题也在发生。
import UIKit
import GoogleAPIClientForREST
import GoogleSignIn
class ClassForCalEvent: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate {
let eventArray = NSMutableArray()
private let scopes = [kGTLRAuthScopeCalendar]
private let service = GTLRCalendarService()
override func viewDidLoad() {
super.viewDidLoad()
// Configure Google Sign-in.
GIDSignIn.sharedInstance().delegate = self
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().scopes = scopes
GIDSignIn.sharedInstance().signIn()
}
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!,
withError error: Error!) {
if let error = error {
showAlert(title: "Authentication Error", message: error.localizedDescription)
self.service.authorizer = nil
} else {
self.service.authorizer = user.authentication.fetcherAuthorizer()
fetchEvents()
}
}
// Construct a query and get a list of upcoming events from the user calendar
func fetchEvents() {
let query = GTLRCalendarQuery_EventsList.query(withCalendarId: "primary")
query.maxResults = 10
query.timeMin = GTLRDateTime(date: Date())
query.singleEvents = true
query.orderBy = kGTLRCalendarOrderByStartTime
service.executeQuery(
query,
delegate: self,
didFinish: #selector(displayResultWithTicket(ticket:finishedWithObject:error:)))
}
// Display the start dates and event summaries in the UITextView
@objc func displayResultWithTicket(
ticket: GTLRServiceTicket,
finishedWithObject response : GTLRCalendar_Events,
error : NSError?) {
if let error = error {
showAlert(title: "Error", message: error.localizedDescription)
return
}
var outputText = ""
if let events = response.items, !events.isEmpty {
for event in events {
let start = event.start!.dateTime ?? event.start!.date!
let startString = DateFormatter.localizedString(
from: start.date,
dateStyle: .short,
timeStyle: .short)
let dataDic = ["start_Time":startString , "tag":"red", "Event_Name":event.summary!]
eventArray.add(dataDic)
outputText += "\(startString) - \(event.summary!)\n"
print("Output ", startString , event )
}
UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: eventArray), forKey: "EventArray")
UserDefaults.standard.synchronize()
} else
{
outputText = "No upcoming events found."
}
print("Output Text",outputText)
showAlert(title: "Event Sync Succesfully!", message:"")
}