【问题标题】:fetching data from Instagram api for android从适用于 Android 的 Instagram api 获取数据
【发布时间】:2016-02-07 11:21:15
【问题描述】:

我正在尝试开发一个简单地从 api 检索图片的 android 应用程序。我试图使用改造,但我很困惑如何使用它。我也不明白如何获取访问令牌?我需要用户登录吗?我不能简单地从 Instagram 获取与任何用户没有特别关系的图片吗?

我尝试了类似的东西

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mButton = (Button) findViewById(R.id.button);

    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Uri uri = Uri.parse("https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code"); // missing 'http://' will cause crashed
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(intent);
        }
    });

这将我带到一个登录页面,然后它提示我输入用户详细信息,然后给我某种身份验证错误。

我似乎无法理解 insta 文档

【问题讨论】:

    标签: android instagram retrofit


    【解决方案1】:

    这就是我登录时所做的:

    用户点击OK后加载web视图,然后提取代码授权:

    webView?.settings?.javaScriptEnabled = true
            webView?.loadUrl(AuthenticationPresenter.urlAuthentication())
            webView?.webViewClient = object : WebViewClient() {
                override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean {
                    if (url.contains("code=")) {
                        presenter.extractAuthorizationCode(url)
                        return true
                    }
                    return false
                }
            }
    
    fun urlAuthentication() = "https://api.instagram.com/oauth/authorize/" +
                    "?client_id=$CLIENT_ID" +
                    "&redirect_uri=$REQUEST_URL_CALLBACK" +
                    "&scope=${USER_PROFILE},${USER_MEDIA}" +
                    "&response_type=$RESPONSE_TYPE"
    

    从 URL 获取代码授权:

    override fun extractAuthorizationCode(url: String) {
            val uri: Uri = Uri.parse(url)
            val code = uri.getQueryParameter("code")
            if (code != null)
                view?.authorizationCodeSuccess(code)
            else
                view?.authorizationCodeFail()
        }
    

    获取代码授权后,应该可以得到access token

    这是一个使用 Retrofit2 的示例:

    interface AuthenticationApiHelper {
    
        @FormUrlEncoded
        @POST("/oauth/access_token")
        suspend fun getCredentials(
            @Field("code") code: String,
            @Field("client_id") client: String = CLIENT_ID,
            @Field("client_secret") secret: String = CLIENT_SECRET,
            @Field("grant_type") type: String = GRANT_TYPE,
            @Field("redirect_uri") uri: String = REQUEST_URL_CALLBACK
        ): Credentials
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 2019-11-30
      • 2013-12-15
      • 2017-06-06
      相关资源
      最近更新 更多