carrotquest / ios-sdk

Conversational platform for business. iOS sdk.
3 stars 1 forks source link

Ошибка после авторизации #7

Closed voragomod closed 3 years ago

voragomod commented 3 years ago

Добрый день, после авторизации пользователя

Carrot.shared.auth

блок с ошибкой выкидывает: CarrotLib.UIRepresentableError error 0.

Alond commented 3 years ago

@voragomod Привет! А в консоль что-нибудь выводится?

voragomod commented 3 years ago

@Alond добрый день, Moya_Logger: [05/10/2020, 14:30] Response Body: {"meta": {"error": "NotAuthenticated", "error_message": "\u0423\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b.", "status": 401}, "data": {}}

voragomod commented 3 years ago

А также Moya_Logger: [05/10/2020, 14:30] Response: <NSHTTPURLResponse: 0x28186a260> { URL: https://api-panel.carrotquest.io/v1/auth/userappauth?auth_token=&id_as_string=1 } { Status Code: 401, Headers { "Content-Length" = ( 284 ); "Content-Type" = ( "application/json" ); Date = ( "Mon, 05 Oct 2020 11:30:39 GMT" ); Server = ( nginx ); Vary = ( Origin ); allow = ( "POST, OPTIONS" ); } }

Alond commented 3 years ago

@voragomod, а метод Carrot.shared.setup перед Carrot.shared.auth вызываете?

voragomod commented 3 years ago

@Alond Я его вызываю в didFinishLaunchingWithOptions после авторизации вызываю только auth

Пробовал после авторизации вызвать logout() потом setup потом auth, как в aндройд доках, не работало, и задваивались пользователи

voragomod commented 3 years ago

@Alond Попробовал и в комлетишен блоке сетапа авторизацию вызывать, всегда почти получаю ошибку: The operation couldn’t be completed. (CarrotLib.UIRepresentableError error 0.)

В чем ее природа хоть?

Alond commented 3 years ago

@voragomod токен авторизации либо не приходит, либо не успевает сохраниться

voragomod commented 3 years ago

@Alond а что с этим можно сделать? Мы хотим выпускаться на днях и у нас интеграция с carrot, просто после ошибку перестают сыпаться ивенты

Alond commented 3 years ago

@voragomod сделайте только Carrot.shared.setup и пришлите все логи

voragomod commented 3 years ago

@Alond Там много логов, что именно вам нужно?

2020-10-06 21:18:56.224: setup -> subscribed 2020-10-06 21:18:56.233: setup -> Event next(()) 2020-10-06 21:18:56.234: setup -> Event completed 2020-10-06 21:18:56.234: setup -> isDisposed

Moya_Logger: [06/10/2020, 21:18] Request: https://api-panel.carrotquest.io/v1/connect?auth_token=&id_as_string=1 Moya_Logger: [06/10/2020, 21:18] Request Headers: ["Accept-Encoding": "br;q=1.0, gzip;q=0.9, deflate;q=0.8", "User-Agent": " QA/3.4.0 (; build:129; iOS 12.2.0) Alamofire/5.2.2", "Accept-Language": "ru-RU;q=1.0, en-US;q=0.9", "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"] Moya_Logger: [06/10/2020, 21:18] Request Body: api_key=&browser=iOS%20sdk%201.0.33&device=iPhone6s&device_type=phone&include_auto_events=0&include_js_scripts=0&include_push_domain=0&os=iOS%2012.2&start_session=1&start_session_random_id=&token_type=usersdkios Moya_Logger: [06/10/2020, 21:18] HTTP Request Method: POST

Moya_Logger: [06/10/2020, 21:18] Response: <NSHTTPURLResponse: 0x283aa8d20> { URL: https://api-panel.carrotquest.io/v1/connect?auth_token=&id_as_string=1 } { Status Code: 200, Headers { "Content-Encoding" = ( gzip ); "Content-Type" = ( "application/json" ); Date = ( "Tue, 06 Oct 2020 18:18:57 GMT" ); Server = ( nginx ); Vary = ( Origin ); allow = ( "OPTIONS, GET, POST" ); } } Moya_Logger: [06/10/2020, 21:18] Response Body: {"meta": {"status": 200}, "data": {"auth_token": "usersdkios.", "user": {"id": "754138685473034020", "last_admin": {"type": "default_admin", "name": "\u2024ru", "avatar": "https://files.carrotquest.io/avatars/default-v3.png"}, "conversations_unread": [], "has_email": false, "has_phone": false, "has_conversations": false, "is_banned": false, "country": "Russia"}, "app": {"active": true, "id": "36618", "name": "\u2024ru", "interval_until_work_time": 702, "settings": {"track_emails": true, "track_leave_site_attempt": true, "locale": "ru-ru", "created": 1594645723, "messenger_collapsed_color": "3a3a3a", "messenger_name": "\u2024ru", "messenger_avatar": "default-v3.png", "messenger_avatar_big": null, "messenger_position": "right_bottom", "messenger_collapsed_text": "\u042f \u0442\u0443\u0442, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e", "messenger_welcome_message": "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438\u043b\u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u043e\u0442\u0437\u044b\u0432\u043e\u043c. \u041e\u0431\u044b\u0447\u043d\u043e \u043c\u044b \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u043c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0430 \u0438\u043b\u0438 \u0434\u0432\u0443\u0445 (\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445)", "messenger_show_kb_link_in_welcome_message": false, "messenger_offline_message": "\u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0432\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c", "messenger_online_message": "\u041c\u044b \u0442\u0443\u0442 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u043e\u043c\u043e\u0447\u044c", "messenger_show_powered_by": true, "messenger_mode": "visible", "messenger_hide_collapsed": false, "messenger_reply_file": true, "messenger_vote": false, "js_code": "function getText(node) {\r\n\tvar text = [...node.childNodes].find(child => child.nodeType === Node.TEXT_NODE);\r\n\treturn text && text.textContent.trim();\r\n};\r\n\r\nvar name = null;\r\nvar img = null;\r\nvar amount = null;\r\nvar url = null;\r\n//window.onload = function() {\r\n document.addEventListener(\"mousedown\", function(e) {\r\n var btnPromo = e.target.closest(\".input-container button\");\r\n if (btnPromo) {\r\n carrotquest.track(\"\u0412\u0432\u0435\u043b \u043f\u0440\u043e\u043c\u043e\u043a\u043e\u0434\", {\r\n \"\u041f\u0440\u043e\u043c\u043e\u043a\u043e\u0434\": document.querySelector(\".input-container input\").value\r\n });\r\n }\r\n var btnAddtoCartFromCatalog = e.target.closest(\".item .add-to-cart\");\r\n if (btnAddtoCartFromCatalog) {\r\n var parent = e.target.closest(\".item\");\r\n name = parent.querySelector(\".title-link\").textContent.trim();\r\n img = parent.querySelector(\".dish-img\").src;\r\n amount = parseInt(parent.querySelector(\".current-price\").textContent.match(/\d+/g)[0]);\r\n url = parent.querySelector(\".title-link\").href;\r\n carrotquest.track('$cart_added', {\r\n '$name': name,\r\n '$url': url,\r\n '$amount': amount,\r\n '$img': img\r\n });\r\n carrotquest.identify([\r\n {op: \"union\", key: \"$cart_items\", value: name},\r\n {op: \"add\", key: \"$cart_amount\", value: amount}\r\n ]);\r\n }\r\n var btnAddtoCartFromPage = e.target.closest(\"fb-modal .add-to-cart, fb-product-page .product .add-to-cart\");\r\n if (btnAddtoCartFromPage) {\r\n var parent = e.target.closest(\"fb-modal, fb-product-page .product\");\r\n name = parent.querySelector(\".title-link\").textContent.trim();\r\n img = location.origin + parent.querySelector(\".product-img\").srcset.split(', ')[0].replace(/\s./g, \"\");\r\n amount = parseInt(getText(document.querySelector(\"fb-modal .add-to-cart .button .text, fb-product-page .product .add-to-cart .button .text\")).replace(/\D/g, ''));\r\n url = parent.querySelector(\".title-link\").href;\r\n carrotquest.track('$cart_added', {\r\n '$name': name,\r\n '$url': url,\r\n '$amount': amount,\r\n '$img': img\r\n });\r\n carrotquest.identify([\r\n {op: \"union\", key: \"$cart_items\", value: name},\r\n {op: \"add\", key: \"$cart_amount\", value: amount}\r\n ]);\r\n };\r\n if (e.target.matches('.totals button.green, .totals button.green ')) {\r\n if (location.pathname.indexOf('cart')>-1 && localStorage['orderStarted']!='true') {\r\n carrotquest.track('$order_started');\r\n localStorage['orderStarted'] = true;\r\n };\r\n };\r\n });\r\n carrotquest.currentLink = '';\r\n var checkURL = setInterval(function() {\r\n if (location.href != carrotquest.currentLink) {\r\n carrotquest.currentLink = location.href;\r\n checkCart();\r\n order();\r\n };\r\n }, 1000);\r\n//}\r\n\r\nfunction order() {\r\n var reg = /\/order\/\d*\//g;\r\n if (reg.test(location.pathname)) {\r\n if (localStorage['orderStarted'] == \"true\") {\r\n carrotquest.track('$order_completed', {\r\n '$order_amount': localStorage['lastAmount']\r\n });\r\n carrotquest.identify([\r\n {op: \"delete\", key: \"$cart_items\", value: 0},\r\n {op: \"delete\", key: \"$viewed_products\", value: 0},\r\n {op: \"delete\", key: \"$cart_amount\", value: 0},\r\n {op: \"add\", key: \"$revenue\", value: localStorage['lastAmount']},\r\n {op: \"add\", key: \"$orders_count\", value: 1},\r\n {op: \"update_or_create\", key: \"$last_payment\", value: localStorage['lastAmount']}\r\n ]);\r\n localStorage['orderStarted'] = false;\r\n localStorage.removeItem('lastAmount');\r\n };\r\n }\r\n}\r\n\r\nfunction checkCart() {\r\n if (location.pathname === \"/cart/\" || location.pathname === \"/cart\") {\r\n \r\n document.querySelectorAll(\".step\").forEach(function(item, index) {\r\n if ((item.classList.contains(\"active\")) && index === 0) {\r\n get_items();\r\n //\u0421\u043e\u0431\u044b\u0442\u0438\u0435 \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043a\u043e\u0440\u0437\u0438\u043d\u0443\r\n carrotquest.track('$cart_viewed');\r\n }\r\n if ((item.classList.contains(\"active\") || item.classList.contains(\"passed\")) && index === 1) {\r\n //\r\n }\r\n })\r\n }\r\n}\r\n\r\n//\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435\r\nfunction get_items() {\r\n //\u0417\u0430\u043f\u0438\u0441\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435\r\n var items = document.querySelectorAll('.item .title');\r\n var m = [];\r\n //\u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0442\u043e\u0432\u0430\u0440\u044b \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0432\u0430\u0440\u043e\u0432\r\n carrotquest.identify([{op: \"delete\", key: \"$cart_items\", value: 0}]);\r\n if (items.length > 0) {\r\n items.forEach(function(item) {\r\n item = item.textContent.replace(/\s\s/g,'').replace(/\t/g,'');\r\n m.push({op: \"union\", key: \"$cart_items\", value: item });\r\n });\r\n setTimeout(function() {\r\n carrotquest.identify(m);\r\n }, 200);\r\n }\r\n \r\n //\u0421\u0443\u043c\u043c\u0430 \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0435\r\n carrotquest.identify([{op: \"update_or_create\", key: \"$cart_amount\", value: parseInt(document.querySelector('.totals-container .value .new').textContent.replace(/\D/g, ''))}]);\r\n localStorage['lastAmount'] = parseInt(document.querySelector('.totals-container .value .new').textContent.replace(/\D/g, ''));\r\n};\r\n\r\ndocument.addEventListener('click', function(e) {\r\n if (e.target.matches('.create-order button:not([disabled])')) {\r\n carrotquest.track('\u041a\u043b\u0438\u043a \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0430\u0437\u0430')\r\n };\r\n});\r\n\r\ndocument.addEventListener('change', function(e) {\r\nif (e.target.matches('.input-phone')) {\r\ncarrotquest.identify([{op: 'update_or_create', key: '$phone', value: document.querySelector('.input-phone').value}])\r\n};\r\n});", "messenger_show_offline_message": true, "messenger_show_allow_cookies": false, "messenger_allow_cookies_policy": null, "messenger_show_confirm_subscription": false, "messenger_confirm_subscription_policy": null, "messenger_confirm_subscription_with_checkbox": false, "double_opt_in": false, "double_opt_in_logo": "https://files.carrotquest.io/double-opt-in-logo/default.png", "messenger_icon_vk_show": false, "messenger_icon_vk_text": "", "messenger_icon_viber_show": false, "messenger_icon_viber_text": "", "messenger_icon_facebook_show": false, "messenger_icon_facebook_text": "", "messenger_icon_telegram_show": false, "messenger_icon_telegram_text": "", "messenger_sound_popup": true, "messenger_sound_part": true, "track_phones": false, "messenger_indent": {"vertical": 25, "horizontal": 25}, "messenger_collapsed_animations": {"smile": true, "winking_smile": true, "vertical_funnel": true, "horizontal_funnel": true}, "messenger_pattern": "default", "messenger_mobile_indent": {"vertical": 25, "horizontal": 25}, "messenger_theme": "default"}, "status_operators": "offline", "admins": [{"id": "82668", "name": "Dmitriy", "avatar": "https://files.carrotquest.io/avatars/1594647344436-vg5eemt7.jpeg", "type": "admin"}]}, "device_guid": "fbf5161f-e99c-404d-b67c-4e59d7ccaeac", "connect_timestamp": 1602008336, "realtime_services": {"transport": "nginx-push-stream", "channels": ["user_merge_finished.36618.754138685473034020", "users_removed.36618.754138685473034020", "user_ban.36618.754138685473034020", "ping", "run_script.36618.754138685473034020", "app_online_changed.36618", "conversation_reply_changed.36618.754138685473034020", "user_merge_failed.36618.754138685473034020", "conversation_notify.36618.754138685473034020", "conversation_typing.36618.754138685473034020", "conversation.36618.754138685473034020", "conversation_reply.36618.754138685473034020", "conversation_read.36618.754138685473034020", "user_merge_started.36618.754138685473034020"], "hosts": ["realtime-services-chat.carrotquest.app"]}}}

21:18:57+0300 | DEBUG | Carrot success start

Moya_Logger: [06/10/2020, 21:18] Request: https://api-panel.carrotquest.io/v1/users/753857615313767897/setpresence?auth_token=user.**&id_as_string=1 Moya_Logger: [06/10/2020, 21:18] Request Headers: ["User-Agent": " QA/3.4.0 (.Qa; build:129; iOS 12.2.0) Alamofire/5.2.2", "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", "Accept-Language": "ru-RU;q=1.0, en-US;q=0.9", "Accept-Encoding": "br;q=1.0, gzip;q=0.9, deflate;q=0.8"]

Alond commented 3 years ago

@voragomod по логам вроде бы все хорошо, доступ к проекту можете дать? или создать новый где повторяется ошибка?

voragomod commented 3 years ago

@Alond Выслал инвайт

Alond commented 3 years ago

@voragomod Привет! У меня все хорошо authTest3 Carrot Success auth

  1. Прописал ключи
  2. Прописал скрипт в Build Phases
  3. Build clean
x2web commented 3 years ago

+1 Непрерывная ошибка Carrotquest SDK user auth error: Не удалось завершить операцию. (CarrotLib.UIRepresentableError, ошибка 0)

x2web commented 3 years ago

Der Vorgang konnte nicht abgeschlossen werden. (CarrotLib.UIRepresentableError-Fehler 0.)

Alond commented 3 years ago

@x2web Похоже, что контекст в котором был запущен процесс авторизации больше не существует. Нужен пример как вы реализуете авторизацию?

x2web commented 3 years ago
Carrot.shared.auth(
    withUserId: String(userId),
    withUserAuthKey: XXAnalytics.carrotQuestUserAuthKey,
    successHandler: {
    },
    errorHandler: { error in               
})

Приходит ответ Moya_Logger: [10/29/20, 2:28 PM] Response Body: {"meta": {"status": 200}, "data": {"result": "not_need"}}

После запроса

Moya_Logger: [10/29/20, 2:28 PM] Request: https://api-panel.carrotquest.io/v1/auth/userappauth?auth_token=user.693902329002331812.ЗДЕСЬ-ЕСТЬ-АПИ-КЛЮЧ-Я-ЕГО-ВЫРЕЗАЛ.3583a578d167d2f43789be7c85fb476f030ab19c5a0b5ba7&id_as_string=1
Moya_Logger: [10/29/20, 2:28 PM] Request Headers: ["Accept-Language": "en;q=1.0", "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", "Accept-Encoding": "br;q=1.0, gzip;q=0.9, deflate;q=0.8", "User-Agent": "Freedom24/3.12.1 (com.tradernet.freedom24app; build:393; iOS 12.4.0) Alamofire/5.3.0"]
Moya_Logger: [10/29/20, 2:28 PM] Request Body: hash=186e842bdc47d922e9c6f2fa43bd90e5cb84efab18029fad3786027b64a07f39&user_id=1182938
Moya_Logger: [10/29/20, 2:28 PM] HTTP Request Method: POST
Moya_Logger: [10/29/20, 2:28 PM] Response: <NSHTTPURLResponse: 0x283b30a40> { URL: https://api-panel.carrotquest.io/v1/auth/userappauth?auth_token=user.693902329002331812.ЗДЕСЬ-ЕСТЬ-АПИ-КЛЮЧ-Я-ЕГО-ВЫРЕЗАЛ.3583a578d167d2f43789be7c85fb476f030ab19c5a0b5ba7&id_as_string=1 } { Status Code: 200, Headers {
    "Content-Length" =     (
        57
    );
    "Content-Type" =     (
        "application/json"
    );
    Date =     (
        "Thu, 29 Oct 2020 12:28:03 GMT"
    );
    Server =     (
        nginx
    );
    Vary =     (
        Origin
    );
    allow =     (
        "OPTIONS, POST"
    );
} }
x2web commented 3 years ago

Понял, что видимо это не ошибка. Просто указанный user_id уже присвоен.
Потому что так String(userId) + String.random(length: 10), все работает ок