Активность добавления GetStream не выполнена из-за 403 - PullRequest
1 голос
/ 04 апреля 2019

Пробуя GetStream for Swift, я не могу добавить действие.

class MyActivity : Activity {}

...

let client = Client(apiKey: <MyApiKey>, appId: <MyApiKey>, token: <Token>)
let ericFeed = client.flatFeed(feedSlug: "user", userId: "eric")
let activity = MyActivity(actor: "eric", verb: "waves", object: "picture:10", foreignId: "picture:10")
ericFeed.add(activity) { result in
        print("!result!")
        print(result)
    }

token генерируется на стороне сервера, имеет форму eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZXJpYyJ9.AAAAAAAAAAAAAAAAA-AAAAAAAAAAAAAAAA-AAAAAAAA и:

  1. client.currentUserId возвращает eric (Итак, токен правильный?)
  2. Обратный вызов ericFeed.add(activity) не называется
  3. В журнале панели инструментов моего приложения я вижупопытка добавления действия как неудачная, с ошибкой 403

Я пробовал разные идентификаторы (с разными токенами), actor: "eric" и actor: "user:eric".Что могло пойти не так?

Код для создания токена (php-сервер):

$userId = "eric";
$client = new GetStream\Stream\Client(<MyApiKey>, <MyAppSecret>);
$userToken = $client->createUserSessionToken($userId);

И я получаю журналы на моей панели:

log1


log2

1 Ответ

2 голосов
/ 04 апреля 2019

Есть пара вещей, о которых нужно помнить. Прежде всего, вероятно, ваш клиент был освобожден после завершения запроса, и поэтому обратный вызов не был вызван, но журналы могли показать вам, что запрос был выполнен. Я предлагаю вам использовать экземпляр общего клиента, и это будет легко использовать. Для настройки общего клиента вам нужно написать это:

Client.config = .init(apiKey: "<MyApiKey>", appId: "<MyApiKey>", token: "<Token>")

Подробнее о настройке клиента на вики-странице .

Второе важное, что вы должны создать / обновить своего пользователя Stream. Со стороны сервера вы получаете свой токен с Stream userId и можете запросить пользователя Stream. Самый простой способ - вызвать Client.shared.create(user:) там, где пользователь будет создан / обновлен. Итак, это все еще часть настройки Stream Client:

Client.shared.create(user: GetStream.User(id: Client.shared.currentUserId!)) { result in
    // Update the client with the current user.
    Client.shared.currentUser = try? result.get()
    // Do all your requests from here. Reload feeds and etc.
}

Больше информации в документах .

Я предлагаю вам создавать каналы только с параметром feedSlug, а поток userId будет взят из токена. Но это было бы необязательно, потому что currentUserId является необязательным. Например:

let ericFeed = Client.shared.flatFeed(feedSlug: "user")
ericFeed?.add(activity)

А для ваших действий клиенты Stream всегда должны использовать текущего пользователя Stream в качестве актера. Итак, нам нужно обновить определение вашего MyActivity.

Наконец, вот ваш код, который должен работать:

// Define your activity.
class MyActivity: EnrichedActivity<GetStream.User, String, DefaultReaction> {
// ...
}

// Setup Stream Client.
Client.config = .init(apiKey: <MyApiKey>, appId: <MyApiKey>, token: <Token>)

// Setup the current user.
Client.shared.getCurrentUser {
    let ericFeed = Client.shared.flatFeed(feedSlug: "user")
    let activity = MyActivity(actor: Client.shared.currentUser!, verb: "waves", object: "picture:10", foreignId: "picture:10")
    ericFeed?.add(activity) { result in
        print("!result!")
        print(result)
    }
}
...