我正在尝试使用 Chrome 自定义选项卡将 Fitbit 与我的应用程序连接。但我收到以下错误。
java.lang.NoSuchMethodError: 类 Landroid/support/v4/app/ActivityCompat 中没有静态方法 startActivity(Landroid/app/Activity;Landroid/content/Intent;Landroid/os/Bundle;)V; 或其超类(“android.support.v4.app.ActivityCompat”的声明出现在 /data/data/com.life.myApp.app/files/instant-run/dex/slice-com.android.support-support -compat-25.0.1_a32c44837a06d33159cc113605aa7f1cb8d56675-classes.dex) 在 android.support.customtabs.CustomTabsIntent.launchUrl(CustomTabsIntent.java:200) 在 com.life.myApp.app.ThirdPartyLibrary.TrackersDevies.FitBitTrack er.LoginFitTrackers.onActivityCreated(LoginFitTrackers.java :208)在android.app.Fragment.performActivityCreated(Fragment.java:2289)在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1008)在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1164)在android .app.BackStackRecord.run(BackStackRecord.java:793) 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1557) 在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:488) 在 android.os.Handler .handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread. java:7223) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit。主要(ZygoteInit.java:1120)
这是我的 gradle 文件
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
android {
compileSdkVersion 24
buildToolsVersion '24.0.1'
dexOptions {
javaMaxHeapSize "4g"
incremental = true;
}
defaultConfig …Run Code Online (Sandbox Code Playgroud) 我一直在使用Fitbit Python包来分析我的数据.当我查看我的运动数据时,它似乎运作得很好:
fitbit_stats = authd_client._COLLECTION_RESOURCE('activities', date='2015-09-16')
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试获取心率数据时,它会运行,但不会返回除0以外的任何内容:
fitbit_stats = authd_client._COLLECTION_RESOURCE('heart', date='2015-09-16')
print fitbit_stats
Run Code Online (Sandbox Code Playgroud)
{'heart':[],'average':[{'tracker':'Resting Heart Rate','heartRate':0},{'tracker':'Normal Heart Rate','heartRate':0},{ 'tracker':'发挥心率','heartRate':0}]}
有谁知道我为什么不在这里返回任何数据?
我已将 Fitbit 与我的 Android 应用程序集成。我在使用 Chrome 浏览器连接 Fitbit 时没有遇到任何挑战,但当我尝试将其连接到 Firefox 或默认互联网浏览器时,它不起作用。
以下是我正在使用的意图过滤器:
<activity
android:name=".MyActivity"
android:launchMode="singleTop"
android:resizeableActivity="false"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<!-- FitBit intent filter to get call back data for Authentication API -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="myfitbit"/>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
请建议。
我正在使用 chrome 自定义选项卡从自定义选项卡的重定向中获取 oAuth 连接请求,我在应用程序中成功重定向。唯一的问题是 chrome 自定义选项卡在重定向时不会关闭,留在堆栈中。
在自定义选项卡中启动 url 的代码如下。
customTabsIntent = new CustomTabsIntent.Builder(mCustomTabsSession)
.setToolbarColor(ContextCompat.getColor(getBaseContext(), R.color.colorPrimary))
.setStartAnimations(getBaseContext(),
R.anim.slide_in_right, R.anim.slide_out_left)
.setExitAnimations(getBaseContext(),
android.R.anim.slide_in_left, android.R.anim.slide_out_right)
.setShowTitle(true)
.build();
customTabsIntent.intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
customTabsIntent.intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
customTabsIntent.launchUrl(Settings_Activity.this, Uri.parse(fitbitUrlBuilder.toString()));
Run Code Online (Sandbox Code Playgroud)
我尝试在清单文件中使用“singleTask”和“singleInstance”,但问题仍然存在。
如果我只使用意图“FLAG_NO_HISTORY”,它就可以工作。但是我需要强制使用“FLAG_ACTIVITY_NEW_TASK”,因为存在某种边缘情况,例如,如果特定站点的令牌被删除,我们尝试重新验证浏览器在 android 7.1 版上崩溃,需要再次手动启动应用程序。
对此的任何帮助表示赞赏。
我正在开发一个与医学相关的应用程序,我必须在我的应用程序中实现FitBit设备.
我正在关注它的FitBit开发人员工具,但我无法集成它,如果我在没有FitBit库的情况下手动操作,我无法在身份验证后备份我的应用程序.
我的代码如下 -
private void login() {
try {
HttpResponse response = null;
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 20000);
HttpConnectionParams.setSoTimeout(httpParameters, 20000);
HttpClient client = new DefaultHttpClient(httpParameters);
HttpGet request = new HttpGet(
"http://api.fitbit.com/oauth/request_token?oauth_consumer_key=7af733f021f649bcac32f6f7a4fe2e9a&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1358921319&oauth_nonce=456236281&oauth_callback=http://www.androidhub4you.com/&oauth_version=1.0&oauth_token=5cefb18d2a80073520211f03f8d75321&oauth_signature=QdVUzMvT6tveGyoPu%2BEevzvo07s%3D");
response = client.execute(request);
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String webServiceInfo = "";
while ((webServiceInfo = rd.readLine()) != null) {
Log.e("****Step 1***", "Webservice: " + webServiceInfo);
authToken = webServiceInfo.substring(12, 44);
Log.e("Auth token:", "Webservice: " + authToken);
}
} catch (Exception e) {
// TODO: handle …Run Code Online (Sandbox Code Playgroud) 我已经制作了一个演示项目App1,其中我添加了一个按钮,它将重定向到安装的应用程序假设App2(" fitbit ")我已经通过了很多教程,基本上知道如何通过第二个答案"这个应用程序不允许查询方案cydia"IOS9错误.但是我需要在App1中的LSApplicationQueriesSchemes中提到App2的URL方案(" fitbit ").
所以基本上问题是如何获得像fitbit这样的应用程序的URL Schemes .
这是我的代码
var url = NSURL(string: "itms://itunes.apple.com/in/app/fitbit/id462638897?mt=8")
@IBAction func redirectOnclick(_ sender: Any) {
let urlFitBt = NSURL(string: "fitbit://")
if UIApplication.shared.canOpenURL(urlFitBt! as URL)
{
UIApplication.shared.open(urlFitBt! as URL)
}
else
{
UIApplication.shared.open(url! as URL)
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用FitBit API来获取活动.作为回应,我正在获得一系列JSON活动.对于每个活动,他们提供一些细节,如姓名,activityId,卡路里等,但日期和时间不可用.是否有任何API可以获取活动详细信息以及开始日期和时间.
我目前正在使用Scrapy Python库.
首先,我对Fitbit的登录页面(https://www.fitbit.com/login)进行FormRequest调用以登录.然后我向Fitbit的API发出近100个请求(https://api.fitbit.com).
为了不强调API(并且不被禁止!),我想在settings.py文件中使用DOWNLOAD_DELAY在请求之间设置延迟.但它不起作用.
我在教程(http://scrapy.readthedocs.io/en/latest/intro/tutorial.html)中测试它,它在那里正常工作.
你怎么看?是因为我要求一个API(应该处理那种访问)?
编辑:这是我的蜘蛛的伪代码:
class FitbitSpider:
start_urls = ["https://www.fitbit.com/login"]
def parse(self, response):
yield scrapy.FormRequest(url,formdata,callback=after_login)
def after_login(self, response):
for i in range(100):
yield scrapy.Request("https://api.fitbit.com/[...]")
Run Code Online (Sandbox Code Playgroud)
编辑2:这是我的settings.py文件:
BOT_NAME = 'fitbitscraper'
SPIDER_MODULES = ['fitbitscraper.spiders']
NEWSPIDER_MODULE = 'fitbitscraper.spiders'
DOWNLOAD_DELAY = 20 #20 seconds of delay should be pretty noticeable
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 php 和 cURL 向 Fitbit oauth 2.0 api 发出请求。我可以获得我的授权代码,但无法设法将代码交换为令牌。Fitbit api 文档说(https://dev.fitbit.com/docs/oauth2/#access-token-request)我需要发布代码、客户端 ID、重定向 uri 并将授予类型设置为“authorization_code”。
但是,我在打印响应时不断收到错误消息。
"errorType":"unsupported_grant_type","message":"不支持授权 grant_type。有关 Fitbit Web API 授权流程的更多信息,请访问https://dev.fitbit.com/docs/oauth2。"}],"成功":false}
对于我的生活,我无法弄清楚我在下面的代码做错了什么。有什么建议?
$code = $_GET['code'];
$url = 'https://api.fitbit.com/oauth2/token';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
'code=' . $code . '&' .
'client_id=' . $oauth2_client_id . '&' .
'redirect_uri=' . $oauth2_redirect . '&' .
'grant_type=authorization_code'
)
);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Authorization: Basic '. base64_encode($oauth2_client_id.':'.$oauth2_secret),
'Content-Type: …Run Code Online (Sandbox Code Playgroud) 我正在将fitbit集成到我的应用程序中,我不希望用户每次都重定向到SafariViewController以获取访问令牌,因为我存储了访问令牌,但24小时后访问令牌即将到期.
在fitbit Fitbit OAuth 2.0的API中,有一个参数expires_in用于定义访问令牌的到期时间.在该参数中,我传递31536000了1年,但之后,访问令牌也在24小时内到期,之后我必须将用户重定向到SafariViewController.
那么,是否有任何解决方法,以便我不必将用户重定向到SafariViewController,我将通过它在后台刷新令牌的任何方法,类似的东西.
任何帮助,将不胜感激.
干杯!!!!!