1. 兩台iphone手機用同一用戶登錄,IOS APP消息推送token失效問題:
刪除失效TOKEN,從新獲取新的連接,或者是延遲!
2. token沒錯,為什麼Invalid credentials啊
項目背景
最近在項目開發中,遇到下面這樣一個問題:
在進行銘感操作之前,每個請求需要攜帶token,但是token 有有效期,token 失效後需要換取新的token並繼續請求。
需求分析
每個請求都需要攜帶 token ,所以我們可以使用 axios request 攔截器,在這里,我們給每個請求都加 token,這樣就可以節省每個請求再一次次的復制粘貼代碼。 token 失效問題,當我們token 失效,我們服務端會返回一個特定的錯誤表示,比如 token invalid,但是我們不能在每個請求之後去做刷新 token 的操作呀,所以這里我們就用 axios response 攔截器,我們統一處理所有請求成功之後響應過來的數據,然後對特殊數據進行處理,其他的正常分發。
功能實現
分析完問題後,我們來實現功能
安裝axios, 這里我們就贅述怎麼安裝axios.
在 main.js 注冊 axios
Vue.use(Vuex) Vue.use(VueAxios, axios) Vue.use(qs)
註:qs,使用axios,必須得安裝 qs,所有的Post 請求,我們都需要 qs,對參數進行序列化。
在 request 攔截器實現
axios.interceptors.request.use( config => { config.baseURL = '/api/' config.withCredentials = true // 允許攜帶token ,這個是解決跨域產生的相關問題 config.timeout = 2500 let token = sessionStorage.getItem('access_token') let csrf = store.getters.csrf if (token) { config.headers = { 'access-token': token, 'Content-Type': 'application/x-www-form-urlencoded' } } if (config.url === 'refresh') { config.headers = { 'refresh-token': sessionStorage.getItem('refresh_token'), 'Content-Type': 'application/x-www-form-urlencoded' } } return config }, error => { return Promise.reject(error) } )
在 response 攔截器實現
axios.interceptors.response.use( response => { // 定時刷新access-token if (!response.data.value && response.data.data.message === 'token invalid') { // 刷新token store.dispatch('refresh').then(response => { sessionStorage.setItem('access_token', response.data) }).catch(error => { throw new Error('token刷新' + error) }) } return response }, error => { return Promise.reject(error) } )
3. IOS客戶端到底怎麼生成Token啊,搞了一整天了
是第三方登錄需要Token嗎,如果是的話,需要向第三方發送請求,然後它會返回一個Token
4. ios devicetoken 怎麼獲取
這個,你來要先在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
里注冊自通知,注冊成功然後通過下面的代理方法獲取
#pragma mark /遠程通知注冊成功委託
- (void)application:(UIApplication *)application :(NSData *)deviceToken {
NSString *myToken = [[deviceToken description] :[NSCharacterSet :@"<>"]];
myToken = [myToken :@" " withString:@""];
5. ios devicetoken 怎麼獲取csdn
最近升級設備,測試時發現無法獲得設備token,查資料發現,原來ios的apns注冊與以往不同了。
首先在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中將之前注冊推送代碼更改如下:
//APNS注冊
//APNS 注冊
if (iOS8) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge
|UIRemoteNotificationTypeSound
|UIRemoteNotificationTypeAlert) categories:nil];
[[UIApplication sharedApplication] :settings];
}else
{
UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] :myTypes];
}
註:
#define iOS8 [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 ? 1 : 0
然後添加兩個ios8的新方法
#pragma mark APPLE APNS
#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application :(UIUserNotificationSettings *)notificationSettings
{
//register to receive notifications
[application ];
}
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
{
//handle the actions
if ([identifier isEqualToString:@"declineAction"]){
}
else if ([identifier isEqualToString:@"answerAction"]){
}
}
#endif
下面就可以正常在「
- (void)application:(UIApplication *)application :(NSData *)deviceToken
」中獲取設備token 了
如果獲取失敗,可以在「
- (void)application:(UIApplication *)application :(NSError *)error
」中列印錯誤信息
6. ios的devicetoken是變化的嗎
每一次App卸載重裝,devicetoken才會變。
7. Ios 消息推送的token 開發版和線上版是否不同
可以實現,給你一個思路,推送的流程是這樣的,程序運行起來以後,會判斷是回否這個程序要推送答,如果要的話會需要將手機和推送證書生成的一個唯一標識字元串(decice token)傳到我們自己的伺服器去,伺服器根據這個token和一個伺服器端的證書文件一起將配合,將一個推送消息發給蘋果的apns伺服器,蘋果根據這個token發送給指定的設備。所以只要你在伺服器端將登錄的用戶的用戶信息和這個token做一個關聯,完全可以指定發給某一個人,而不是發給所有人。
可以給分了吧
8. ios上的deviceToken怎麼獲取到
只要可以接受到推送消息就可以獲取到deviceToken,那麼就需要推送證書打包,並且uexWidget.setPushState(1),還要在內應用提示「**想給您發送容推送通知」時,點「好」。只有滿足以上條件,就可以接受到推送消息,蘋果的推送伺服器就會返回一個deviceToken給應用。這樣使用uexDevice.getInfo(11)才可以獲得deviceToken
9. ios開發 ios9為什麼不允許接收推送還能注冊deviecetoken
與之前的beta1一樣復,制beta2版本也並沒有詳細說明其更新內容按照常規估計,像iOS9.2.1這種小版本的更新一般都是以改進系統性能與功能完善為主。 點此下載:蘋果ios9.2.1固件正式版 今天凌晨,蘋果放出了iOS9.2.1的第二個測試版本,主要面向開發者和公測用戶。iOS9.2.1 beta2版本號為13D14,更新包大小為34.6M。與beta1一樣,蘋果並未說明beta2版本新增了哪些功能,很可能也是以bug修復和安全更新為主。 蘋果在12月16日推出第一個iOS9.2.1測試版,時隔3周左右時間,蘋果推送了第二個測試版,預測iOS9.2.1正式版會到2016年2月左右才會推送。 蘋果已經和中國銀聯達成協議,Apple Pay即將入登陸國內市場,正式投入使用後,中國銀聯卡持卡人可以將他們的銀聯卡添加到iPhone、Apple Watch以及iPad上。本次的測試版更新我們還未看到該功能,或許在下一次iOS重大更新的時候大家可以看到,非常值得期待!
10. 如何檢測IOS的deviceToken是否有效
同一台機器是一樣的,不然老變化,伺服器怎麼記錄這台設備的代號了。
但是如果機器初始專化後,這個屬token是會變化的。
就比如你先使用了一台iPhone,然後有微博的消息推送,是推送的你微博賬號的內容。
你把手機賣別人了,別人初始化手機後,如果還能接收到你微博賬號的內容就壞了。
所以初始化手機後,token會變化。